谈下 PcShare2007 暗桩
鬼仔注:应作者要求,文中人名以XX代替
作者:open
上星期XX丢过来要去自检。就有了以上文章.(听说有三个人都放弃,偶也没有多大信心)
首先偶对这软件不熟。不过大概地分析一下后也略之一二该软件的检证部份应是在DLL里面的吧。因为偶没有分析.疑问:该软件的身份验证偶没有说错的话应是在DLL里。但主程序对DLL有检验。所以要破解他就要改DLL。你可别说破解是用欺骗的方式来完成或者内存补丁(因为DLL是动态加载有可以地址都不同的。所以放出内存补丁是不行的)。因此同样你修改了那个广告连接的HTM也会倒至不上线的结果费话偶不说了。
说下分析:
一开始偶还以为会对那网址做检证。因此直接下内存读写。可惜不是又听说你们说跟MD5有关。我相信你们的话。又去下断MD5。结果还是不是
就这样转了个弯。什么都没有。气愤ING!不跟你们的思路跟下去。换个思路广告网址不能变?那我改关健CALL里总可以吧?于是修改后再导入不上线。这就 100%证实会自检DLL了。当然用PEID只能看到MD5加密算法。MD5加密算法来检验的偶也见过。之前MD5断下的都于自检DLL的无关。所以判断应是很简单的判断。
下断CreateFileA
—————————————————————————————————————————–
00420F95 |. 6A 00 push 0
00420F97 |. FF15 044B4200 call dword ptr [<&ole32.CoInitialize>>; ole32.CoInitialize
00420F9D |. 68 F8E84200 push 0042E8F8 ; /Arg1 = 0042E8F8 ASCII "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\amnzexio.tmp"
00420FA2 |. E8 B9FDFFFF call 00420D60 ; \PcShare.00420D60
00420FA7 |. 83C4 04 add esp, 4
00420FAA |. 85C0 test eax, eax
00420FAC |. 0F84 37020000 je 004211E9
00420FB2 |. 68 F8E84200 push 0042E8F8 ; /FileName = "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\amnzexio.tmp"
00420FB7 |. FF15 5C414200 call dword ptr [<&KERNEL32.LoadLibrar>; \LoadLibraryA
00420FBD |. 85C0 test eax, eax
00420FBF |. A3 F4E84200 mov dword ptr [42E8F4], eax
00420FC4 |. 0F84 1F020000 je 004211E9
00420FCA |. 8B35 60414200 mov esi, dword ptr [<&KERNEL32.GetPr>; KERNEL32.GetProcAddress
00420FD0 |. 33C9 xor ecx, ecx
00420FD2 |. 894D E9 mov dword ptr [ebp-17], ecx
00420FD5 |. 8D55 E8 lea edx, dword ptr [ebp-18]
00420FD8 |. 894D ED mov dword ptr [ebp-13], ecx
00420FDB |. 52 push edx ; /ProcNameOrOrdinal
00420FDC |. 50 push eax ; |hModule
00420FDD |. 884D F1 mov byte ptr [ebp-F], cl ; |
00420FE0 |. C645 E8 50 mov byte ptr [ebp-18], 50 ; |
00420FE4 |. C645 E9 73 mov byte ptr [ebp-17], 73 ; |
00420FE8 |. C645 EA 31 mov byte ptr [ebp-16], 31 ; |
00420FEC |. FFD6 call esi ; \GetProcAddress
00420FEE |. 8B0D F4E84200 mov ecx, dword ptr [42E8F4] ; amnzexio.00D80000
00420FF4 |. A3 E0E84200 mov dword ptr [42E8E0], eax
00420FF9 |. 8D45 E8 lea eax, dword ptr [ebp-18]
00420FFC |. C645 EA 32 mov byte ptr [ebp-16], 32
00421000 |. 50 push eax ; /ProcNameOrOrdinal
00421001 |. 51 push ecx ; |hModule => 00D80000 (amnzexio)
00421002 |. FFD6 call esi ; \GetProcAddress
00421004 |. A3 E4E84200 mov dword ptr [42E8E4], eax
00421009 |. A1 F4E84200 mov eax, dword ptr [42E8F4]
0042100E |. 8D55 E8 lea edx, dword ptr [ebp-18]
00421011 |. C645 EA 33 mov byte ptr [ebp-16], 33
00421015 |. 52 push edx ; /ProcNameOrOrdinal
00421016 |. 50 push eax ; |hModule => 00D80000 (amnzexio)
00421017 |. FFD6 call esi ; \GetProcAddress
00421019 |. 8B15 F4E84200 mov edx, dword ptr [42E8F4] ; amnzexio.00D80000
0042101F |. 8D4D E8 lea ecx, dword ptr [ebp-18]
00421022 |. 51 push ecx ; /ProcNameOrOrdinal
00421023 |. 52 push edx ; |hModule => 00D80000 (amnzexio)
00421024 |. A3 E8E84200 mov dword ptr [42E8E8], eax ; |
00421029 |. C645 EA 34 mov byte ptr [ebp-16], 34 ; |
0042102D |. FFD6 call esi ; \GetProcAddress
0042102F |. 8B0D F4E84200 mov ecx, dword ptr [42E8F4] ; amnzexio.00D80000
00421035 |. A3 ECE84200 mov dword ptr [42E8EC], eax
0042103A |. 8D45 E8 lea eax, dword ptr [ebp-18]
0042103D |. C645 EA 35 mov byte ptr [ebp-16], 35
00421041 |. 50 push eax ; /ProcNameOrOrdinal
00421042 |. 51 push ecx ; |hModule => 00D80000 (amnzexio)
00421043 |. FFD6 call esi ; \GetProcAddress
00421045 |. 8B15 FCEA4200 mov edx, dword ptr [42EAFC]
0042104B |. 8B35 F8EA4200 mov esi, dword ptr [42EAF8] ; PcShare.00454D48
00421051 |. A3 F0E84200 mov dword ptr [42E8F0], eax
00421056 |. 33FF xor edi, edi
00421058 |. 32C9 xor cl, cl
0042105A |. 33C0 xor eax, eax
0042105C |. 3BD7 cmp edx, edi
0042105E |. 8955 E4 mov dword ptr [ebp-1C], edx
00421061 |. 76 0D jbe short 00421070
00421063 |> 320C30 /xor cl, byte ptr [eax+esi]
00421066 |. 40 |inc eax
00421067 |. 3BC2 |cmp eax, edx
00421069 |.^ 72 F8 \jb short 00421063
0042106B |. 80F9 C5 cmp cl, 0C5
0042106E |. 74 06 je short 00421076
00421070 |> 893D E0E84200 mov dword ptr [42E8E0], edi
00421076 |> 57 push edi ; /Arg1
00421077 |. 8D8D D8FAFFFF lea ecx, dword ptr [ebp-528] ; |
0042107D |. E8 8E01FFFF call 00411210 ; \PcShare.00411210
00421082 |. 8D8D D8FAFFFF lea ecx, dword ptr [ebp-528]
00421088 |. 897D FC mov dword ptr [ebp-4], edi
0042108B |. E8 3E070000 call <jmp.&MFC42.#2514>
00421090 |. 83F8 01 cmp eax, 1
00421093 |. 74 0B je short 004210A0
————————————————————————————————————————–
从上来可以看出。以下这段就是检验DLL的啦 :)
00421045 |. 8B15 FCEA4200 mov edx, dword ptr [42EAFC]
0042104B |. 8B35 F8EA4200 mov esi, dword ptr [42EAF8] ; PcShare.00454D48
00421051 |. A3 F0E84200 mov dword ptr [42E8F0], eax
00421056 |. 33FF xor edi, edi
00421058 |. 32C9 xor cl, cl
0042105A |. 33C0 xor eax, eax
0042105C |. 3BD7 cmp edx, edi
0042105E |. 8955 E4 mov dword ptr [ebp-1C], edx
00421061 |. 76 0D jbe short 00421070
00421063 |> 320C30 /xor cl, byte ptr [eax+esi]
00421066 |. 40 |inc eax
00421067 |. 3BC2 |cmp eax, edx
00421069 |.^ 72 F8 \jb short 00421063
0042106B |. 80F9 C5 cmp cl, 0C5 ;关健处 拿冰雨改了地址的来看这里应把C5改为A5
0042106E |. 74 06 je short 00421076
—————————————————————————————————————————
等等还没有完. 查找所有变量:
参考位于 PcShare:.text 到常量 C5
地址 反汇编 注释
00408F05 cmp cl, 0C5
0040EDF8 cmp cl, 0C5
0040F73E cmp cl, 0C5
0040F80E cmp cl, 0C5
00410DCB cmp cl, 0C5
00412CEA cmp cl, 0C5
00412D4E cmp cl, 0C5
00412F64 cmp cl, 0C5
00413107 cmp cl, 0C5
00413462 cmp cl, 0C5
0041389A cmp cl, 0C5
0041390F cmp cl, 0C5
0042106B cmp cl, 0C5
管它这么多。都改为A5
—————————————————————————————————————————-
修改后还不能上线。因为还有一自检。怎么找第二个自检。有第一次步了。下一步当然容易得多啦。
用W32dsm反汇编主程序。查找42EAF8 为什么要查这句跟据这一句
0042104B |. 8B35 F8EA4200 mov esi, dword ptr [42EAF8]
好。你会发现再有自检。查找全有变量0D 把CMP CL,0D的就改了就可以了 同样。偶改为63测试。OK