二进制分析:编译器特性与混淆代码解析
1. 寻找主函数的方法
学习如何找到主函数,关键在于理解可执行文件的构建方式。当遇到困难时,可以使用与分析的二进制文件相同的工具构建一些简单的可执行文件(例如,在主函数中引用一个易于识别的字符串)。通过研究这些测试用例,能够了解使用特定工具集构建的二进制文件的基本结构,这有助于进一步分析使用相同工具集构建的更复杂的二进制文件。
2. 调试版与发布版二进制文件的差异
- 构建选项差异 :Microsoft 的 Visual Studio 项目通常能够构建程序二进制文件的调试版或发布版。调试版和发布版的构建选项存在差异,发布版通常经过优化,而调试版未经过优化,并且调试版会链接额外的符号信息和调试版的运行时库。
- 反汇编差异 :使用 IDA 反汇编时,Visual Studio 项目的调试版和发布版看起来有很大不同。调试版中包含一些特定的编译器和链接器选项,如基本运行时检查(/RTCx),会在生成的二进制文件中引入额外的代码,这会导致 IDA 的启动签名匹配过程失败,使得 IDA 难以自动定位调试版二进制文件中的主函数。
- 函数调用差异 :调试版二进制文件中几乎所有函数都是通过跳转函数(也称为 thunk 函数)调用的。例如:
.text:00411050 sub_411050 proc near ; CODE XREF: start_0+3
超级会员免费看
订阅专栏 解锁全文
1366

被折叠的 条评论
为什么被折叠?



