pe-elf 文件加壳时的处理

本文介绍了x86平台下Win32 PE和Linux ELF加壳程序的实现,主要包括packer和loader的工作原理。讨论了资源处理、导入表处理、TLS处理以及RVA与RAW转换等关键步骤。同时,文章提到了几个具体的加壳工具slm、mimisys和elfp,并探讨了它们在处理PE和ELF文件时的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 |=---------------------------------------------------------------------------=|
|=----------------------=[  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值