THEMIDA带壳调试之《天涯QQ对对碰助手3.0》内存LOAD
THEMIDA带壳调试之《天涯QQ对对碰助手3.0》内存LOADPEID 查壳是 themida 1.0.0.5 -> Oreans Technologies,初步估计是themida 1.5版
载入后隐藏OD,在代码段下内存写入断点,SHIFT+F9运行
0061F70C F3:A4 REP MOVS BYTE PTR ES:,BYTE PTR DS:[> ;F7一次后F8一次
0061F70E C685 992F1B07 5>MOV BYTE PTR SS:,56
0061F715 68 396D1FD4 PUSH D41F6D39
0061F71A FFB5 99211B07 PUSH DWORD PTR SS:
0061F720 8D85 25882507 LEA EAX,DWORD PTR SS:
0061F726 FFD0 CALL EAX
0061F728 68 00800000 PUSH 8000
0061F72D 6A 00 PUSH 0
0061F72F 52 PUSH EDX
0061F730 FFD0 CALL EAX
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
SHIFT+F9继续运行,我们又看到熟悉代码了:(注意看中断位置的MFC42,原来是用MFC编译过的C程序)
006255F2 8908 MOV DWORD PTR DS:,ECX ; MFC42.#540 <<===这里
006255F4 AD LODS DWORD PTR DS:
006255F5 C746 FC 0000000>MOV DWORD PTR DS:,0
006255FC 89B5 09171B07 MOV DWORD PTR SS:,ESI
00625602 83F8 FF CMP EAX,-1
00625605 0F85 20000000 JNZ tyddp.0062562B
0062560B 813E DDDDDDDD CMP DWORD PTR DS:,DDDDDDDD
00625611 0F85 14000000 JNZ tyddp.0062562B
===============================================================================
到模块004010000处搜索ASCII码,找到关键信息,MFC程序我们可以用MFC消息入口查找器找关键点,另外
运行一个主程序,会弹出NAG注册框框,用查找器选择“继续试用,暂不注册按纽”,程序很快会把入口地址找
到004014F0这个地址,复制下来。回到OD中,删除刚才设置的内存断点,CTRL+G来到004014F0处下F2断点。
SHIFT+F9 运行,程序运行起来后点一下继续试用,暂不注册按纽”按纽,程序立即断在了004014F0处,在堆栈
中向下查找来自程序领空的调用,MFC的调用比较烦琐,会出现很多调用,耐心一点。我们返回到 00405361
00405327 /74 46 JE SHORT tyddp.0040536F <<=====注册提示NAG跳转========
00405329 |68 C0050000 PUSH 5C0
0040532E |E8 D73F0000 CALL tyddp.0040930A
00405333 |83C4 04 ADD ESP,4
00405336 |894424 18 MOV DWORD PTR SS:,EAX
0040533A |85C0 TEST EAX,EAX
0040533C |C64424 40 08 MOV BYTE PTR SS:,8
00405341 |74 0C JE SHORT tyddp.0040534F
00405343 |56 PUSH ESI
00405344 |8BC8 MOV ECX,EAX
00405346 |E8 B5BCFFFF CALL tyddp.00401000
0040534B |8BE8 MOV EBP,EAX
0040534D |EB 02 JMP SHORT tyddp.00405351
0040534F |33ED XOR EBP,EBP
00405351 |8B55 00 MOV EDX,DWORD PTR SS:
00405354 |8BCD MOV ECX,EBP
00405356 |C64424 40 06 MOV BYTE PTR SS:,6
0040535B |FF92 C0000000 CALL DWORD PTR DS: ;这个call就是MFC的对话框调用
00405361 |85ED TEST EBP,EBP <<=========================我们返回到这里
00405363 |74 0A JE SHORT tyddp.0040536F
00405365 |8B45 00 MOV EAX,DWORD PTR SS:
00405368 |6A 01 PUSH 1
0040536A |8BCD MOV ECX,EBP
0040536C |FF50 04 CALL DWORD PTR DS:
0040536F \68 3CE94000 PUSH tyddp.0040E93C
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
向上翻几段代码还发现了60次使用限制的跳转,看来这几段就是程序的关键处了。
00405156 E8 43410000 CALL tyddp.0040929E
0040515B 84DB TEST BL,BL
0040515D 74 14 JE SHORT tyddp.00405173 <<====60次限制跳转=====
0040515F A1 D4F24000 MOV EAX,DWORD PTR DS:
00405164 6A 40 PUSH 40
00405166 50 PUSH EAX
00405167 68 B8E94000 PUSH tyddp.0040E9B8 ; 未注册版只能试用60次!
0040516C 8BCE MOV ECX,ESI
0040516E E8 29430000 CALL tyddp.0040949C
00405173 3BFD CMP EDI,EBP
00405175 74 08 JE SHORT tyddp.0040517F
00405177 8B17 MOV EDX,DWORD PTR DS:
00405179 6A 01 PUSH 1
0040517B 8BCF MOV ECX,EDI
0040517D FF12 CALL DWORD PTR DS:
0040517F 8B46 20 MOV EAX,DWORD PTR DS:
00405182 55 PUSH EBP
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
好,那我们就在0040515D下硬件执行断点,CTRL+F2重新载入,SHIFT+F9 运行,程序被断下来了
0040515D /74 14 JE SHORT tyddp.00405173 <<=======断在这里,我们让他跳过去0040515F |A1 D4F24000 MOV EAX,DWORD PTR DS:
00405164 |6A 40 PUSH 40
00405166 |50 PUSH EAX
00405167 |68 B8E94000 PUSH tyddp.0040E9B8 ; 未注册版只能试用60次!
0040516C |8BCE MOV ECX,ESI
0040516E |E8 29430000 CALL tyddp.0040949C
00405173 \3BFD CMP EDI,EBP
00405175 74 08 JE SHORT tyddp.0040517F
00405177 8B17 MOV EDX,DWORD PTR DS:
00405179 6A 01 PUSH 1
0040517B 8BCF MOV ECX,EDI
0040517D FF12 CALL DWORD PTR DS:
F8单步走几下来到 00405324处:
00405324 F6C4 41 TEST AH,41
00405327 74 46 JE SHORT tyddp.0040536F <<========注册NAG跳转,我们跳过去
00405329 68 C0050000 PUSH 5C0
0040532E E8 D73F0000 CALL tyddp.0040930A
00405333 83C4 04 ADD ESP,4
00405336 894424 18 MOV DWORD PTR SS:,EAX
0040533A 85C0 TEST EAX,EAX
0040533C C64424 40 08 MOV BYTE PTR SS:,8
00405341 74 0C JE SHORT tyddp.0040534F
00405343 56 PUSH ESI
00405344 8BC8 MOV ECX,EAX
00405346 E8 B5BCFFFF CALL tyddp.00401000
0040534B 8BE8 MOV EBP,EAX
0040534D EB 02 JMP SHORT tyddp.00405351
0040534F 33ED XOR EBP,EBP
00405351 8B55 00 MOV EDX,DWORD PTR SS:
00405354 8BCD MOV ECX,EBP
00405356 C64424 40 06 MOV BYTE PTR SS:,6
0040535B FF92 C0000000 CALL DWORD PTR DS:
00405361 85ED TEST EBP,EBP
00405363 74 0A JE SHORT tyddp.0040536F
00405365 8B45 00 MOV EAX,DWORD PTR SS:
00405368 6A 01 PUSH 1
0040536A 8BCD MOV ECX,EBP
0040536C FF50 04 CALL DWORD PTR DS:
F8单步继续走来到 0040540F处:
0040540C 83F8 05 CMP EAX,5
0040540F 75 51 JNZ SHORT tyddp.00405462 <<=====这里就是关键跳转,我们NOP掉
00405411 6A 01 PUSH 1
00405413 68 E9030000 PUSH 3E9
00405418 8BCE MOV ECX,ESI
0040541A E8 793E0000 CALL tyddp.00409298
0040541F 8BC8 MOV ECX,EAX
00405421 E8 CC3E0000 CALL tyddp.004092F2
00405426 6A 00 PUSH 0
00405428 6A 00 PUSH 0
0040542A 68 00000010 PUSH 10000000
0040542F 68 FC030000 PUSH 3FC
00405434 8BCE MOV ECX,ESI
00405436 E8 5D3E0000 CALL tyddp.00409298
0040543B 8BC8 MOV ECX,EAX
0040543D E8 883F0000 CALL tyddp.004093CA
00405442 6A 00 PUSH 0
00405444 68 FC030000 PUSH 3FC
00405449 8BCE MOV ECX,ESI
0040544B E8 483E0000 CALL tyddp.00409298
00405450 8BC8 MOV ECX,EAX
00405452 E8 9B3E0000 CALL tyddp.004092F2
00405457 6A 00 PUSH 0
00405459 68 00000010 PUSH 10000000
0040545E 6A 00 PUSH 0
00405460 EB 09 JMP SHORT tyddp.0040546B
00405462 6A 00 PUSH 0
00405464 6A 00 PUSH 0
===============================================================================
F9运行后程序已经显示已注册了,看来我们已解除了程序未注册前的NAG注册框和60次使用限制,让
我们来做个内存LOAD吧,打开FLY大侠修改的Keymake 2.0 免杀版, 选择制作内存补丁,选择好目标
程序,添加3处修改代码:
1:修改地址:0040515D 修改长度:2 原始指令:7414 修改指令:EB14
2:修改地址:00405327 修改长度:2 原始指令:7446 修改指令:EB46
3:修改地址:0040540F 修改长度:2 原始指令:7551 修改指令:9090
保存一下,试运行,好的程序已运行起来了,显示“已注册”,收工。
http://hiphotos.baidu.com/5icy/abpic/item/0ca1a45203ea060d0df3e346.jpg
PS:后话:此文的目的是让更多的人了解Themida和利用手中的工具进行简单破解分析它。
[ 本帖最后由 a__p 于 2007-3-24 17:59 编辑 ] 牛啊 学习了 http://www.skycn.com/soft/26982.html 挂下的地址 建议加精......很不错... 支持并学习! 原帖由 rayicy 于 2007-3-24 18:27 发表 https://www.chinapyg.com/images/common/back.gif
http://www.skycn.com/soft/26982.html 挂下的地址
下来是个UPX的壳~! 厉害了,带壳调试 汗,按3楼给的地址下载的真是UPX壳/:badly 大哥超强啊!!佩服. 好强大.看不懂/:011