2022年最佳的9种逆向工程工具[持续更新]

2023-10-27

逆向是复杂的。然而,软件开发人员经常在面临一项具有挑战性的任务时转向反向工程:增强软件安全性、使软件与第三方组件兼容、维护遗留代码,等等。

在本文中,我们将描述我们的软件逆向程序在工作中所依赖的主要工具,并展示如何使用这些工具的实际示例。本文对于熟悉汇编语言和网络交互原则的读者以及具有使用API函数进行Windows编程的经验的读者非常有用。

1. IDA Pro,Hex Rays

IDA Pro是最好和最受欢迎的逆向工程软件工具之一。它是一种交互式反汇编程序,具有内置命令语言 ( IDC ),并支持多种处理器和操作系统的多种可执行格式。IDA Pro 还有大量的插件可以进一步扩展反汇编器的功能。

IDA Pro 的主要优点是它允许您以交互方式更改显示数据的任何元素:

  • 给函数、变量、数据结构等命名。
  • 更改数据表示(如数字、各种编码的字符串、数据结构)
  • 搭建图表和代码流程图,简化对反汇编代码的理解
  • 使用 C++ 中有关函数参数和结构定义的类型信息,以便自动命名参数和变量
  • 自动识别和命名汇编代码中的标准库函数
  • 以及更多

截图 1.IDA Pro 界面

除了反汇编器本身,让我们也仔细看看一些 IDA 插件。

  • Hex-Rays 反编译器
  • 这个插件可以将原生处理器代码变成更易读的、类似 C 的版本。Hex-Rays Decompiler 生成的 C 代码相当准确,可与人类逆向工程师生成的代码相媲美。无论架构如何,它都能正确反编译由各种 C++ 编译器生成的代码。但是,Hex-Rays Decompiler 在处理复杂的汇编代码时可能会出现问题,其中原始代码是通过添加内联汇编或进行一些手动优化来专门修改的。 
  • Lighthouse
  • 该插件使您能够标记反汇编程序中的执行路径。因此,您可以了解哪些代码段参与了执行,以及它们是否涉及某些算法或功能。
  • 基本上,这个插件将代码覆盖工具的报告加载到 IDA 数据库中,并根据代码的执行次数标记代码片段。这使得在浏览反汇编时可以清楚地看到代码的哪一部分值得您注意。
  • ClassInformer
  • 此插件旨在用于 Visual Studio 构建的二进制文件,并搜索存储在可执行文件数据部分中的 RTTI 信息。RTTI 信息允许插件查找 C++ 类的类名和虚拟方法,并为用户命名。此外,ClassInformer 可以为您提供找到的类的列表。
  • BinDiff 由 zynamix
  • 该工具使用 IDA 引擎将二进制文件作为汇编代码而不是字节流进行比较。BinDiff 可以将同一程序的两个版本的代码差异确定为添加、删除或替换的指令列表。更改也可以表示为代码流图。
  • IDA-功能标注器
  • 该插件分析导入的函数和调用它们的函数,然后按标签对它们进行分组:密码学相关、注册表相关、网络相关等。这样的分组可以更容易地找到负责特定操作的代码部分。
  • ida-x86emu
  • 该插件模拟反汇编代码的执行,而无需在调试器中运行正在分析的应用程序。使用此插件,您可以模拟执行任何代码的结果,而无需修改系统中的某些内容。您需要做的就是指定 CPU 寄存器的起始值。然后,您可以逐步执行。

2. CFF Explorer

CFF Explorer是一套用于可移植可执行 (PE) 编辑的工具,其中包括:

  • PE 和 HEX 编辑器
  • 资源编辑器
  • 导入编辑器
  • 签名扫描仪
  • 地址转换器
  • 反汇编器
  • 依赖分析器
  • 和更多

截图 2. CFF Explorer 界面

3. API Monitor

API Monitor是一个用于拦截应用程序和服务进行的 API 函数调用的应用程序。该工具还可以显示输入和输出数据。 

默认情况下,API Monitor 包含超过 13,000 个 API 函数和 1,300 多个 COM 接口方法的定义。

截图 3. API Monitor 的 API Capture Filter 接口

4.WinHex

WinHex是一个十六进制编辑器,它为 Windows 提供了一组丰富的功能和开发工具。 

WinHex 可以显示软件文件的校验和或代码,这是普通文本编辑器无法做到的。

截图 4. WinHex 界面

5. Hiew

Hiew是一个专注于处理代码的二进制文件编辑器。它具有用于 x86、x86-64 和 ARM 的内置反汇编器以及用于 x86 和 x86-64 的汇编器。

Hiew 的主要特点包括:

  • 查看和编辑逻辑和物理驱动器
  • 按模板搜索汇编命令
  • 键盘宏
  • 内置64位计算器
  • 创建自定义插件的工具

截图 5. Hiew 界面

6.Fiddler

Fiddler 是一个代理,您可以使用它来拦截在应用程序和服务器之间传输的 HTTP/HTTPS 流量,对其进行监控和分析。Fiddler 可以在系统范围内拦截 HTTP/HTTPS 流量。您还可以添加插件(例如 wbxml 视图,它可以解码 wbxml)并在不同的视图中显示请求/响应。

截图 6. Fiddler 界面

Fiddler 有一个内置的十六进制编辑器,可以根据选定的请求生成请求或创建自定义请求。此外,Request to Code 插件允许您准备好在 C#、Visual Basic 或 Python 中执行请求的代码。

7.锡拉

是一个用于转储正在运行的应用程序进程并恢复 PE 导入表的应用程序。在它的帮助下,您可以获得完全恢复的可以由操作系统运行的 PE 文件。

截图 7. Scylla 界面。图片来源:堆栈交换

8.重定位部分编辑器

Relocation Section Editor是用于编辑 PE 文件中的重定位表的应用程序。此工具的主要目的是在修补可重定位代码的情况下修改重定位表。但它通常用于在恢复受保护文件时完全删除重定位表。

受保护的文件实际上只包含解包器代码的重定位表。实际代码的重定位表通常隐藏在解包器数据中。因此,如果正在恢复转储,有两种方法可以为真实代码恢复丢失的重定位表: 

  1. 强制将应用程序加载到两个不同的基地址,然后比较转储以查看正在修补的代码部分并制作新的重定位表。
  2. 完全删除重定位表,并在 PE 文件头中指定该文件不可重定位。

截图 8. Relocation Section Editor 界面

9. PEID

PEiD 是检测封隔器的最佳逆向工程工具之一。通过分析熵,PEiD 可以检测应用程序是否被打包。

还有各种有用的插件可以帮助分析 PE 文件。例如,KANAL(PEiD 的 Krypto Analyzer)插件分析 PE 文件中是否存在已知的加密算法。

截图 9. PEiD 接口

这些是 Apriorit 的逆向工程师在处理 Windows 逆向项目时经常使用的九种工具。如您所见,这些逆向工程软件中的每一个都解决了一组非常独特的特定任务。在下一节中,我们将提供实际示例,展示这些工具中的每一个在 Windows 逆向中的作用和重要性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2022年最佳的9种逆向工程工具[持续更新] 的相关文章

随机推荐

  • java中执行js代码块_在Java中执行js代码

    Performance Monitor2 Peformance Counter Performance Counter 是量化系统状态或活动的一个数值 Windows Performance Monitor在一定时间间隔内 默认的取样间隔是
  • 使用timerfd实现定时器功能

    依旧以muduo为例 使用timerfd可以使用与socketfd类型相同的方式在IO复用中使用 使用timerfd create 创建一个timerfd 接着使用timerfd settime 设置定时器的到期时间 我们只需要注册time
  • 基于streamlit的表格展示-完美解决方案

    问题 用streamlit开发web app非常实用 但是streamlit的表格展示非常不友好 只有两个简单的接口函数 st table df 和st dataframe df 对于字段稍微比较多的dataframe显示效果相当不友好 s
  • linux安装中文、中文输入法以及火狐浏览器中文

    emm 今天突然想用下linux版本的web项目 发现进入浏览器后无法输入中文 鹅且也不知道中文输入法的入口 OTZ 摸索了一会 整理出来分享下 这里是分割线 啦啦啦啦 第一步 设置中文 话不多说直接看图 保存好 退出终端 重启系统 界面啥
  • 报错 LINK : fatal error LNK1181: 无法打开输入文件“cxcore.lib”

    转自 http www cnblogs com lxt287994374 archive 2012 11 23 2785274 html vs2010报错 1 gt LINK fatal error LNK1181 无法打开输入文件 cxc
  • C++头文件容器库——vector

    vector的使用 首先添加头文件 include
  • GDI+使用步骤

    相比较GDI GDI 增加了渐变的画刷 支持多种图像格式等 不过最大的变化 还是编程模型上的变化 GDI 使用了面向对象的思想 对接口进行了类封装 使用更加方便 在应用程序中使用GDI 库应该遵循一下步骤 1 引入Gdiplus h头文件
  • 辟谣、催债、倒闭.....2018年后,将再无创业黄金期!

    导读 上下游没钱了 信贷机构没钱了 风险投资人也没钱了 中小企业成本和资金压力大 企业违约 到期没法还债 非银行金融机构爆雷 大量出问题 股市非理性下滑 所有人进入新一轮升级性迷茫 由于各项成本的抬升 未来 不缺钱也不缺资源的头部企业将变得
  • Spark 基础教程

    Spark是基于内存计算的大数据并行计算框架 可用于构建大型的 低延迟的数据分析应用程序 Spark特点 运行速度快 Spark使用先进的DAG Directed Acyclic Graph 有向无环图 执行引擎 以支持循环数据流与内存计算
  • 软件发布之版本命名

    简介软件的版本命名与编号 img src http blog csdn net ppbage aggbug 747919 aspx width 1 height 1
  • unity--触屏游戏中如何判断点击的位置的左右&触屏游戏中如何判断点击的位置的左右&通过反转对象,让左侧运动的动画应用于右侧运动&通过代码改变图层覆盖顺序(Sorting Layer)

    文章目录 触屏游戏中如何判断点击的位置的左右 使用获取到的触碰坐标来进行左右移动 通过反转对象 让左侧运动的动画应用于右侧运动 通过代码改变图层覆盖顺序 Sorting Layer 触屏游戏中如何判断点击的位置的左右 我们先要有一个可以反馈
  • osg学习(四十)osg::Viewer的realize创建窗体的几种方式

    能够根据屏幕数 创建不同位置的窗口 void Viewer realize 在某一个屏幕上创建无边框窗口 在某一个屏幕上创建正常窗口 在所有屏幕上创建正常窗口 一个窗口 窗口位置可以跨屏幕 osgViewer SingleWindow实现
  • promise笔记

    promise笔记 以下笔记主要参考axios官网里的promise教程 写在这里方便以后复习或者查找 Promise javascript info 可以通过这个链接进行学习 更加详细 文章目录 promise笔记 1 介绍 2 基本语法
  • 将字符串格式的时间格式化

    时间格式化 param Number date 时间戳 param DateString fmt 时间格式 dateFormat yyyy MM dd hh mm ss S gt 2016 03 12 20 13 32 232 return
  • Object.create 以及 Object.setPrototypeOf

    第一部分 Object crate 方法是es5中的关于原型的方法 这个方法会使用指定的原型对象以及属性去创建一个新的对象 语法 Object create proto propertiesObjecy 参数 proto 必须的 一个对象
  • 云计算简介

    什么是 云 迁移至云端 在云中运行 在云中存储 从云端访问 当今时代 似乎一切都在 云 中进行 但是 云 究竟是一个什么样的概念 简单来说 云就是互联网连接的另一端 你可以从云端访问各种应用程序和服务 也可以在云端安全存储你的数据 云 之所
  • 扫描二维码 跳转到小程序指定页面

    注意 必须发布代码之后才能使用扫描二维码跳转 规则 1 二维码规则 填写你要生成的二维码的链接 2 小程序功能页面 要跳转的小程序的页面 3 测试链接 也填同样的链接 4 将上面的链接生成一个二维码 测试链接 5 通过微信扫描这个二维码跳转
  • 安装Apex库

    在Linux系统下安装Apex库 1 安装流程 按顺序使用如下命令 git clone https github com NVIDIA apex cd apex pip3 install v no cache dir 注意 不能直接使用pi
  • iOS 多线程

    1 怎么用GCD实现多读单写 dispatch barrier async 2 ios系统为我们提供的几种多程序技术各自的特点是怎样的 GCD 实现一些简单的线程同步 子线程的分派 包括一些类似于多读单写 nsoperation 比如adn
  • 2022年最佳的9种逆向工程工具[持续更新]

    逆向是复杂的 然而 软件开发人员经常在面临一项具有挑战性的任务时转向反向工程 增强软件安全性 使软件与第三方组件兼容 维护遗留代码 等等 在本文中 我们将描述我们的软件逆向程序在工作中所依赖的主要工具 并展示如何使用这些工具的实际示例 本文