PE文件与加壳

PE

  • PE(Portable Executable)是Windows下可执行文件遵守的数据格式,如*.exe,*.dll
  • 除了二进制机器码,还包含了字符串,菜单,图标,位图,字体等。
  • 在程序被执行时,操作系统会按照PE文件格式的约定去相应的地方准确地定位各种类型的资源,并分别装入不同的区域。
  • PE文件格式把可执行文件分成若干个数据节(section)
    • rsrc 存放程序资源,如图标,菜单等
    • idata可执行文件所使用的动态链接库等外来函数与文件的信息
    • text由编译器产生,粗放这二进制的机器代码,也是我们反汇编和调试的对象
    • 初始化的数据快,如宏定义,全局变量,静态变量等
  • 如果是正常编译出的标准PE文件,其节信息往往是大致相同的,但这些section的名只是为了方便人的记忆与使用,使用Microsoft VisualC++中的编译指示符:#pragma_data_seg()可以把内容编译到任意的节中,节名也是自定义的。

加壳

  • 全称:可执行 程序资源压缩,是保护文件的常用手段。

  • 加壳后,PE的节信息就会变得非常古怪,在Crack和反病毒分析中需要经常处理这类古怪的PE文件。

  • 加壳过的程序可以直接运行,但是不能查看源代码,需要经过脱壳才可以查看。

  • 加壳类似于压缩,解压程序附加在原程序上,通过Windos加载器载入内存后,先于原程序执行,得到控制权,执行过程之中对原程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。

  • 加壳后,原始程序代码在磁盘文件中是以加密之后的形式存在的,只是在执行时还原,这样就可以比较有效的防止对程序文件的非法修改和静态反编译。

  • 加壳工具分为两种:

    • 压缩壳:减小软件体积,加密保护不是重点。
    • 加密壳种类比较多,不同的壳侧重点不同,一些壳单纯保护程序,另一些壳提供额外的功能,如提供注册机智,使用次数,时间限制等。