举例论证破解微狗的一种方法
先确定微狗有没有加狗壳,如果没有则可以直接反汇编,用Win32Dasm把汇编,完成后点“查看字符串”找到:
\\.\HOST95.VXD
\\.\HOSTNT
\\.\LPTDog0
\\.RCUSBNT0
从这里可以看出狗开始调用了,也就是读狗的过程。
点其中一个,在软件里找找,下面读狗部分,肯定你会问是怎么找到的,怎么定位的?
其实也没有一个具体的值,一般都是出现很多的花指令,开头都是
55 PUSH EBP
8BEC MOV EBP,ESP
后面就是一大堆的花指令!
由此就可以断定这个地方就是读狗的地方了!
进入破解实战:
读加密狗:
0048BE20 $ 55 PUSH EBP
0048BE21 . 8BEC MOV EBP,ESP
33C0 xor eax,eax
C3 ret
只要使EAX的返回值是0就是有狗了。 这样就成功解决无狗了!
下面开始就是很多的花指令了
0048BE23 . 81C4 4CFFFFFF ADD ESP,-0B4
0048BE29 . 53 PUSH EBX
0048BE2A . 56 PUSH ESI
0048BE2B . 57 PUSH EDI
0048BE2C . C745 C0 A5A50>MOV DWORD PTR [EBP-40],0A5A5
0048BE33 . 66:C785 64FFF>MOV WORD PTR [EBP-9C],0A
0048BE3C . E9 5D040000 JMP 0048C29E
0048BE41 > EB 01 JMP SHORT 0048BE44 ; Case 2 of switch 0048C40E
0048BE43 00 DB 00
0048BE44 > 33C0 XOR EAX,EAX
0048BE46 . 8945 F4 MOV [EBP-C],EAX
0048BE49 . 8DB5 6CFFFFFF LEA ESI,[EBP-94]
0048BE4F . 8B45 E0 MOV EAX,[EBP-20]
0048BE52 . 8BD0 MOV EDX,EAX
0048BE54 . 8955 B8 MOV [EBP-48],EDX
0048BE57 > 8B4D B8 MOV ECX,[EBP-48]
0048BE5A . C601 00 MOV BYTE PTR [ECX],0
0048BE5D . 70 03 JO SHORT 0048BE62
0048BE5F . 71 01 JNO SHORT 0048BE62
0048BE61 01 DB 01
0048BE62 . 8B55 B8 MOV EDX,[EBP-48]
0048BE65 . 33C9 XOR ECX,ECX
0048BE67 . 8BFA MOV EDI,EDX
0048BE69 . 8BC6 MOV EAX,ESI
0048BE6B > 8A17 MOV DL,[EDI]
0048BE6D . 8A18 MOV BL,[EAX]
0048BE6F . 80E3 01 AND BL,1
0048BE72 . 03D2 ADD EDX,EDX
0048BE74 . 0AD3 OR DL,BL
0048BE76 . 8817 MOV [EDI],DL
0048BE78 . 72 03 JB SHORT 0048BE7D
0048BE7A . 73 01 JNB SHORT 0048BE7D
0048BE7C 02 DB 02
0048BE7D . 0FB710 MOVZX EDX,WORD PTR [EAX]
0048BE80 . C1FA 02 SAR EDX,2
0048BE83 . 66:8910 MOV [EAX],DX
0048BE86 . 75 03 JNZ SHORT 0048BE8B
0048BE88 . 74 01 JE SHORT 0048BE8B
0048BE8A 03 DB 03
0048BE8B . 41 INC ECX
0048BE8C . 83F9 08 CMP ECX,8
0048BE8F .^ 72 DA JB SHORT 0048BE6B
狗出错提示的处理:
00401BB8 /$ 55 PUSH EBP
00401BB9 |. 8BEC MOV EBP,ESP
00401BBB |. 83C4 F4 ADD ESP,-0C
00401BBE |. 33C0 XOR EAX,EAX ; EAX=0
00401BC0 |. A3 449F6C00 MOV [6C9F44],EAX ; 记住此处为0!!
00401BC5 |. 6A 02 PUSH 2 ; /Arg1 = 00000002
00401BC7 |. E8 18C62200 CALL 0062E1E4 ; \2_zydocm.0062E1E4
00401BCC |. 59 POP ECX
00401BCD |. 8945 FC MOV [LOCAL.1],EAX
00401BD0 |. C605 389F6C00>MOV BYTE PTR [6C9F38],0
00401BD7 |. 66:C705 289F6>MOV WORD PTR [6C9F28],1
00401BE0 |. C705 2C9F6C00>MOV DWORD PTR [6C9F2C],3B8C39
00401BEA |. 8B55 FC MOV EDX,[LOCAL.1]
00401BED |. 8915 3C9F6C00 MOV [6C9F3C],EDX ; 2_zydocm.006CCB00
00401BF3 |. 66:C705 2A9F6>MOV WORD PTR [6C9F2A],27
00401BFC |. E8 43BA0800 CALL 0048D644 ; 读狗,有狗返回0
00401C01 |. 8945 F4 MOV [LOCAL.3],EAX
00401C04 |. 8B4D FC MOV ECX,[LOCAL.1]
00401C07 B8 4F000000 MOV EAX,4F ; [ECX]=4F就解决了无狗提示
00401C0C 90 NOP
00401C0D 90 NOP
00401C0E 90 NOP
00401C0F FF05 449F6C00 INC DWORD PTR [6C9F44] ; 这里加1
00401C15 |> 66:C705 2A9F6>MOV WORD PTR [6C9F2A],26
00401C1E |. E8 21BA0800 CALL 0048D644 ; 读狗,有狗返回0
00401C23 |. 8945 F4 MOV [LOCAL.3],EAX
00401C26 |. 8B55 FC MOV EDX,[LOCAL.1]
00401C29 |. 0FBE0A MOVSX ECX,BYTE PTR [EDX]
00401C2C |. 83F9 4F CMP ECX,4F ; ECX不等4F即可! 这里为0
00401C2F |. 75 07 JNZ SHORT 00401C38 ; 此JNZ要跳!
00401C31 |. 8305 449F6C00>ADD DWORD PTR [6C9F44],2 ; 上JNZ不跳的话[6C9F44]就会加2了,必死!
00401C38 |> FF75 FC PUSH [LOCAL.1] ; /Arg1 = 010B302C
00401C3B |. E8 DCC32200 CALL 0062E01C ; \2_zydocm.0062E01C
00401C40 |. 59 POP ECX
00401C41 |. 8B45 08 MOV EAX,[ARG.1]
00401C44 |. 8B15 449F6C00 MOV EDX,[6C9F44] ; 此处使EDX为1,否则会出错!
00401C4A |. 8910 MOV [EAX],EDX ; [EAX]=1,PASS!!!
00401C4C |. 833D 449F6C00>CMP DWORD PTR [6C9F44],0 ; 现在知道[6C9F44]为什么要等于1了吧!
00401C53 |. 74 06 JE SHORT 00401C5B ; 上面[6C9F44]等于1就可以了,此处不跳就好了。
00401C55 |. 837D F4 00 CMP [LOCAL.3],0
00401C59 |. 74 04 JE SHORT 00401C5F ; 一定要跳,否则EAX置0就完了。
00401C5B |> 33C0 XOR EAX,EAX
00401C5D |. EB 05 JMP SHORT 00401C64
00401C5F |> B8 01000000 MOV EAX,1 ; EAX=1就成功了!
00401C64 |> 8BE5 MOV ESP,EBP
00401C66 |. 5D POP EBP
00401C67 \. C3 RETN
到此为止,软件已经可以进入了,运行正常!
本文章只供学习交流用,请不要把此文章用于其他用途,否则一切后果自负!