编程黑洞网
首页
编程
数据库
代码审查
网络应用
Android
wordpress
软件推荐
软件工程
逆向工程
信息安全
软件质量测试
地理信息
密码学
网站管理员
元堆栈交换
网络工程
操作系统
Ubuntu
计算机
Unix和Linux
服务器故障
Vi和Vim
运维
物联网
机器人
树莓派
计算机图形学
信号处理
重新编译/优化冗余代码以简化分析
逆向工程
|
2020-12-30
|
编程黑洞网
|
0条评论
|
543 人阅读
我正在分析使用Borland Delphi创建的应用程序,但是对象代码的质量差会使分析变得困难而乏味。该代码是如此繁琐,并充满了多余的指令,以至于很难弄清给定的代码试图完成什么。
在相关主题中确定解密方案,建议重新编译具有良好优化编译器的反编译器输出,可消除冗余并获得易于分析的目标代码。
我现在想知道什么是最好的方法。
有哪些工具可以根据目标代码或反汇编输出(IDA)来执行此操作?
评论
一般而言,代码去混淆的问题有很多重叠之处,尽管这里的混淆是偶然的(编译器不佳),而不是像代码混淆器那样是设计使然。随着新的编译器的产生,巨大的二进制文件由于过多的内联和展开而膨胀,类似的问题必将越来越多地出现。副作用-与全局寄存器分配和优化(LTCG)结合在一起-使用IDA当前的技术,此类二进制文件可能变得接近unFLIRTable。这增加了我们的分析工作量,并使消除噪声更加重要。
在这种特殊情况下,可以从广泛的Delphi / VCL RTTI信息中获得有关代码的语义和结构的提示。这里有一些IDA插件/脚本,以及许多其他工具,如DeDe(请参阅stackoverflow.com/questions/335104/…)。
相关主题:将机器代码转换为LLVM IR(将X86_64.X86.ARM分解/重新组装为LLVM位代码)
相关文章:使用RevGen和相关的StackOverflow实现对x86 Binaries的复杂分析,主题是revgen工具的源代码,包括有关如何混合源代码的信息。
#1 楼
我建议您看一下mcsema项目。
它将x86转换为LLVM中间表示形式,并且能够将更改重新编译回代码。一旦将代码转换为LLVM的中间表示形式,就可以通过现有的LLVM优化对其进行优化。
在游戏中找到特定功能(TS4)
我可以从IDA调试器向gdbserver发送gdb命令吗?
标签列表
java
(11)
r
(3)
r-faq
(3)
javascript
(17)
jquery
(3)
asynchronous
(2)
php
(17)
mysql
(7)
sql
(3)
html
(2)
regex
(2)
arrays
(2)
variables
(3)
warnings
(2)
language-agnostic
(2)
c++
(9)
c++-faq
(8)
parsing
(2)
debugging
(5)
c
(3)
error-handling
(3)
python
(10)
pandas
(3)
android
(3)
list
(3)
最近发表
IP地址错误的错误掩码
在Cisco IOS中自动进行配置备份(每分钟)
VRRP和HSRP有什么区别?
IP地址如何映射到MAC地址?
网站可以识别我的MAC地址吗?
在STP中如何选择根桥?
为什么要使用三根以太网电缆将交换机连接到路由器?
为什么10.1.255.255是无效的广播地址?
为什么将IP地址分配给每个接口而不是设备?这将意味着什么?
为什么Visual Studio 2013不愿意运行我的Web性能/负载测试?
对测试代码了解太多会不利吗?
如何隔离错误?
如何使用Selenium和WebDriver清除localStorage
评估测试项目
我如何说服管理层我们需要一个正式的质量保证部门?
FluentWait与WebDriverWait有何不同?
简历和求职建议-从开发到测试的职业转变
您如何等待Selenium 2中的jQuery Ajax调用完成
在持续开发下测试应用程序
Selenium的页面加载默认超时是多少?
IT项目中软件测试的真正商业价值是什么?
系统测试与系统集成测试(SIT)有何不同?
如何找到我们的“质量保证流程”的弱点?
测试人员应如何处理生产中发现的错误?
如果我不使用TDD但想过渡到敏捷,那我应该回去创建那些单元测试吗?
代码覆盖率和测试覆盖率有什么区别?
当团队想要忽略关键但难以重现的错误时,我应该如何应对
测试人员应该修复错误吗?
审核测试自动化代码的良好实践
质量检查人员应该能够编写测试代码吗?
随机文章
确定固件二进制文件中包含的OS的最简单方法是什么?
Ollydbg如何获取内存映射(alt + m)? [关闭]
需要帮助确定Roland合成器的主处理器
在真实环境(非虚拟环境)中分析恶意软件
SSH密钥类型,rsa,dsa和ecdsa,何时有简单的答案可供选择?
有效检查数字是否可以被3整除
我已经扎好手机了。怎么办?我从生根中能得到什么?
管理大量的地理空间数据? [关闭]
为什么要在电动机上并联电容器?他们的目的是什么?
康韦的JavaScript生活游戏
评论
一般而言,代码去混淆的问题有很多重叠之处,尽管这里的混淆是偶然的(编译器不佳),而不是像代码混淆器那样是设计使然。随着新的编译器的产生,巨大的二进制文件由于过多的内联和展开而膨胀,类似的问题必将越来越多地出现。副作用-与全局寄存器分配和优化(LTCG)结合在一起-使用IDA当前的技术,此类二进制文件可能变得接近unFLIRTable。这增加了我们的分析工作量,并使消除噪声更加重要。在这种特殊情况下,可以从广泛的Delphi / VCL RTTI信息中获得有关代码的语义和结构的提示。这里有一些IDA插件/脚本,以及许多其他工具,如DeDe(请参阅stackoverflow.com/questions/335104/…)。
相关主题:将机器代码转换为LLVM IR(将X86_64.X86.ARM分解/重新组装为LLVM位代码)
相关文章:使用RevGen和相关的StackOverflow实现对x86 Binaries的复杂分析,主题是revgen工具的源代码,包括有关如何混合源代码的信息。