|
|
1
0
这个问题的答案似乎是没有,没有任何这样的工具(至少,不在反恶意软件社区之外)。 因此,为了看看能否做到,我写了一个简单的概念证明 executable_diff 实用性,或多或少地做我正在寻找的。它在Linux和MacOS/X下运行,当调用它时,它通过反汇编程序(在MacOS/X下为“otool”,在Linux下为“objdump”)运行两个可执行文件中的每一个,然后扫描反汇编文本,查看文本段(或.rodata段中的字符串)中的哪些函数在一个可执行文件和下一个可执行文件之间是不同的。 然后,它打印出一个列表,其中的函数与另一个可执行文件中的对应函数不相同,并写出一个包含实际差异的文件,以防用户希望看到 怎样 功能不同。 实现该程序的主要复杂因素是,当您更改程序中一个函数的大小时,由于随后出现在文本段中的所有函数地址都会发生更改,因此更改会在程序的其余部分产生涟漪。因此,程序还包含过滤误报的逻辑(在执行diff之前,通过将程序集中的绝对地址转换回其相应的函数名) 正如对这个问题的评论所指出的,不同的可执行文件不能代替使用版本控制和跟踪与每个构建的可执行文件相关联的存储库修订号,这样您就可以在源代码级别进行差异。我写这篇文章只是为了看看是否可以做到,作为一个学习练习,我要教自己更多关于源代码的更改如何反映在生成的二进制文件中。可执行差异只应被视为一种粗略的启发式方法,因为它在某些情况下无疑会产生误报,并错误地忽略其他情况下有意义的更改。 |