目标软件:飞雪桌面日历V1.1
软件下载地址:http://www.shareware.cn/
***************************
发信人:龙城三少爷[BCG]
发文目的:把自己的破解过程写出来,希望得到各位前辈的指点
***************************
接触破解那么久,终于和各位前辈所预言的一样,碰到各种各样的壳了,好不容易弄到了二哥的脱壳教程(豪华版那个),就兴冲冲的看完了脱壳入门十八篇,颇有收获,这不,又到中国下载软件中心找猎物来了.
Peid显示:UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo,很多人都说刚开始学脱壳都是从这个开始的,我也不例外..脱壳过程就不多说了.发现脱壳后的程序一运行就退出了.先按照上次skyege兄弟教的下rtcFilen函数跟踪,可是在某一处,循环了好多次...........
于是OD重新载入程序
命令行下 bp __vbaEnd函数,F9运行
660CBDA8 M> 68 689C0000 push 9C68 //停在这里了.
660CBDAD E8 01200000 call MSVBVM60.660CDDB3
660CBDB2 M> 6A 61 push 61
660CBDB4 E8 FA1F0000 call MSVBVM60.660CDDB3
660CBDB9 8B4424 04 mov eax,dword ptr ss:[esp+4]
660CBDBD 85C0 test eax,eax
660CBDBF 7C 05 jl short MSVBVM60.660CBDC6
660CBDC1 33C0 xor eax,eax
到这里我就迷茫好久了,不知道重复按了多少次F8,依次提示什么浮点数异常呀,程序退出代码0呀的.一看到这个异常,我头脑浮现的都是这几天看<加密与解密>中所说的SEH(还不是很明白,被那些结构弄懵了!),满脑子都是prev和handle了.抱着试试看的心理,重复上面的步骤.看右边堆栈显示:
0012F850 004595ED 返回到 UnPackFX.004595ED 来自 MSVBVM60.__vbaEnd
于是ctrl+g输入004595ED
004595A7 50 push eax
004595A8 FF15 90124000 call dword ptr ds:[<&MSVBVM60.rtcFileLen>; MSVBVM60.rtcFileLen //难道也是通过检查文件长度吗?
004595AE 33C9 xor ecx,ecx
004595B0 3D 00020400 cmp eax,40200
004595B5 0F95C1 setne cl
004595B8 F7D9 neg ecx
004595BA 8BF1 mov esi,ecx
004595BC 8D55 D4 lea edx,dword ptr ss:[ebp-2C]
004595BF 52 push edx
004595C0 8D45 D8 lea eax,dword ptr ss:[ebp-28]
004595C3 50 push eax
004595C4 8D4D DC lea ecx,dword ptr ss:[ebp-24]
004595C7 51 push ecx
004595C8 8D55 E0 lea edx,dword ptr ss:[ebp-20]
004595CB 52 push edx
004595CC 6A 04 push 4
004595CE FF15 78124000 call dword ptr ds:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStrList
004595D4 83C4 14 add esp,14
004595D7 8D4D D0 lea ecx,dword ptr ss:[ebp-30]
004595DA FF15 54134000 call dword ptr ds:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj
004595E0 66:3BF3 cmp si,bx
004595E3 74 08 je short UnPackFX.004595ED //这里程序结束
004595E5 EB 00 jmp short UnPackFX.004595E7 //这里程序也结束
004595E7 FF15 44104000 call dword ptr ds:[<&MSVBVM60.__vbaEnd>] ; MSVBVM60.__vbaEnd
004595ED FF15 DC104000 call dword ptr ds:[<&MSVBVM60.__vbaExitP>; MSVBVM60.__vbaExitProc //来到这里,向上看
于是我把je short UnPackFX.004595ED ----------->nop
机器码由74,08------------------------->9090
把jmp short UnPackFX.004595E7-------------->jmp short UnPackFX.004595F3(让他跳到下一句继续执行程序)
机器码由EB00----------------------------->EB0C
用UltraEdit改了上面相应的机器码后保存,发现程序可以正常运行了
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课