手里有正版的microdog想来学习一下,遇到了棘手的问题,求教大牛帮忙
00420A3D |. E8 BE610300 call AAAA.00456C00 ;有32个地方调用
00420A42 |. 83C4 04 add esp,4
00420A45 |. 85C0 test eax,eax ; 有狗eax=1
00420A47 |. 75 20 jnz short AAAA.00420A69 ; 必须跳
这是调用狗的主函数
00456C00 /$ 6A FF push -1
00456C02 |. 68 79DB4500 push AAAA.0045DB79
00456C07 |. 64:A1 00000000 mov eax,dword ptr fs:[0]
00456C0D |. 50 push eax
00456C0E |. 51 push ecx
00456C0F |. 56 push esi
00456C10 |. A1 98514700 mov eax,dword ptr ds:[475198]
00456C15 |. 33C4 xor eax,esp
00456C17 |. 50 push eax
00456C18 |. 8D4424 0C lea eax,dword ptr ss:[esp+C]
00456C1C |. 64:A3 00000000 mov dword ptr fs:[0],eax
00456C22 |. E8 D005FBFF call AAAA.004071F7
00456C27 85C0 test eax,eax ; eax=0
00456C29 74 13 je short AAAA.00456C3E ; 必须跳
00456C2B |> 33C0 xor eax,eax
00456C2D |. 8B4C24 0C mov ecx,dword ptr ss:[esp+C]
00456C31 |. 64:890D 00000000 mov dword ptr fs:[0],ecx
00456C38 |. 59 pop ecx
00456C39 |. 5E pop esi
00456C3A |. 83C4 10 add esp,10
00456C3D |. C3 retn
00456C3E |> A1 28E04500 mov eax,dword ptr ds:[<&CosaDll.hMultiModlib>]
00456C43 |. 8338 00 cmp dword ptr ds:[eax],0
00456C46 |.^ 74 E3 je short AAAA.00456C2B ; 没跳
00456C48 |. 8B00 mov eax,dword ptr ds:[eax]
00456C4A |. 8B35 30E14500 mov esi,dword ptr ds:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
00456C50 |. 68 1C804600 push AAAA.0046801C ; /rcdog_open
00456C55 |. 50 push eax ; |hModule
00456C56 |. FFD6 call esi ; \GetProcAddress
00456C58 |. 8B0D 28E04500 mov ecx,dword ptr ds:[<&CosaDll.hMultiModlib>] ; aaadll.hMultiModlib
00456C5E |. A3 E8544700 mov dword ptr ds:[4754E8],eax
00456C63 |. 8B11 mov edx,dword ptr ds:[ecx]
00456C65 |. 68 10804600 push AAAA.00468010 ; /rcdog_close
00456C6A |. 52 push edx ; |hModule
00456C6B |. FFD6 call esi ; \GetProcAddress
00456C6D |. A3 E4544700 mov dword ptr ds:[4754E4],eax
00456C72 |. A1 28E04500 mov eax,dword ptr ds:[<&CosaDll.hMultiModlib>]
00456C77 |. 8B08 mov ecx,dword ptr ds:[eax]
00456C79 |. 68 FC7F4600 push AAAA.00467FFC ; /rcdog_checkmodule
00456C7E |. 51 push ecx ; |hModule
00456C7F |. FFD6 call esi ; \GetProcAddress
00456C81 |. 8B15 28E04500 mov edx,dword ptr ds:[<&CosaDll.hMultiModlib>] ; aaadll.hMultiModlib
00456C87 |. A3 E0544700 mov dword ptr ds:[4754E0],eax
00456C8C |. 8B02 mov eax,dword ptr ds:[edx]
00456C8E |. 68 E47F4600 push AAAA.00467FE4 ; /rcdog_getlastdogerror
00456C93 |. 50 push eax ; |hModule
00456C94 |. FFD6 call esi ; \GetProcAddress
00456C96 |. 6A 00 push 0
00456C98 |. 68 56150A00 push 0A1556
00456C9D |. A3 D0544700 mov dword ptr ds:[4754D0],eax
00456CA2 |. C705 FC544700 56150A0>mov dword ptr ds:[4754FC],0A1556
00456CAC |. C605 F0544700 00 mov byte ptr ds:[4754F0],0
00456CB3 |. FF15 E8544700 call dword ptr ds:[4754E8] ; aaa16dl.RCDog_Open
00456CB9 |. 83C4 08 add esp,8
00456CBC 85C0 test eax,eax ; 有狗返回0
00456CBE 75 29 jnz short AAAA.00456CE9 ; 不能跳
00456CC0 |. 8B4C24 1C mov ecx,dword ptr ss:[esp+1C]
00456CC4 |. 51 push ecx ; ecx=1
00456CC5 |. FF15 E0544700 call dword ptr ds:[4754E0]
00456CCB |. 83C4 04 add esp,4 ; eax=1
00456CCE 8BF0 mov esi,eax ; ecx=1
00456CD0 |. FF15 E4544700 call dword ptr ds:[4754E4] ;aaa16dl.RCDog_Close
00456CD6 |. 8BC6 mov eax,esi
00456CD8 |. 8B4C24 0C mov ecx,dword ptr ss:[esp+C] ; eax=1
00456CDC |. 64:890D 00000000 mov dword ptr fs:[0],ecx
00456CE3 |. 59 pop ecx
00456CE4 |. 5E pop esi
00456CE5 |. 83C4 10 add esp,10
00456CE8 |. C3 retn 这里只要eax=1,就过狗了
00456CE9 |> 3D 05400080 cmp eax,80004005
00456CEE |. 75 06 jnz short AAAA.00456CF6
00456CF0 |. FF15 D0544700 call dword ptr ds:[4754D0]
00456CF6 |> 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
00456CFA |. FF15 F8ED4500 call dword ptr ds:[<&mfc90.#316>] ; mfc90.#316
00456D00 |. 68 D07F4600 push AAAA.00467FD0 ; can't open the dog
00456D05 |. 8D5424 0C lea edx,dword ptr ss:[esp+C]
00456D09 |. 68 986F4600 push AAAA.00466F98 ; %s\n
00456D0E |. 52 push edx
00456D0F |. C74424 20 00000000 mov dword ptr ss:[esp+20],0
00456D17 |. FF15 24EE4500 call dword ptr ds:[<&mfc90.#2539>] ; mfc90.#2539
00456D1D |. 83C4 0C add esp,0C
00456D20 |. 6A 00 push 0
00456D22 |. 6A 00 push 0
00456D24 |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00456D28 |. FF15 8CEE4500 call dword ptr ds:[<&mfc90.#910>] ; mfc90.#3726
00456D2E |. 50 push eax
00456D2F |. E8 68020000 call <jmp.&mfc90.#1183>
00456D34 |. 6A 00 push 0 ; /status = 0
00456D36 |. FF15 2CE24500 call dword ptr ds:[<&MSVCR90.exit>] ; \exit
00456D3C |. CC int3
00456D3D |. CC int3
00456D3E |. CC int3
00456D3F |. CC int3
00456D40 |$ 81EC EC000000 sub esp,0EC
00456D46 |. A1 98514700 mov eax,dword ptr ds:[475198]
00456D4B |. 33C4 xor eax,esp
00456D4D |. 898424 E8000000 mov dword ptr ss:[esp+E8],eax
00456D54 |. A1 2CE04500 mov eax,dword ptr ds:[<&CosaDll.hConvertlib>]
00456D59 |. C68424 DC000000 43 mov byte ptr ss:[esp+DC],43
00456D61 |. C68424 DD000000 4F mov byte ptr ss:[esp+DD],4F
00456D69 |. C68424 DE000000 53 mov byte ptr ss:[esp+DE],53
00456D71 |. C68424 DF000000 41 mov byte ptr ss:[esp+DF],41
00456D79 |. C68424 E0000000 57 mov byte ptr ss:[esp+E0],57
00456D81 |. C68424 E1000000 49 mov byte ptr ss:[esp+E1],49
00456D89 |. C68424 E2000000 4E mov byte ptr ss:[esp+E2],4E
00456D91 |. C68424 E3000000 39 mov byte ptr ss:[esp+E3],39
00456D99 |. C68424 E4000000 38 mov byte ptr ss:[esp+E4],38
00456DA1 |. 8338 00 cmp dword ptr ds:[eax],0
00456DA4 |. 56 push esi
00456DA5 |. 0F84 A3000000 je AAAA.00456E4E
00456DAB |. 8B00 mov eax,dword ptr ds:[eax]
00456DAD |. 68 40804600 push AAAA.00468040 ; /gs_mhdog
00456DB2 |. 50 push eax ; |hModule
00456DB3 |. FF15 30E14500 call dword ptr ds:[<&KERNEL32.GetProcAddress>] ; \GetProcAddress
00456DB9 |. BA 09000000 mov edx,9
00456DBE |. 52 push edx
00456DBF |. A3 08554700 mov dword ptr ds:[475508],eax
00456DC4 |. 66:895424 0E mov word ptr ss:[esp+E],dx
00456DC9 |. 33C0 xor eax,eax
00456DCB |. 8D9424 E4000000 lea edx,dword ptr ss:[esp+E4]
00456DD2 |. 52 push edx
00456DD3 |. B9 04000000 mov ecx,4
00456DD8 |. 66:894424 10 mov word ptr ss:[esp+10],ax
00456DDD |. 66:894C24 0C mov word ptr ss:[esp+C],cx
00456DE2 |. 8D4424 20 lea eax,dword ptr ss:[esp+20]
00456DE6 |. 33C9 xor ecx,ecx
00456DE8 |. 68 C8000000 push 0C8
00456DED |. 50 push eax
00456DEE |. 66:894C24 16 mov word ptr ss:[esp+16],cx
00456DF3 |. C74424 1C 56150A00 mov dword ptr ss:[esp+1C],0A1556
00456DFB |. FF15 28E24500 call dword ptr ds:[<&MSVCR90.strncpy_s>] ; msvcr90.strncpy_s
00456E01 |. 83C4 10 add esp,10
00456E04 |. 8D4C24 04 lea ecx,dword ptr ss:[esp+4]
00456E08 |. 51 push ecx
00456E09 |. FF15 08554700 call dword ptr ds:[475508]
00456E0F |. 85C0 test eax,eax
00456E11 |. 75 26 jnz short AAAA.00456E39
00456E13 |. DB4424 10 fild dword ptr ss:[esp+10]
00456E17 |. 5E pop esi
00456E18 |. DC0D 38804600 fmul qword ptr ds:[468038]
00456E1E |. DC2D 30804600 fsubr qword ptr ds:[468030]
00456E24 |. 8B8C24 E8000000 mov ecx,dword ptr ss:[esp+E8]
00456E2B |. 33CC xor ecx,esp
00456E2D |. E8 80100000 call AAAA.00457EB2
00456E32 |. 81C4 EC000000 add esp,0EC
00456E38 |. C3 retn
第二个CALL调用狗
00456D40 |$ 81EC EC000000 sub esp,0EC
00456D46 |. A1 98514700 mov eax,dword ptr ds:[475198]
00456D4B |. 33C4 xor eax,esp
00456D4D |. 898424 E8000000 mov dword ptr ss:[esp+E8],eax
00456D54 |. A1 2CE04500 mov eax,dword ptr ds:[<&CosaDll.hConvertlib>]
00456D59 |. C68424 DC000000 43 mov byte ptr ss:[esp+DC],43
00456D61 |. C68424 DD000000 4F mov byte ptr ss:[esp+DD],4F
00456D69 |. C68424 DE000000 53 mov byte ptr ss:[esp+DE],53
00456D71 |. C68424 DF000000 41 mov byte ptr ss:[esp+DF],41
00456D79 |. C68424 E0000000 57 mov byte ptr ss:[esp+E0],57
00456D81 |. C68424 E1000000 49 mov byte ptr ss:[esp+E1],49
00456D89 |. C68424 E2000000 4E mov byte ptr ss:[esp+E2],4E
00456D91 |. C68424 E3000000 39 mov byte ptr ss:[esp+E3],39
00456D99 |. C68424 E4000000 38 mov byte ptr ss:[esp+E4],38
00456DA1 |. 8338 00 cmp dword ptr ds:[eax],0
00456DA4 |. 56 push esi
00456DA5 |. 0F84 A3000000 je AAAA.00456E4E
00456DAB |. 8B00 mov eax,dword ptr ds:[eax]
00456DAD |. 68 40804600 push AAAA.00468040 ; /gs_mhdog
00456DB2 |. 50 push eax ; |hModule
00456DB3 |. FF15 30E14500 call dword ptr ds:[<&KERNEL32.GetProcAddress>] ; \GetProcAddress
00456DB9 |. BA 09000000 mov edx,9
00456DBE |. 52 push edx
00456DBF |. A3 08554700 mov dword ptr ds:[475508],eax
00456DC4 |. 66:895424 0E mov word ptr ss:[esp+E],dx
00456DC9 |. 33C0 xor eax,eax
00456DCB |. 8D9424 E4000000 lea edx,dword ptr ss:[esp+E4]
00456DD2 |. 52 push edx
00456DD3 |. B9 04000000 mov ecx,4
00456DD8 |. 66:894424 10 mov word ptr ss:[esp+10],ax
00456DDD |. 66:894C24 0C mov word ptr ss:[esp+C],cx
00456DE2 |. 8D4424 20 lea eax,dword ptr ss:[esp+20]
00456DE6 |. 33C9 xor ecx,ecx
00456DE8 |. 68 C8000000 push 0C8
00456DED |. 50 push eax
00456DEE |. 66:894C24 16 mov word ptr ss:[esp+16],cx
00456DF3 |. C74424 1C 56150A00 mov dword ptr ss:[esp+1C],0A1556
00456DFB |. FF15 28E24500 call dword ptr ds:[<&MSVCR90.strncpy_s>] ; msvcr90.strncpy_s
00456E01 |. 83C4 10 add esp,10
00456E04 |. 8D4C24 04 lea ecx,dword ptr ss:[esp+4]
00456E08 |. 51 push ecx
00456E09 |. FF15 08554700 call dword ptr ds:[475508]
00456E0F |. 85C0 test eax,eax ;eax要返回0
00456E11 |. 75 26 jnz short AAAA.00456E39 ;带狗运行没有跳
00456E13 |. DB4424 10 fild dword ptr ss:[esp+10]
00456E17 |. 5E pop esi
00456E18 |. DC0D 38804600 fmul qword ptr ds:[468038]
00456E1E |. DC2D 30804600 fsubr qword ptr ds:[468030]
00456E24 |. 8B8C24 E8000000 mov ecx,dword ptr ss:[esp+E8]
00456E2B |. 33CC xor ecx,esp
00456E2D |. E8 80100000 call AAAA.00457EB2
00456E32 |. 81C4 EC000000 add esp,0EC
00456E38 |. C3 retn
有32个地方在调用这两个函数,调用后只要EAX返回1,32个地方就过狗了,但是在软件里面有个功能限制还是有问题,请各位大牛帮忙分析看看,谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)