先确定微狗有没有加狗壳,如果没有则可以直接反汇编,用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 到此为止,软件已经可以进入了,运行正常! |