脱壳_加密壳_002.exe

本文详细解析了使用OD(OllyDbg)调试器分析IAT(Import Address Table)加密的过程,通过观察调用指令、内存段、及XOR操作,定位加密位置,并尝试nop操作来解除加密,最终实现对IAT的正确填充,完成软件的dump。

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

打开OD之后是这样的:

为什么说第一个call是初始化函数地址呢?原因是进去之后是这样的:

jmp之后:

先解释一下第一个注释:怎么查看位于第几个区段?点击M

第二个注释,进入call里面看一看:(IAT加密的特征:以四个0结尾)

那么现在就去找加密的地方,在messagebox之后只有一个call,随后就jmp了,因此怀疑这个call里面进行了加密,进去:

找到IAT表的位置(FF 15):

发现真的有个XOR,由此猜测这里是真正加密的地方,接下来的函数是申请堆空间,所以猜测这里是一个解密的地方,然后这里是一个被包含在循环获取函数名并得到导入表的函数。

看眼call之前的eax:

call之后就变了:

由此怀疑:

GetProcAddress实在还原IAT的地址(偏移+基址),一开始只有偏移,在call里面加上了基址,仔细跟一下不难发现,有一个ADD EAX,EDX的操作,怀疑就是这里实现了地址的还原:

EDX显然是基址:

ADD完毕获取到正确的地址:

现在要做的就是把加密的地方给nop掉,这里注意,这个函数它四个参数入栈,在call完毕之后会自动pop出来,所以如果要nop掉参数的话就要把函数call的VirtualAlloc一起给nop掉,具体情况看下面:

填充IAT的标志:

第一个解法:除了一个给edx传值的操作不能nop,剩下的全nop掉,理由:edx是基址,上面有更改过edx的值:

 

现在先打个补丁,看看能不能dump成功

IAT表已经出来了:

 

就可以dump了!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值