本人声明,我也是初学者,所以就当练练手。
0049C001 d> 60 pushad //寄存器压栈,用堆栈平衡定律(就是进栈的个数等于出栈的个数)
0049C002 E8 03000000 call dnfxx10_.0049C00A
0049C007 - E9 EB045D45 jmp 45A6C4F7
0049C00C 55 push ebp
0049C00D C3 retn
0049C00E E8 01000000 call dnfxx10_.0049C014
0049C013 EB 5D jmp short dnfxx10_.0049C072
0049C015 BB EDFFFFFF mov ebx,-13
0049C01A 03DD add ebx,ebp
……
第一条过后,看到esp值为:0012ffa4,对这个值下硬件断点,方法:在命令框输入dd 0012ffa4
然后右键该地址,选择断点——硬件访问——dword。
然后F9运行,看到:
0049C3B0 /75 08 jnz short dnfxx10_.0049C3BA
0049C3B2 |B8 01000000 mov eax,1
0049C3B7 |C2 0C00 retn 0C
0049C3BA \68 26214100 push dnfxx10_.00412126
0049C3BF C3 retn //大跳转,之后就是oep了
来到:
00412126 6A 60 push 60 //oep,在此脱壳
00412128 68 D8564300 push dnfxx10_.004356D8
0041212D E8 E62C0000 call dnfxx10_.00414E18
00412132 BF 94000000 mov edi,94
00412137 8BC7 mov eax,edi
00412139 E8 D20C0000 call dnfxx10_.00412E10
脱壳后,需要注册表修复。
但我没想到的是程序本身有自检,修复完后,打开会报错,这就要靠高手了。但壳的确脱了
最后给出脱壳后的程序。