小编b42*_*b42的帖子

装配级功能指纹

我想确定两个可执行文件中的两个函数是否是从相同的(C)源代码编译的,并且即使它们是由不同的编译器版本或不同的编译选项编译的,也希望这样做.目前,我正在考虑实现某种汇编级功能指纹识别.函数的指纹应具有以下属性:

  1. 在不同情况下从同一来源编译的两个函数可能具有相同的指纹(或类似的指纹),
  2. 从不同的C源编译的两个函数可能有不同的指纹,
  3. (奖金)如果两个源函数相似,则指纹也相似(对于类似的一些合理定义).

我现在正在寻找的是一组编译函数的属性,它们分别满足(1.)并且希望也(2.).

假设

当然,这通常是不可能的,但可能存在一些在大多数情况下都能起作用的东西.以下是一些可以使其更容易的假设:

  • linux ELF二进制文件(不提供调试信息),
  • 没有任何混淆,
  • 由gcc编译,
  • 在x86 linux上(可以在其他架构上实现的方法会很好).

思路

不幸的是,我几乎没有组装经验.以下是上述属性的一些想法:

  • 函数中包含的指令类型(即浮点指令,内存屏障)
  • 来自函数的内存访问(它是否从堆读取/写入?堆栈?)
  • 调用库函数(它们的名称应该在ELF中可用;它们的顺序通常也不应该更改)
  • 控制流图的形状(我猜这将高度依赖于编译器)

现有工作

我只能找到相关的相关工作:


您对功能属性有什么建议吗?还是一个不同的想法也能实现我的目标?或类似的东西已经实施,我完全错过了吗?

c assembly executable reverse-engineering fingerprint

8
推荐指数
1
解决办法
757
查看次数