最新才喜欢上脱壳,于是跟着天草兄学着脱壳。
慢慢的,对于一些壳有了自己的思路,下面就说下自己脱yoda's cryptor 1.2
也许这个壳对于现在来说很老了,但是对于我这种新手来说能用自己的方法脱掉一个老壳也算对自己尝到的脱壳技术一次肯定吧。好了,废话不多说。
先来自己改进的最后一次异常法。
保留所有异常
OD载入
SHIFT+F9两次程序就跑飞了。
重载,按下SHIFT+F9
看堆栈“SE 句柄”前面的地址为程序领空地址40d70c
CTRL+G转到该地址,F2下断
SHIFT+F9运行
F2取消断点
F8走
0040D727 8BB8 A4000000 mov edi,dword ptr ds:[eax+A4]
0040D72D C1C7 07 rol edi,7
0040D730 89B8 B8000000 mov dword ptr ds:[eax+B8],edi ; Yoda's_C.004010CC
0040D736 B8 00000000 mov eax,0
0040D73B 5F pop edi
0040D73C C9 leave
0040D73D C3 retn
走到这里可以看到edi里面是4010CC
CTRL+G来到4010CC
F2下断,SHIFT+F9,F2取消,呵呵,来到OEP,脱壳我就是不讲了。。。
下面再提供一个自己改进的ESP方法
F8走一步,在数据窗口跟踪ESP,在数据窗口ESP值处下WORD硬件断点,SHIFT+F9运行,
取消硬件断点
F8继续走
0040D75D 50 push eax
0040D75E 33C0 xor eax,eax
0040D760 64:FF30 push dword ptr fs:[eax]
0040D763 64:8920 mov dword ptr fs:[eax],esp
0040D766 EB 01 jmp short Yoda's_C.0040D769
0040D768 8700 xchg dword ptr ds:[eax],eax
0040D76A 0000 add byte ptr ds:[eax],al
0040D76C 0000 add byte ptr ds:[eax],al
0040D76E 0000 add byte ptr ds:[eax],al
0040D770 0000 add byte ptr ds:[eax],al
0040D772 0000 add byte ptr ds:[eax],al
0040D774 0000 add byte ptr ds:[eax],al
0040D776 0000 add byte ptr ds:[eax],al
0040D778 0000 add byte ptr ds:[eax],al
0040D77A 0000 add byte ptr ds:[eax],al
0040D77C 0000 add byte ptr ds:[eax],al
0040D77E 0000 add byte ptr ds:[eax],al
0040D780 0000 add byte ptr ds:[eax],al
0040D782 0000 add byte ptr ds:[eax],al
0040D784 0000 add byte ptr ds:[eax],al
0040D786 0000 add byte ptr ds:[eax],al
此时,注意到后面全是空数据,要引用异常的
看堆栈
0012FF84 0012FFC4 指针到下一个 SEH 记录
0012FF88 0040D70C SE 句柄
0012FF8C 76D83C45 返回到 kernel32.76D83C45
呵呵 SE句柄前面的地址又是程序领空,剩下的就跟上面一样了,呵呵 !~~~
新手学破解,不知道发的东西有用没,希望大家谅解下。
[注意]APP应用上架合规检测服务,协助应用顺利上架!