首页 >> 大全

软件保护技术:加壳与脱壳

2023-12-31 大全 23 作者:考证青年

加壳原理浅析: 1.什么是壳:

专门负责对程序体积进行压缩,或者是保护一个程序不被非法修改、逆向分析的一类软件。

壳通过附加自身代码在保护对象(原始程序)上,在操作系统对原始程序代码进行执行只求按获得程序控制权,进而对原始程序进行解压或解密等还原操作,完成操作后控制权将还给原始程序,程序的元时代吗才开始被执行。

2.壳的分类: 3.壳的加载过程: 4.如何寻找原入口点(OEP)

根据跨段指令寻找OEP:

绝大多数加壳程序会在被加密的程序中加上一个或多个段(),在最后跳转值OEP时一般都是通过跨段跳转指令进行转移,所以依据跨度的转移指令(远jmp等),就可找到真正的入口点,在该跳转指令前一般会有POPAD/POPFD指令出现(用于恢复入口现场),可以用作定位参考。(是保存通用寄存器,POPFD是保存状态寄存器,jmp的机械代码是19开头)

UPX用了一次跨段的转移指令,(远JMP,指令以E9开头),在跳至OEP的指令处可以看到虚拟地址的值有一个明显突变,

据此可以确定OEP的位置

根据堆栈平衡原理寻找OEP:

该方法是用“ESP定律”,对绝大部分的压缩壳都很有效,原理便是基于栈平衡。

壳段代码在保护现场后,我们对ESP指向的内存单元下硬件访问断点,那么在壳段代码恢复现场时一定会访问到这个单元,此时我们EIP所处的位置处于壳段代码末尾,距离跳转至OEP也就不远了

调试壳:(以UPX壳为例) 加壳前后对比:

首先查看在未加壳是的EP代码,以及PE结构:

在未加壳时程序的PE结构为正常的代码段、数据段以及资源段

然后对比以下加壳后的程序:

原来的加壳后程序的PE结构被改变了,段名变为了UPX0、UPX1。

调试程序.exe

用OD打开程序:

在程序的开始,可以看到和之前介绍的一样,壳加载的第一步就是对入口现场的保存,然后分别把UPX1的起始地址设置到esi寄存器,将UPX0的起始地址设置到edi寄存器。

tips:UPX文件的第一个节区仅存在于内存,该处及是解压缩后保存源文件代码的地方。也就是说,解压缩过程就是对节区UPX1进行解密,并将解密后的内容保存到EDI所指向的UPX0节区。

01015330 > $  60            pushad
01015331   .  BE 00100101   mov esi,notepad_.01011000
01015336   .  8DBE 0000FFFF lea edi,dword ptr ds:[esi-0x10000]

循环一:

CTRL+F8开始跟踪代码,观察程序运行,当程序运行到第一个循环时按F7停下来,观察该循环的作用:

这段代码的作用就是将EDX指向的内存数据一个字节一个字节的拷贝到EDI指向的内存地址处,查看寄存器,EDX所指向的地址为UPX0节区的起始地址,查看对应地址的内存数据:

全是NULL,这个循环的作用是确保写入的目标地址为空,在地址处设置断点,F9跳过该循环。

循环二:

继续CTRL+F8,会遇到一个较大的循环,这个循环为正式的解压缩循环

AL存放ESI中的数据,经过解压缩运算后存入EDI指向的内存地址中,解压缩过程没看懂。

循环三:

继续跟踪代码

这段循环代码用于恢复源代码的CALL/JMP指令的地址

循环四:

这个循环用于恢复IAT表,在地址处设置EDI=,它指向第二个节区(UPX1)区域,该区域中保存着原.exe调用的API函数名称的字符串。

UPX压缩原.exe文件时,它会分析其IAT,提取出程序中调用的API名称列表,形成API名称字符串。

用这些API名称字符串调用地址处的(0函数,获取API的起始地址,然后把API地址输入EBX寄存器所指的原.exe的IAT区域。该过程会反复进行至API名称字符串结束,最终恢复原.exe的IAT。

跳转至OEP:

.exe全部解压缩完成后,应该将程序的控制返回到OEP处。

地址处的POPAD命令与UPX代码的第一条命令对应,用来把当前寄存器恢复原状最终,使用地址处的JMP命令跳转到OEP处,要跳转到的目标地址为,它就是原.exe的EP地址。

将解压缩后的代码DUMP下来:

OD提供了一个叫的插件:

这个插件可以自动将当前EIP作为OEP输入,直接选择脱壳即可,IAT表也会自动修复。

将脱壳后的程序放到里面查一下壳:

可以看到已经脱壳成功了。

相关实操案例:

CTF中手工脱壳实例(UPX壳)

壳分析

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了