【文章标题】: 爆破超级函数表达式运算器v12
【下载地址】: 自己搜索下载
——————————————————————————–
【详细过程】
第一步:查壳,并脱之:
00438E00 超> /EB 06 jmp short 超级函数.00438E08 //OD载入后,停留在此
00438E02 |68 C4160000 push 16C4
00438E07 |C3 retn
00438E08 \9C pushfd
00438E09 60 pushad
00438E0A E8 02000000 call 超级函数.00438E11
单步运行到此,查看寄存器有ESP值:=0012FFA0
下断:hr 0012FFA0,F9运行
0043A54F 9D popfd //程序中断在此处了,
0043A550 50 push eax
0043A551 68 C4164000 push 超级函数.004016C4 ; ASCII "h(^A"
//这就是程序的OEP了,hehe……
0043A556 C2 0400 retn 4
单步运行,程序返回到:
004016C4 68 285E4100 push 超级函数.00415E28
//脱壳了,…………
004016C9 E8 EEFFFFFF call 超级函数.004016BC ; jmp to MSVBVM50.ThunRTMain
004016CE 0000 add byte ptr ds:[eax],al
004016D0 0000 add byte ptr ds:[eax],al
004016D2 0000 add byte ptr ds:[eax],al
第二步:爆破之:
试运行脱壳后的程序,首先弹出上个对话框,由于程序是VB写的,而我搜索了一下参考字符,结果没有想下了的,只好直接下断:bp rtcMsgBox,程序中断在:
0F0D405A M> 55 push ebp
0F0D405B 8B4424 14 mov eax,dword ptr ss:[esp+14]
0F0D405F 8BEC mov ebp,esp
0F0D4061 83EC 48 sub esp,48
查看堆栈:
0012F8B0 00431A08 返回到 12.00431A08 来自 MSVBVM50.rtcMsgBox
0012F8B4 0012FA30
在0012F8B0 00431A08 返回到 12.00431A08 来自 MSVBVM50.rtcMsgBox行上,点右键–>反汇编窗口跟随,来到:
004319FB 8D95 74FFFFFF lea edx,dword ptr ss:[ebp-8C]
00431A01 52 push edx
00431A02 FF15 1C724300 call dword ptr ds:[<&MSVBVM50.rtcMsgBox>] ; MSVBVM50.rtcMsgBox
00431A08 8D45 8C lea eax,dword ptr ss:[ebp-74]
我们向上找关键跳,跳的地址一定要大干00431A02,不然就不能跳过提示窗口了:
向上的第一个跳:0043190E /0F85 900A0000 jnz 12.004323A4
我们过去看看,呵呵是异常信息,忽略,继续:
找到了:
00430EB6 85D8 test eax,ebx
00430EB8 0F85 28100000 jnz 12.00431EE6
下断,重新载入运行,程序断在了我们下断的位置了
我们试着改jnz 12.00431EE6为:jmp 12.00431EE6
单步到:
00431EE6 8D95 74FFFFFF lea edx,dword ptr ss:[ebp-8C] //在这下个断,或者记录一下
00431EEC 52 push edx
00431EED 8B1D F8724300 mov ebx,dword ptr ds:[<&MSVBVM50.rtcGetDateVar>] ; MSVBVM50.rtcGetDateVar
00431EF3 FFD3 call ebx
F9运行一下!
哦,原来的弹出窗口没有了,不过又出现了一个新窗口,我们继续吧!
再次重新载入运行到:
00431EE6 8D95 74FFFFFF lea edx,dword ptr ss:[ebp-8C]
这次我们是往下查看了,并记下跳转的命令,直到出现对rctMsgBox的调用了,呵呵!
00432112 85F6 test esi,esi
00432114 0F85 AF010000 jnz 12.004322C9 //关键跳
0043229B 52 push edx
0043229C FF15 1C724300 call dword ptr ds:[<&MSVBVM50.rtcMsgBox>] ; MSVBVM50.rtcMsgBox
哈哈,就一个关键跳,而且跳出地址也出了对对话框的调用,
同样,我们试着改jnz 12.004322C9为:jmp 12.004322C9
按F9运行,哈哈,程序成功运行,没有出现弹出窗口!!!!
胜利第一步走完了,接下来随便测试一下功能有没有限制!
随便点了一下,在运算结果栏出现了:“功能受限,请注册后再使用”
我打开WinHex,打开程序主存,搜索“功能受限”,找到地址:
然后在OD命令窗口中下断:
hr 00152FF8
在程序窗口随便测试了一下,然后中断了下来:
7C94B408 8B448E F0 mov eax,dword ptr ds:[esi+ecx*4-10]
7C94B40C 89448F F0 mov dword ptr ds:[edi+ecx*4-10],eax
7C94B410 8B448E F4 mov eax,dword ptr ds:[esi+ecx*4-C]
删除硬件断点后,按Alt+F9,返回程序领空:
0042FCFC 85C0 test eax,eax
0042FCFE 7D 12 jge short 12.0042FD12
向上,找到入口:
0042FAB0 55 push ebp
//在此下断,F9运行程序,然后继续测试,程序中断在此了,hehe
0042FAB1 8BEC mov ebp,esp
0042FAB3 83EC 14 sub esp,14
0042FAB6 68 76144000 push <jmp.&MSVBVM50.__vbaExceptHandler>
0042FABB 64:A1 00000000 mov eax,dword ptr fs:[0]
0042FAC1 50 push eax
F8单步运行,同时注意对__vbaStrCmp及__vbaStrMove的调用:
单步到此,看到了对__vbaStrCmp的调用,并且有一个关键词:”yes”出现:
0042FB68 51 push ecx
0042FB69 68 B49C4100 push 12.00419CB4 ; UNICODE "yes"
0042FB6E 8B1D 54724300 mov ebx,dword ptr ds:[<&MSVBVM50.__vbaStrCmp>] ; MSVBVM50.__vbaStrCmp
0042FB74 FFD3 call ebx
随后,就在下面出现了关键跳:
0042FB97 8B8D 38FFFFFF mov ecx,dword ptr ss:[ebp-C8]
0042FB9D 85C8 test eax,ecx
0042FB9F 0F85 7B010000 jnz 12.0042FD20
跳转没有实现,那么实现后又是怎样呢?试着改为jmp 12.0042FD20
F9运行,连续几个F9之后,出现了正确的结果了,哈!
保存修改,结果出现乱码,只好退出程序重新载入,然后一个个修改,OK!正常了,哈
但不知道为什么,一次性修改会出现乱码,还望那位老大予以指点,谢谢!
——————————————————————————–
【版权声明】: 旧文, 一些截图都已经找不到了,呵呵!现转载到BLOG,以备收藏!
2007年10月08日 1:01:48