搞逆向或者软件分析的朋友,可能都见过那种查壳工具的输出结果。今天我就拿自己遇到过的一些情况,聊聊不同编译器生成的可执行文件都有啥特征。
先说微软系的:比如C#或VB.NET的程序,EP Token经常是06000005这种模式。还有Visual Basic 5.0/6.0的老程序,以及各种版本的Visual C++——5.0/6.0、2008(也就是9.0)、2012(v.11)、2013(v.12),它们的特征码里常带E8这种调用模式。我碰到过不少用VC++ 2013编译的,没有加密压缩,直接就能看到msvcrt的导入表。
汇编写的程序也不少见,像TASM、MASM、FASM这些,编译出来的东西通常很小,入口点风格跟高级语言完全不一样。有一次我分析一个驱动文件,一看就是MASM写的,干净利落。
再说Borland家的,那可是老古董了。Borland C++从2002年的版本到后来Embarcadero RAD Studio 2007-2010,特征都很明显。还有Delphi,2.0到7.0这黄金时代的作品,现在在一些老系统里还能见到。说实话,Borland的编译器生成的代码跟微软的很不一样,用惯了的人一眼就能认出来。
AutoIt编译的脚本也挺有特点,v3.3.12.0版本的stub居然用的微软VC++ 2012,但运行起来就是自动化脚本那味儿。
最后说说国产的易语言,EPL 4.x和早期版本。它的stub经常伪装成VC++ 5.0/6.0,但实际跑起来就是中文编程那套。我之前分析过一个外挂,一看就是易语言写的,入口点特征太明显了。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删