PEiD 和其他工具如何检测编译器类型? 检测过程可以是动态的吗?又如何呢? 除了PE文件处理还有其他程序吗?
编译器类型检测基于 EXE 文件中的编译器签名。
虽然我不完全确定 PEiD 是如何工作的,但我认为有多种方法可以实现这一目标。特别是,您希望从生成的代码中查找各种“指纹”。例如,编译器处理二进制文件中已知字符串的方式(如 C 中的零终止,或如 Pascal 中在文本之前带有长度值)或如何为函数设置堆栈帧。然后当然是寻找常见的代码结构,如何处理某些结构,例如循环、条件或在调用主函数之前设置运行时。另一种方法是查看导入和依赖项,这可以深入了解所使用的运行时。
当然,最简单的方法是检查二进制文件中留下的任何元数据,而无需实际查看代码。通常有专门用于各种元数据甚至注释的部分,可以准确地揭示用于编译的确切编译器和版本。虽然这些可以很容易地被欺骗,但是一个好的检测器会考虑到这一点并查看实际代码以寻找线索。