当前位置: 首页 > news >正文

基于IDA的bindiff使用

前言

需要逆向的二进制使用静态链接的方式打包了 cryptopp 库,需要还原 cryptopp 的符号,但是不知道具体版本号

这里使用 bindiff 从已发布的 cryptopp 库中恢复函数符号

版本安装

逆向这里使用的 IDA 为 7.5 的版本,解压后使用 idapyswitch 指定 IDA 使用自身目录下的 python 版本

cmd 到 IDA 的安装目录,使用命令切换 idapyswitch --force-path python38/python3.dll

启动 IDA 后,在左下角这里可以看到 python ,说明 python 环境已经配置好了

20250607102340

bindiff 为 google 开发的用于对比二进制的,可以使用图形界面,也可以在 IDA 中使用,github 开源地址 https://github.com/google/bindiff

bindiff 基于 JAVA 开发,如果需要使用 bindiff 的图形界面需要配置好 JAVA 版本

bindiff 在 IDA 下使用有两个版本,IDA8 版本需要安装 bindiff8,IDA7 版本需要安装 bindiff7

在 win 中下载对应版本的 msi 包并安装后,将下面的 4 个插件动态库拷贝到 IDA 的 plugins 目录下

20250607103255

重新启动 IDA 后,在 Edit -> Plugins 菜单下就能看到 BinDiff 的菜单了,说明插件已经配置好了

20250607103634

库文件对比

官方的库下载地址在 https://cryptopp.com/index.html#download, 这里下载最新的 cryptopp890 进行分析

下载后解压使用 vs2022 打开然后编译 DLL (待逆向的二进制文件是静态链接的,这里编译 DLL 不影响分析)

20250607154205

编译该 DLL 后,使用 IDA 打开该 DLL 文件,然后退出 IDA 进行保存,这时候会生成一个 cryptopp.dll.i64 文件

使用 IDA 打开之前的逆向工程中,点击 Edit -> Plugins -> BinDiff 打开窗口,点击 Diff Database 然后选择刚生成的 cryptopp.dll.i64 文件

20250607154943

稍等一会 bindiff 分析完毕后,界面上显示 bindiff 的四个子窗口,这些窗口也可以在 view -> BinDiff 菜单下进行打开

这里只关心 Matched functions,也就是显示很多绿色记录的这个窗口,可以把其他窗口先关闭掉

20250607155548

Similarity 字段表示相似度,Confidence 表示可信度,Confidence 还考虑了调用关系等上下文信息

EA Primary 和 Name Primary 当前正在分析的地址和函数名,EA Secondary 和 Name Secondary 表示 cryptopp.dll.i64 中的地址和函数名

20250607160310

在进行分析后,就可以将匹配的符号,应用到当前分析的工程中去了

在 Matched functions 窗口中选择需要应用的函数记录(可以多选),然后右键菜单中选择 import symbols/comments 然后生效

然后就可以看到,正在分析的工程中的函数命名被同步过来了

20250607172042

20250607172316

http://www.xdnf.cn/news/925633.html

相关文章:

  • Java并发编程之并发编程的调试与测试
  • 【MLLM】字节BAGEL多模态理解和生成统一模型
  • 数字通信复习
  • RAG检索系统的两大核心利器——Embedding模型和Rerank模型
  • ELF文件,静态链接(Linux)
  • 算法练习-回溯
  • 指针与函数参数传递详解 —— 值传递与地址传递的区别及应用
  • Postman测试学习(1)
  • ABAP EXCEL导入换行符
  • A Survey on the Memory Mechanism of Large Language Model based Agents
  • 【Go语言基础【12】】指针:声明、取地址、解引用
  • 策略模式实战:Spring中动态选择商品处理策略的实现
  • 软件测试—学习Day10
  • 开疆智能Ethernet/IP转Modbus网关连接MAG8000电池流量计配置案例
  • python版若依框架开发:集成Dash应⽤
  • 将 Elastic 的数据摄取转向 OpenTelemetry
  • SWE-Dev:开启自主特征驱动软件开发新纪元,重新定义大模型编码能力边界
  • 理解 RAG_HYBRID_BM25_WEIGHT:打造更智能的混合检索增强生成系统
  • 【Go核心编程】第十三章:接口与多态——灵活性的艺术
  • FUSSNet复现
  • vue注册自定义指令
  • 黄柏基因组-小檗碱生物合成的趋同进化-文献精读142
  • h5 安卓手机去掉滚动条问题
  • compose 组件 ---无ui组件
  • 基于TarNet、CFRNet与DragonNet的深度因果推断模型全解析
  • Python基于Django的文件销毁系统【附源码、文档说明】
  • Qwen 大模型-对话模板中system与user的区别解析
  • 并发编程实战(生产者消费者模型)
  • conda环境配置(二) —— 报错
  • QuickJS 如何发送一封邮件 ?