|=---------------------------------------------------------------------------=|
|=----------------------=[ pe/elf 文件加壳时的处理 ]=----------------------=|
|=---------------------------------------------------------------------------=|
|=---------------------------------------------------------------------------=|
|=--------------------------=[ By dummy ]=--------------------------=|
|=-----------------------=[ <dummy_at_ph4nt0m.org> ]=----------------------=|
|=---------------------------------------------------------------------------=|
前言:
最初的壳是在感染型的病毒技术上发展出来的,加壳目的一般是压缩或加密。本文主要
就x86平台下win32 pe和linux elf 加壳程序的实现做简单介绍和总结,以自己以前写相关
程序做线索叙述,其中程序源码是开源的,有兴趣的朋友可以继续进行改进。
ps: 其中有些地方很久没碰,可能有地方描述有误,还请见谅:)
正文:
-------------------------------------------------------
slm x86 win32 r3 pe packer
mimisys x86 win32 r0 pe packer
elfp x86 linux r3 elf packer
-------------------------------------------------------
一、一个壳的组成
一个完整的壳程序主要由 2 个部分组成 packer 和 loader。它们具体的作用分别是:
(1) packer
负责将待加壳程序压缩和加密处理、把loader写到待加壳程序上。以slm的pakcer
为例具体操作包括,pe有效性判断、优化可压缩数据、压缩和加密、添加loader、存放
加壳参数和待加壳程序原数据(oep等等)、改写入口点等等。
(2) loader
主要工作是解压或解密被加壳的程序,以slm的loader为例具体的操作包括:获取自
身位置、获取加壳参数、进行解压或解密、填充导入表、重定位、tls 初始化等等。
二、slm (x86 win32 r3 pe packer)
资料:
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
工具:
lordpe pe 文件格式查看编辑工具
dumpbin vc 自带coff文件格式查看工具
ollydbg r3 调试工具
源码结构:
./slm/cm 公共头文件和模块
./slm/pk packer 实现
./slm/sc loader 实现
在做这个时候对 pe 也是刚刚了解,所以 slm 很多地方现在看来有些问题:)。在第一
节已经简单描述 slm 的工作流程,下面主要就我当初做的时候遇到的问题做一些描述:
(1) 资源的处理
slm 的资源处理做的比较烦琐,当初目的是为了把可压缩资源数据归并到一起,进
行一次压缩,不可压缩单独存放。下面简单介绍一下资源的目录数据格式,详细还是看
看微软的文档和相关源码:)
从IMAGE_NT_HEADERS.IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_RESOURCE]
取出资源数据的地址res_rva,经过转换后第一个结构体是IMAGE_RESOURCE_DIRECTORY
IMAGE_RESOURCE_DIRECTORY:
NumberOfIdEntries 目录下 id 名称入口项个数
NumberOfNa
|=----------------------=[ pe/elf 文件加壳时的处理 ]=----------------------=|
|=---------------------------------------------------------------------------=|
|=---------------------------------------------------------------------------=|
|=--------------------------=[ By dummy ]=--------------------------=|
|=-----------------------=[ <dummy_at_ph4nt0m.org> ]=----------------------=|
|=---------------------------------------------------------------------------=|
前言:
最初的壳是在感染型的病毒技术上发展出来的,加壳目的一般是压缩或加密。本文主要
就x86平台下win32 pe和linux elf 加壳程序的实现做简单介绍和总结,以自己以前写相关
程序做线索叙述,其中程序源码是开源的,有兴趣的朋友可以继续进行改进。
ps: 其中有些地方很久没碰,可能有地方描述有误,还请见谅:)
正文:
-------------------------------------------------------
slm x86 win32 r3 pe packer
mimisys x86 win32 r0 pe packer
elfp x86 linux r3 elf packer
-------------------------------------------------------
一、一个壳的组成
一个完整的壳程序主要由 2 个部分组成 packer 和 loader。它们具体的作用分别是:
(1) packer
负责将待加壳程序压缩和加密处理、把loader写到待加壳程序上。以slm的pakcer
为例具体操作包括,pe有效性判断、优化可压缩数据、压缩和加密、添加loader、存放
加壳参数和待加壳程序原数据(oep等等)、改写入口点等等。
(2) loader
主要工作是解压或解密被加壳的程序,以slm的loader为例具体的操作包括:获取自
身位置、获取加壳参数、进行解压或解密、填充导入表、重定位、tls 初始化等等。
二、slm (x86 win32 r3 pe packer)
资料:
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
工具:
lordpe pe 文件格式查看编辑工具
dumpbin vc 自带coff文件格式查看工具
ollydbg r3 调试工具
源码结构:
./slm/cm 公共头文件和模块
./slm/pk packer 实现
./slm/sc loader 实现
在做这个时候对 pe 也是刚刚了解,所以 slm 很多地方现在看来有些问题:)。在第一
节已经简单描述 slm 的工作流程,下面主要就我当初做的时候遇到的问题做一些描述:
(1) 资源的处理
slm 的资源处理做的比较烦琐,当初目的是为了把可压缩资源数据归并到一起,进
行一次压缩,不可压缩单独存放。下面简单介绍一下资源的目录数据格式,详细还是看
看微软的文档和相关源码:)
从IMAGE_NT_HEADERS.IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_RESOURCE]
取出资源数据的地址res_rva,经过转换后第一个结构体是IMAGE_RESOURCE_DIRECTORY
IMAGE_RESOURCE_DIRECTORY:
NumberOfIdEntries 目录下 id 名称入口项个数
NumberOfNa