我最近发现了PIN,它允许动态检测二进制代码,同时仍然使程序相信它在未经修改的情况下运行。
最近,我听说了Dyninst和DynamoRIO。你知道其他一些类似的工具吗?更重要的是,你知道它们之间的区别吗?他们在逆向工程和二进制代码分析主题方面的优势和劣势是什么?
更具体地说,我感兴趣的属性是:
- 开源许可证
- 操作系统可移植性(Linux、Windows、Mac 等)
- 硬件架构可移植性(x86(32 位和 64 位)、ARM、...)
- 不知不觉地运行程序,尤其是当程序执行一些技巧时,例如可执行代码生成/修改、指令重叠、内存映像校验和等。
- 难以检测(程序读取
/proc/self/maps或尝试mmap所有应该空闲的内存页面甚至读取硬件指令计数器如何?)
但当然,其他常用属性也非常受欢迎,例如低开销和易用性。