最近刚好要用到HTTP Analyzer V7来分析网络,也看到网上有很多破解版,估计破解不会很难,又想到有段时间没有破解过软件了,所以下个正版自己破解来练练手,怕以后忘记,在这里做个记录,也分享一下破解过程
首先把软件拖到Ollydbg中,F5运行起来,查找字符串寻找关键字,不出所料,很快就发现和注册相关的字符串,如图1所示,
图1
转到上图所示代码段内,浏览附近代码,猜测大致的功能,在开头的地方下段点,运行然后会段在断点出,
以下是我对这部分代码的分析:
00578BF8 . /EB 10 jmp short 00578C0A
// 校验部分
00578C0A > \8B45 FC mov eax, dword ptr [ebp-4]
00578C0D . 8078 1C 00 cmp byte ptr [eax+1C], 0
00578C11 74 0A je short 00578C1D
// 是否有注册码
00578745 . 8B45 F0 mov eax, dword ptr [ebp-10]
00578748 . E8 DF41F1FF call 0048C92C
0057874D . 84C0 test al, al
0057874F . 75 0A jnz short 0057875B
// 打开注册表句柄
0057875E . BA D0895700 mov edx, 005789D0 ; LicenseKey
00578763 . 8B45 F0 mov eax, dword ptr [ebp-10]
00578766 . E8 1549F1FF call
00578779 . 8D4D E8 lea ecx, dword ptr [ebp-18]
0057877C . BA E4895700 mov edx, 005789E4 ; UserName
00578781 . 8B45 F0 mov eax, dword ptr [ebp-10]
00578784 . E8 F748F1FF call
// 获取 LicenseKey 和 UserName 值
005787B4 . 8B45 F4 mov eax, dword ptr [ebp-C]
// 开始校验
005787BA . BA F8895700 mov edx, 005789F8 ; Invalid License
005787BF . E8 E8D4E8FF call 00405CAC
// 默认不存在
005787CF . FF11 call dword ptr [ecx] ; HttpAnal.0057917C
// 校验 返回
00579234 |. E8 0FEEFFFF call 00578048 ; 校验密码
00579239 |. 84C0 test al, al
0057923B 74 1F je short 0057925C
// 内部校验处
00578059 |. 33C9 xor ecx, ecx
0057805B |. E8 44FCFFFF call
00578060 66:813C24 5B9>cmp word ptr [esp], 9C5B
00578066 0F94C0 sete al
// 计算
00577CA4 >/$ 53 push ebx ; calc
00577CA5 |. 56 push esi
00577CA6 |. 57 push edi
00577CA7 |. 83C4 E8 add esp, -18
00577CAA |. 884C24 08 mov byte ptr [esp+8], cl
00577CAE |. 895424 04 mov dword ptr [esp+4], edx
00577CB2 |. 890424 mov dword ptr [esp], eax
00577CB5 |. 8B4424 04 mov eax, dword ptr [esp+4]
00577CB9 |. 8B00 mov eax, dword ptr [eax]
00577CBB |. 894424 0C mov dword ptr [esp+C], eax
00577CBF |. 8B4424 04 mov eax, dword ptr [esp+4]
00577CC3 |. 8B40 04 mov eax, dword ptr [eax+4]
00577CC6 |. 894424 10 mov dword ptr [esp+10], eax
00577CCA |. C74424 14 040>mov dword ptr [esp+14], 4
00577CD2 |. BE 109D9600 mov esi, 00969D10
00577CD7 |> 8B5424 0C /mov edx, dword ptr [esp+C] ; edx = str
00577CDB |. 0FB64424 08 |movzx eax, byte ptr [esp+8]
00577CE0 |. 8BD8 |mov ebx, eax
00577CE2 |. 03DB |add ebx, ebx
00577CE4 |. 8D1C5B |lea ebx, dword ptr [ebx+ebx*2]
00577CE7 |. 8B04DE |mov eax, dword ptr [esi+ebx*8]
00577CEA |. 8B0C24 |mov ecx, dword ptr [esp]
00577CED |. 8B0C81 |mov ecx, dword ptr [ecx+eax*4]
00577CF0 |. 8B44DE 04 |mov eax, dword ptr [esi+ebx*8+4]
00577CF4 |. 8B3C24 |mov edi, dword ptr [esp]
00577CF7 |. 8B0487 |mov eax, dword ptr [edi+eax*4]
00577CFA |. 8B5CDE 08 |mov ebx, dword ptr [esi+ebx*8+8]
00577CFE |. 8B3C24 |mov edi, dword ptr [esp]
00577D01 |. 8B1C9F |mov ebx, dword ptr [edi+ebx*4]
00577D04 |. 03D3 |add edx, ebx
00577D06 |. 03DA |add ebx, edx
00577D08 |. 8BFA |mov edi, edx
00577D0A |. C1EF 07 |shr edi, 7
00577D0D |. 33D7 |xor edx, edi
00577D0F |. 03CA |add ecx, edx
00577D11 |. 03D1 |add edx, ecx
00577D13 |. 8BF9 |mov edi, ecx
00577D15 |. C1E7 0D |shl edi, 0D
00577D18 |. 33CF |xor ecx, edi
00577D1A |. 03C1 |add eax, ecx
00577D1C |. 03C8 |add ecx, eax
00577D1E |. 8BF8 |mov edi, eax
00577D20 |. C1EF 11 |shr edi, 11
00577D23 |. 33C7 |xor eax, edi
00577D25 |. 03D8 |add ebx, eax
00577D27 |. 03C3 |add eax, ebx
00577D29 |. 8BFB |mov edi, ebx
00577D2B |. C1E7 09 |shl edi, 9
00577D2E |. 33DF |xor ebx, edi
00577D30 |. 03D3 |add edx, ebx
00577D32 |. 03DA |add ebx, edx
00577D34 |. 8BFA |mov edi, edx
00577D36 |. C1EF 03 |shr edi, 3
00577D39 |. 33D7 |xor edx, edi
00577D3B |. 03CA |add ecx, edx
00577D3D |. 8BD1 |mov edx, ecx
00577D3F |. C1E2 07 |shl edx, 7
00577D42 |. 33CA |xor ecx, edx
00577D44 |. 03C1 |add eax, ecx
00577D46 |. 8BD3 |mov edx, ebx
00577D48 |. C1EA 0F |shr edx, 0F
00577D4B |. 33C2 |xor eax, edx
00577D4D |. 03D8 |add ebx, eax
00577D4F |. 8BC3 |mov eax, ebx
00577D51 |. C1E0 0B |shl eax, 0B
00577D54 |. 33D8 |xor ebx, eax
00577D56 |. 8B4424 10 |mov eax, dword ptr [esp+10]
00577D5A |. 33C3 |xor eax, ebx
00577D5C |. 8B5424 0C |mov edx, dword ptr [esp+C]
00577D60 |. 895424 10 |mov dword ptr [esp+10], edx
00577D64 |. 894424 0C |mov dword ptr [esp+C], eax
00577D68 |. 83C6 0C |add esi, 0C
00577D6B |. FF4C24 14 |dec dword ptr [esp+14]
00577D6F |.^ 0F85 62FFFFFF \jnz 00577CD7
00577D75 |. 8B4424 04 mov eax, dword ptr [esp+4]
00577D79 |. 8B5424 10 mov edx, dword ptr [esp+10]
00577D7D |. 8910 mov dword ptr [eax], edx
00577D7F |. 8B4424 04 mov eax, dword ptr [esp+4]
00577D83 |. 8B5424 0C mov edx, dword ptr [esp+C]
00577D87 |. 8950 04 mov dword ptr [eax+4], edx
00577D8A |. 83C4 18 add esp, 18
00577D8D |. 5F pop edi
00577D8E |. 5E pop esi
00577D8F |. 5B pop ebx
00577D90 \. C3 retn
// 算法部分
005791A7 |. 8BC7 mov eax, edi
005791A9 |. E8 9AF0FFFF call 00578248
005791AE |. 84C0 test al, al
005791B0 0F84 A6000000 je 0057925C
005791B6 |. 8B45 F8 mov eax, [local.2]
005791B9 |. E8 66FFFFFF call 00579124
005791BE |. 84C0 test al, al
005791C0 0F84 96000000 je 0057925C
// LicenseKey 是否可以被 - 分割 得到分割后的第一个字符串转化为数值
005787D3 . 8B45 F4 mov eax, dword ptr [ebp-C]
005787D6 . 8858 24 mov byte ptr [eax+24], bl
005787D9 . 84DB test bl, bl
005787DB 0F84 B0010000 je 00578991
在本机打开注册表,找到上图中注册表部分所添加的子键,修改其中的校验码和用户名,可以完成破解该软件