【软件逆向-应用安全 --- 反compile的通用流程】此文章归类为:软件逆向。
预分析
是什么文件,是windows还是linux还是mac还是安卓上的可执行文件。
是什么壳子,具有壳的程序会阻碍正常分析流程
元数据提取,如果有壳可能会干扰正常的元数据分析需要去壳后再次分析这些数据
- 架构信息(x86/x64/ARM等)
- 编译器特征是gnu还是llvm还是msvc
- 导入导出表:识别关键API调用
- 段/节信息:在内存的文件是分段存储的
- 提取可读文本(URL、路径、错误信息),可以使用ai提取关键字符串
静态分析
有壳子先脱壳,自动脱不行就手动脱,配合dump内存映像文件,然后修复脱壳后的程序保证可以正常运行就是脱修完成了,这一步是最难的部分,需要深入学习,这里不讨论。
用IDA脚本反compile导出所有的代码。
先反compile导出函数和初始化函数数组,这两部分是最重要的入口函数
将代码由大到小排序。,然后大文件的代码使用用gemini和glm4.5、deepseek去分析函数功能通俗解释并分析是不是公共库函数,如果是关键代码再用claude这种重量级的ai进行分析。因为大的代码更有可能是关键函数。这里我用的是evol claude工具生成的代码。或者5cdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9L8h3q4J5k6h3&6S2i4K6u0W2j5h3W2Q4x3V1k6Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0k6Q4z5o6S2Q4z5e0k6Q4c8e0S2Q4z5o6m8Q4z5o6g2Q4c8e0k6Q4z5e0S2Q4b7f1k6Q4c8e0g2Q4z5f1y4Q4b7e0S2Q4c8e0c8Q4b7U0S2Q4z5p5c8Q4c8e0S2Q4b7e0q4Q4z5p5y4Q4c8e0g2Q4b7U0m8Q4b7U0q4Q4c8e0k6Q4z5f1k6Q4z5e0m8Q4c8e0g2Q4b7f1g2Q4z5f1c8Q4c8e0c8Q4b7U0W2Q4b7U0m8Q4c8e0c8Q4b7U0S2Q4z5o6m8Q4c8e0c8Q4b7U0S2Q4b7f1q4Q4c8e0N6Q4b7e0S2Q4b7U0y4Q4c8e0g2Q4b7f1g2Q4z5f1q4Q4c8e0S2Q4b7U0c8Q4b7e0k6Q4c8e0g2Q4z5p5k6Q4b7U0N6Q4c8e0y4Q4z5o6m8Q4z5o6u0Q4c8e0g2Q4z5p5k6Q4z5p5c8U0L8$3#2H3K9h3I4W2i4@1f1#2i4@1q4q4i4K6S2o6i4@1f1$3i4K6R3^5i4K6V1H3i4@1f1#2i4K6V1H3i4K6S2q4i4@1f1#2i4K6W2o6i4@1p5^5i4@1f1%4i4K6V1@1i4@1p5^5k6$3g2E0K9h3&6A6i4@1f1#2i4K6V1J5i4K6S2o6k6$3I4E0y4q4)9J5k6e0g2Q4c8e0y4Q4z5o6m8Q4z5o6q4V1k6h3g2H3M7$3g2W2K9#2!0q4y4q4!0n7c8q4)9&6b7#2!0q4y4q4!0n7z5q4!0n7b7g2!0q4z5q4!0n7c8g2)9^5y4g2!0q4y4g2)9^5b7g2!0m8z5g2!0q4y4g2)9^5z5q4)9^5y4W2!0q4y4W2)9&6c8g2)9&6x3q4!0q4y4g2!0n7y4#2!0m8y4g2!0q4y4g2)9^5y4g2!0n7y4#2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4g2)9&6b7W2!0m8x3q4!0q4y4q4!0n7z5q4!0n7b7h3y4D9j5i4g2V1k6g2!0q4y4g2!0m8y4q4!0m8b7g2!0q4z5q4!0n7y4q4!0n7y4g2!0q4y4q4!0n7b7g2)9^5y4W2!0q4x3#2)9^5x3q4)9^5x3R3`.`.
分析所有函数哪些是第三方库或者调转函数。排除无关干扰。
- FLIRT签名匹配标准库
- IDA的Lumina服务器识别已知函数
- 手动标记第三方库(OpenSSL/zlib等)
分析关键函数使用的外部数据有哪些。比如api或者加密数据,因为这些初始化数据不会包含在代码中,通过地址引用的方式使用,这里需要将这些数据补充到这里。
分析关键函数的交叉调用链还原原始的调用逻辑。按交叉引用(Cross-references, Xrefs)数量排序。被大量调用的函数通常是工具函数(如字符串处理、内存分配),而交叉引用很少但内部逻辑复杂的函数可能是核心功能。
- 数据流分析:追踪关键变量的传播路径
- 控制流分析:绘制状态机或流程图
动态分析
- 动态或者静态插桩快速分析内存中的函数。包含函数的调用的流程,函数入参和返回值,修改执行流程。
- 手动调试。在关键函数下断点分析内存,栈,寄存器,加载模块地址和大小,指令集的执行位置的完整功能,配置可能非常复杂但是通用性强。
报告文档
将所有关键函数和信息记录在一个文本中,同时将代码上传的gitee中方便下次分析
更多【软件逆向-应用安全 --- 反compile的通用流程】相关视频教程:www.yxfzedu.com