国内某公司专业软件--Gs-mh狗
日期:2003年9月16日 作者:nahum 人气: 314
目标国内某公司专业软件,免得引起麻烦,不透露了: 使用工具:ollydbg,hiew,IDA,peid,KillFlower 狗:Gs-mh狗
该软件无狗可以安装,但运行没有任何提示,所以带狗破解。因该沟有狗壳花指令大大的厉害,用H-W32Dasm反汇编失败,OLLYDBG也不能调试,trw跟踪不下来,先从看雪论坛下载KILLFLOWER,去除花指令。后用OLLYDBG调试,IDA反汇编。本人是菜鸟,分析能力较差,但是还算勤奋,经过将近两周的时间,每天工作12小时以上,反复调试,寻找分析读狗部分。终于找到如下代码部分:
.gtide:0088270B loc_88270B: ; CODE XREF: .gtide:00881E28j
.gtide:0088270B nop
.gtide:0088270C nop
.gtide:0088270D nop
.gtide:0088270E nop
.gtide:0088270F nop
.gtide:00882710 nop
.gtide:00882711 cmp ds:dword_93F074, 0 ===>判断是否有加密狗,有狗无狗都为0不 知为何?
.gtide:00882718 jnz short loc_882731 ===》不跳就正常了
.gtide:0088271A call sub_882BAF ====》第一次读狗,如果这里正确读狗那么就不会 第2次读了,我们现在要让他第二次读狗,免得
留下暗桩。该字段全部改为NOP
.gtide:0088271F test eax, eax ====判断是否有狗,eax=0则有狗改为xor eax,eax
.gtide:00882721 jnz short loc_88272C ==》跳就完蛋了。
.gtide:00882723 call sub_882D5E====》2次读狗,很关键。跟进
.gtide:00882728 test eax, eax ====》判断作用不大!基本上有狗无狗区别不大!
.gtide:0088272A jz short loc_882731===》总是要跳。意义不大。
.gtide:0088272C
.gtide:0088272C loc_88272C: ; CODE XREF: .gtide:00882721j
.gtide:0088272C jmp loc_882A5B
跟进到这里,在程序里转了若干圈后到这里,它调用狗的程序很隐蔽,需要耐心。
00882F12 call sub_88AE50 =====》关键CALL ,跟进!内容见后一段
00882F17 8945 C0 MOV DWORD PTR SS:[EBP-40],EAX ===》有狗为零无狗非零
00882F1A 8B45 C4 MOV EAX,DWORD PTR SS:[EBP-3C] ====》读狗返回值 51CA2330
00882F1D A3 B8FF9300 MOV DWORD PTR DS:[93FFB8],EAX
00882F22 837D C0 00 CMP DWORD PTR SS:[EBP-40],0
00882F26 74 13 JE SHORT 去花1.00882F3B], ; jump
00882F28 C705 18F09300 4C>MOV DWORD PTR DS:[93F018],这段基本没用
00882F32 C745 C0 00000000 MOV DWORD PTR SS:[EBP-40],0
00882F39 EB 3C JMP SHORT 去花1.00882F77,0
00882F3B 833D 7CF09300 00 CMP DWORD PTR DS:[93F07C],0
00882F42 74 29 JE SHORT 去花1.00882F6D],
00882F44 A1 1CF09300 MOV EAX,DWORD PTR DS:[93F01C] ; jump
00882F49 3305 2EF09300 XOR EAX,DWORD PTR DS:[93F02E]
00882F4F 8945 D0 MOV DWORD PTR SS:[EBP-30],EAX
00882F52 8B45 D0 MOV EAX,DWORD PTR SS:[EBP-30]
00882F55 3305 B8FF9300 XOR EAX,DWORD PTR DS:[93FFB8]
00882F5B A3 BEF29300 MOV DWORD PTR DS:[93F2BE],EAX
00882F60 A1 32F09300 MOV EAX,DWORD PTR DS:[93F032]
00882F65 3105 BEF29300 XOR DWORD PTR DS:[93F2BE],EAX
00882F6B EB 0A JMP SHORT 去花1.00882F77,E
00882F6D A1 B8FF9300 MOV EAX,DWORD PTR DS:[93FFB8]
00882F72 A3 BEF29300 MOV DWORD PTR DS:[93F2BE],EAX
00882F77 8B45 C0 MOV EAX,DWORD PTR SS:[EBP-40]
00882F7A EB 00 JMP SHORT 去花1.00882F7C-4
00882F7C 5F POP EDI
00882F7D 5E POP ESI
00882F7E 5B POP EBX
00882F7F C9 LEAVE
00882F80 C3
关键CALL在这里!看不出什么问题来。不用理会他。
0088AE50 55 PUSH EBP
0088AE51 8BEC MOV EBP,ESP
0088AE53 51 PUSH ECX
0088AE54 53 PUSH EBX
0088AE55 56 PUSH ESI
0088AE56 57 PUSH EDI
0088AE57 52 PUSH EDX
0088AE58 51 PUSH ECX
0088AE59 68 67AD8800 PUSH 去花1.0088AD67
0088AE5E 68 ACA88800 PUSH 去花1.0088A8AC
0088AE63 6A 14 PUSH 14
0088AE65 E8 E094FFFF CALL 去花1.0088434A ===》读狗
0088AE6A 83C4 0C ADD ESP,0C
0088AE6D mov DWORD PTR SS:[EBP-4],EAX
0088AE70 59 POP ECX
0088AE71 5A POP EDX
0088AE72 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0088AE75 5F POP EDI
0088AE76 5E POP ESI
0088AE77 5B POP EBX
0088AE78 C9 LEAVE
0088AE79 C3 RET
去狗用OLLYDBG调试通过后,现在到了修改程序的问题了。我是这么改的:
00882F17 8945 C0 MOV DWORD PTR SS:[EBP-40],EAX
00882F1A B8 3D23CA51 MOV EAX,51CA2330
00882F1F A3 B8FF9300 MOV DWORD PTR DS:[93FFB8],EAX
00882F24 E9 12000000 JMP 去花1.00882F3B3F
00882F29 90 NOP
00882F2A 90 NOP
00882F2B 90 NOP
00882F2C 90 NOP
00882F2D 90 NOP
00882F2E 90 NOP
00882F2F 90 NOP
00882F30 90 NOP
00882F31 90 NOP
00882F32 C745 C0 00000000 MOV DWORD PTR SS:[EBP-40],0
00882F39 EB 3C JMP SHORT 去花1.00882F77
好象很笨,应该有更简单的改法,请指教!
另一处就是给EAX赋值的地方更改如下:
0088AE6D mov DWORD PTR SS:[EBP-4],EAX
改为 and DWORD PTR SS:[EBP-4],EAX
这是我破解的第三个加密狗,比较简单的,写点东西是想和大家交流一下。最近还有一条狗需要破解。等破解后再贴出来,大家共同交流。
顺便写点感受,破解的关键是要有信心、细心、耐心。