3.20学习——UPX壳

什么是UPX壳

UPX壳是一种压缩壳,用来压缩运行程序大小,同时壳的存在也是防止反汇编软件找到入口点,所以脱壳就显得很重要。
例如:这里有一个带upx壳的exe在这里插入图片描述如果直接用反汇编工具在这里插入图片描述就会发现函数很少,而且伪C代码也没信息,这就是壳的作用,通过修改程序的入口点来实现阻止反汇编工具的使用

UPX脱壳

常规upx壳

还是以上面的那个题做例子
在这里插入图片描述用PE查壳工具看了之后提示了尝试使用upx -d指令直接脱壳,并且右边也写了是UPX段的内容,这里也可以用010看一下在这里插入图片描述发现了有三段UPX标识段,这时用upx -d直接脱壳就行了

魔改类型1:修改UPX标识段

通过上面也看得出来,UPX壳的识别段正常情况都是像上面这样的,但是也会遇到魔改的,例如:
在这里插入图片描述这里通过PE可以看到,原本是UPX1的表示段变成了APK1,此时虽然会怀疑是不是加壳方式判断错误,但是注意看最下面的提示:不要尝试直接UPX -d脱壳。说明还是UPX壳,但是UPX标识位被修改了,用010看一下在这里插入图片描述发现确实是APK,尝试将APK修改成UPX试试在这里插入图片描述下面的提示就变成了让我们用UPX -d脱壳
再看一个例子:
在这里插入图片描述这里可以看到标识段的UPX是小写的,提示不要直接UPX-d脱壳,所以在010中将小写upx改为大写即可。

总结一下:这种修改标识段的UPX脱壳一般具有两个特征:
1.提示处:不要直接用UPX-d脱壳
2.标识处:不是UPX1

方法:修改UPX标识处,改回UPX

魔改类型2:在elf文件中修改偏移值

对于elf文件的UPX加壳,与pe文件不一样,举个例子:在这里插入图片描述这里可以看到是upx加壳的elf文件在这里插入图片描述可以在文件开始的位置发现UPX!,与pe文件不同的是这里UPX没有分为4段排列在一起。用PE查看这道题目的提示:尝试upx -d脱壳,但是依旧不能直接脱壳,根据查询,如果elf文件最后的overlay_offset值(偏移值)被修改了也是不能直接脱壳的。正常的偏移值应为F4 00 00 00在这里插入图片描述这里被修改位4F了,将其修改过来就可以脱壳了

魔改类型3:手动脱壳

因为UPX壳的变种很多,上面所提到的是最常见的几种,面对一些题目将UPX标识位改为0的就很难办了,这个时候就要学会手动脱壳,虽然这样脱壳出来的伪代码不好看,但起码能有伪代码看。
要学习手动脱壳,就要先学习UPX加壳原理ESP定律脱壳
这里先学习利用ESP定律脱壳
举例:在这里插入图片描述这里可以看到首先是一个UPX壳,UPX区段被改为0x00了,这种情况下手动脱壳是最好的选择,用x64打开,F9运行在这里插入图片描述到达入库断点处,发现调用四个压栈,同时rsp是红色的,F8步过,一直到push下面右键RSP,在转储中跟随在这里插入图片描述右键设置断点——硬件——存取——四字在这里插入图片描述接下来F9,发现大跳转在这里插入图片描述出现了EO入口地址,同时压栈变成出栈,说明即将恢复入口地址,接下来只需要跳转到EO处即可,但是这里有个死循环,F4跳转到光标处跳出循环
在这里插入图片描述接下来调用Scylla插件进行恢复,点击IAT自动搜索在这里插入图片描述再点击获取导入在这里插入图片描述接着点击修复转储就可以了,接下来用IDA打开看一下在这里插入图片描述发现脱壳成功了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值