PE
- PE(Portable Executable)是Windows下可执行文件遵守的数据格式,如*.exe,*.dll
- 除了二进制机器码,还包含了字符串,菜单,图标,位图,字体等。
- 在程序被执行时,操作系统会按照PE文件格式的约定去相应的地方准确地定位各种类型的资源,并分别装入不同的区域。
- PE文件格式把可执行文件分成若干个数据节(section)
- rsrc 存放程序资源,如图标,菜单等
- idata可执行文件所使用的动态链接库等外来函数与文件的信息
- text由编译器产生,粗放这二进制的机器代码,也是我们反汇编和调试的对象
- 初始化的数据快,如宏定义,全局变量,静态变量等
- 如果是正常编译出的标准PE文件,其节信息往往是大致相同的,但这些section的名只是为了方便人的记忆与使用,使用Microsoft VisualC++中的编译指示符:#pragma_data_seg()可以把内容编译到任意的节中,节名也是自定义的。
加壳
全称:可执行 程序资源压缩,是保护文件的常用手段。
加壳后,PE的节信息就会变得非常古怪,在Crack和反病毒分析中需要经常处理这类古怪的PE文件。
加壳过的程序可以直接运行,但是不能查看源代码,需要经过脱壳才可以查看。
加壳类似于压缩,解压程序附加在原程序上,通过Windos加载器载入内存后,先于原程序执行,得到控制权,执行过程之中对原程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。
加壳后,原始程序代码在磁盘文件中是以加密之后的形式存在的,只是在执行时还原,这样就可以比较有效的防止对程序文件的非法修改和静态反编译。
加壳工具分为两种:
- 压缩壳:减小软件体积,加密保护不是重点。
- 加密壳种类比较多,不同的壳侧重点不同,一些壳单纯保护程序,另一些壳提供额外的功能,如提供注册机智,使用次数,时间限制等。