能力值:
( LV2,RANK:10 )
3 楼
找到了提示"#E007请检查加密狗"的部分在CWordAnalysisDll.dll
代码如下:
1000761F |. BE A8590110 mov esi,CWordAna.100159A8 ; ASCII "NULL"
10007624 |. B8 0C410210 mov eax,CWordAna.1002410C
10007629 |> 8A10 /mov dl,byte ptr ds:[eax]
1000762B |. 8A1E |mov bl,byte ptr ds:[esi]
1000762D |. 8ACA |mov cl,dl
1000762F |. 3AD3 |cmp dl,bl
10007631 |. 74 1E |je short CWordAna.10007651
10007633 |. 84C9 |test cl,cl
10007635 |. 75 16 |jnz short CWordAna.1000764D
10007637 |. 8A50 01 |mov dl,byte ptr ds:[eax+1]
1000763A |. 8A5E 01 |mov bl,byte ptr ds:[esi+1]
1000763D |. 8ACA |mov cl,dl
1000763F |. 3AD3 |cmp dl,bl
10007641 |. 74 0E |je short CWordAna.10007651
10007643 |. 83C0 02 |add eax,2
10007646 |. 83C6 02 |add esi,2
10007649 |. 84C9 |test cl,cl
1000764B |.^ 74 DC \je short CWordAna.10007629
1000764D |> 33C0 xor eax,eax
1000764F |. EB 05 jmp short CWordAna.10007656
10007651 |> 1BC0 sbb eax,eax
10007653 |. 83D8 FF sbb eax,-1
10007656 |> 5F pop edi
10007657 |. 5E pop esi
10007658 |. 85C0 test eax,eax
1000765A |. 5B pop ebx
1000765B |. 75 1F jnz short CWordAna.1000767C
1000765D |. 6A 30 push 30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
1000765F |. 68 94590110 push CWordAna.10015994 ; |Title = "System Information"
10007664 |. 68 74590110 push CWordAna.10015974 ; |Text = "#E007 Please Check Soft Dog!" //就是这里
10007669 |. 50 push eax ; |hOwner
1000766A |. A2 72590110 mov byte ptr ds:[10015972],al ; |
1000766F |. FF15 40310110 call dword ptr ds:[<&USER32.Messa>; \MessageBoxA
10007675 |. 6A 00 push 0
10007677 |. E8 7E2D0000 call CWordAna.1000A3FA
1000767C |> 8B4424 14 mov eax,dword ptr ss:[esp+14]
10007680 |. 3D B5030000 cmp eax,3B5 ; Switch (cases 0..4E4)
10007685 |. 77 5D ja short CWordAna.100076E4
10007687 |. 74 3F je short CWordAna.100076C8
10007689 |. 83E8 00 sub eax,0
1000768C |. 74 23 je short CWordAna.100076B1
1000768E |. 2D A4030000 sub eax,3A4
10007693 |. 74 59 je short CWordAna.100076EE
10007695 |. 83E8 04 sub eax,4
10007698 |. 75 54 jnz short CWordAna.100076EE
1000769A |. 8B4424 10 mov eax,dword ptr ss:[esp+10] ; Case 3A8 of switch 10007680
1000769E |. 8B4C24 0C mov ecx,dword ptr ss:[esp+C]
100076A2 |. 50 push eax
100076A3 |. 51 push ecx
100076A4 |. 8B4D 10 mov ecx,dword ptr ss:[ebp+10]
100076A7 |. E8 549AFFFF call CWordAna.10001100
100076AC |. 5D pop ebp
100076AD |. 59 pop ecx
100076AE |. C2 0C00 retn 0C
能力值:
( LV3,RANK:20 )
12 楼
OD载入软件,下断 bp MessageBoxA
F9运行,程序开始,启动后一会,程序被OD拦住,
77D504EA U> 8BFF mov edi,edi
77D504EC 55 push ebp
77D504ED 8BEC mov ebp,esp
77D504EF 833D BC04D777 0>cmp dword ptr ds:[77D704BC],0
77D504F6 74 24 je short USER32.77D5051C
77D504F8 64:A1 18000000 mov eax,dword ptr fs:[18]
77D504FE 6A 00 push 0
77D50500 FF70 24 push dword ptr ds:[eax+24]
77D50503 68 240BD777 push USER32.77D70B24
77D50508 FF15 C812D177 call dword ptr ds:[<&KERNEL32.InterlockedCompareExchange>] ; kernel32.InterlockedCompareExchange
77D5050E 85C0 test eax,eax
77D50510 75 0A jnz short USER32.77D5051C
77D50512 C705 200BD777 0>mov dword ptr ds:[77D70B20],1
77D5051C 6A 00 push 0
77D5051E FF75 14 push dword ptr ss:[ebp+14]
77D50521 FF75 10 push dword ptr ss:[ebp+10]
77D50524 FF75 0C push dword ptr ss:[ebp+C]
77D50527 FF75 08 push dword ptr ss:[ebp+8]
77D5052A E8 2D000000 call USER32.MessageBoxExA 这里是出错的调用
77D5052F 5D pop ebp
77D50530 C2 1000 retn 10
一路F8,出现错误框,确定后,到达RETN返回上一级,然后再上一级
004270D0 . 83EC 20 sub esp,20
004270D3 . 8D4424 00 lea eax,dword ptr ss:[esp]
004270D7 . 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
004270DB . C705 78424800>mov dword ptr ds:[484278],14FAB3BF
004270E5 . 56 push esi
004270E6 . C705 7C424800>mov dword ptr ds:[48427C],0BDDC2
004270F0 . A3 74424800 mov dword ptr ds:[484274],eax
004270F5 . 890D 70424800 mov dword ptr ds:[484270],ecx
004270FB . E8 E1C20000 call MultiDic.004333E1
00427100 . 85C0 test eax,eax
00427102 . 0F84 DE000000 je MultiDic.004271E6
00427108 . A1 80404800 mov eax,dword ptr ds:[484080]
0042710D . 85C0 test eax,eax
0042710F . 75 6F jnz short MultiDic.00427180
00427111 . 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
00427117 . 6A 00 push 0
00427119 . C705 80404800>mov dword ptr ds:[484080],1
00427123 . E8 82B60200 call MultiDic.004527AA
00427128 . 8B15 E83F4800 mov edx,dword ptr ds:[483FE8]
0042712E . 6A 00 push 0
00427130 . 8D8A 58030000 lea ecx,dword ptr ds:[edx+358]
00427136 . E8 6FB60200 call MultiDic.004527AA
0042713B . 68 38E00000 push
00427176 . B8 01000000 mov eax,1
0042717B . 5E pop esi
0042717C . 83C4 20 add esp,20
0042717F . C3 retn
这是一段校验代码,F8运行到RETN再返回上一级,
呵呵,上面有个大侠说了去改读狗的跳转,,我在这里,是再往上返回一级
到了4544C1,用W32ASM静态汇编,呵呵,关键CALL就是眼前了,修改4544C1的JE,改为JNZ,OK,
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00454446(C), :0045444B(C), :00454452(C), :00454457(C), :0045446A(U)
|
:0045449C FF7710 push [edi+10]
:0045449F 8365FC00 and dword ptr [ebp-04], 00000000
:004544A3 8B5F14 mov ebx, dword ptr [edi+14]
* Reference To: KERNEL32.SetEvent, Ord:0265h
|
:004544A6 FF152C834600 Call dword ptr [0046832C]
:004544AC 6AFF push FFFFFFFF
:004544AE 53 push ebx
* Reference To: KERNEL32.WaitForSingleObject, Ord:02CEh
|
:004544AF FF15A8834600 Call dword ptr [004683A8]
:004544B5 53 push ebx
* Reference To: KERNEL32.CloseHandle, Ord:001Bh
|
:004544B6 FF158C834600 Call dword ptr [0046838C]
:004544BC 8B4650 mov eax, dword ptr [esi+50]
:004544BF 85C0 test eax, eax
:004544C1 7408 je 004544CB
:004544C3 FF764C push [esi+4C]
:004544C6 FFD0 call eax
:004544C8 59 pop ecx
:004544C9 EB17 jmp 004544E2 小结,这个程序用静态汇编很难搞,因为没有字符串参考,而且出错也是
:004544C6 FFD0 call eax
缺点是用bp MessageBoxA能够拦住程序,且查狗的校验应该只有这一处,程序中有5处过来校验狗,
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00454446(C), :0045444B(C), :00454452(C), :00454457(C), :0045446A(U)
,修改
:004544C1 7408 je 004544CB
为
:004544C1 7408 jne 004544CB
就可以搞定程序,
没有认真测试,可能还有不到之处,望大侠指出
能力值:
( LV2,RANK:10 )
14 楼
这写天比较忙,看到楼主把软件发出来了,我测试了一下,原来不是楼主所找的那一个位置,加密狗校验一共放在三个文件中,
MultiDict.exe
UniteDicSearch.dll
CWordAnalysisDll.dll
首先我们按照njzzzzzz大虾的说法用OD载入,下断bp MessageboxA
来到这里
0041A720 |. 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL
0041A722 |. 52 push edx ; |Title
0041A723 |. 50 push eax ; |Text
0041A724 |. FF15 8C854600 call dword ptr ds:[<&USER32.GetFocus>] ; |[GetFocus
0041A72A |. 50 push eax ; |hOwner
0041A72B |. FF15 90854600 call dword ptr ds:[<&USER32.MessageBoxA>] ; \MessageBoxA ====就是这里啦
0041A731 |. 8D4C24 00 lea ecx,dword ptr ss:[esp]
0041A735 |. C64424 10 00 mov byte ptr ss:[esp+10],0
0041A73A |. E8 3B470300 call MultiDic.0044EE7A
0041A73F |. 8D4C24 04 lea ecx,dword ptr ss:[esp+4]
0041A743 |. C74424 10 FFFFFFF>mov dword ptr ss:[esp+10],-1
0041A74B |. E8 2A470300 call MultiDic.0044EE7A
0041A750 |. 8B4C24 08 mov ecx,dword ptr ss:[esp+8]
0041A754 |. 64:890D 00000000 mov dword ptr fs:[0],ecx
0041A75B |. 83C4 14 add esp,14
0041A75E \. C2 0400 retn 4
从上面的代码段可以看出这是程序编写者自己写的一个调用消息框的过程
F8一次调出提示框
Ctrl+F9执行到Retn
一次F8返回到调用位置
004270D0 . 83EC 20 sub esp,20
004270D3 . 8D4424 00 lea eax,dword ptr ss:[esp]
004270D7 . 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
004270DB . C705 78424800 BFB>mov dword ptr ds:[484278],14FAB3BF
004270E5 . 56 push esi
004270E6 . C705 7C424800 C2D>mov dword ptr ds:[48427C],0BDDC2
004270F0 . A3 74424800 mov dword ptr ds:[484274],eax
004270F5 . 890D 70424800 mov dword ptr ds:[484270],ecx
004270FB E8 E1C20000 call MultiDic.004333E1
00427100 85C0 test eax,eax
00427102 0F84 DE000000 je MultiDic.004271E6
00427108 . A1 80404800 mov eax,dword ptr ds:[484080]
0042710D . 85C0 test eax,eax
0042710F . 75 6F jnz short MultiDic.00427180
00427111 . 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
00427117 . 6A 00 push 0
00427119 . C705 80404800 010>mov dword ptr ds:[484080],1
00427123 . E8 82B60200 call MultiDic.004527AA
00427128 . 8B15 E83F4800 mov edx,dword ptr ds:[483FE8]
0042712E . 6A 00 push 0
00427130 . 8D8A 58030000 lea ecx,dword ptr ds:[edx+358]
00427136 . E8 6FB60200 call MultiDic.004527AA
0042713B . 68 38E00000 push 0E038 ; /Arg1 = 0000E038
00427140 . B9 7C404800 mov ecx,MultiDic.0048407C ; |
00427145 E8 7635FFFF call MultiDic.0041A6C0
0042714A . A1 E83F4800 mov eax,dword ptr ds:[483FE8]
0042714F . 8B35 8C864600 mov esi,dword ptr ds:[<&USER32.PostMessageA>] ; USER32.PostMessageA
00427155 . 6A 00 push 0 ; /lParam = 0
00427157 . 6A 00 push 0 ; |wParam = 0
00427159 . 8B48 1C mov ecx,dword ptr ds:[eax+1C] ; |
0042715C . 6A 12 push 12 ; |Message = WM_QUIT
0042715E . 51 push ecx ; |hWnd
0042715F . FFD6 call esi ; \PostMessageA
00427161 . 8B15 E83F4800 mov edx,dword ptr ds:[483FE8]
00427167 . 6A 00 push 0 ; /lParam = 0
00427169 . 6A 00 push 0 ; |wParam = 0
0042716B . 6A 12 push 12 ; |Message = WM_QUIT
0042716D . 8B82 74030000 mov eax,dword ptr ds:[edx+374] ; |
00427173 . 50 push eax ; |hWnd
00427174 . FFD6 call esi ; \PostMessageA
00427176 . B8 01000000 mov eax,1
0042717B . 5E pop esi
0042717C . 83C4 20 add esp,20
0042717F . C3 retn
00427180 > 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
00427186 . 6A 00 push 0
00427188 . E8 1DB60200 call MultiDic.004527AA
0042718D . 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
00427193 . 6A 00 push 0
00427195 . 81C1 58030000 add ecx,358
0042719B . E8 0AB60200 call MultiDic.004527AA
004271A0 . 68 38E00000 push 0E038 ; /Arg1 = 0000E038
004271A5 . B9 7C404800 mov ecx,MultiDic.0048407C ; |
004271AA . E8 1135FFFF call MultiDic.0041A6C0 ; \MultiDic.0041A6C0
004271AF . 8B15 E83F4800 mov edx,dword ptr ds:[483FE8]
004271B5 . 8B35 8C864600 mov esi,dword ptr ds:[<&USER32.PostMessageA>] ; USER32.PostMessageA
004271BB . 6A 00 push 0 ; /lParam = 0
004271BD . 6A 00 push 0 ; |wParam = 0
004271BF . 8B42 1C mov eax,dword ptr ds:[edx+1C] ; |
004271C2 . 6A 12 push 12 ; |Message = WM_QUIT
004271C4 . 50 push eax ; |hWnd
004271C5 . FFD6 call esi ; \PostMessageA
004271C7 . 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
004271CD . 6A 00 push 0 ; /lParam = 0
004271CF . 6A 00 push 0 ; |wParam = 0
004271D1 . 6A 12 push 12 ; |Message = WM_QUIT
004271D3 . 8B91 74030000 mov edx,dword ptr ds:[ecx+374] ; |
004271D9 . 52 push edx ; |hWnd
004271DA . FFD6 call esi ; \PostMessageA
004271DC . B8 01000000 mov eax,1
004271E1 . 5E pop esi
004271E2 . 83C4 20 add esp,20
004271E5 . C3 retn
上面
00427123 . E8 82B60200 call MultiDic.004527AA
位置就是显示消息框的位置,在这里我建议可以不使用njzzzzzz大虾的方法继续返回上一级了,在00427102位置直接修改为
jmp MultiDic.004271E6
那么不管什么时候调用效果都是一样的.下面要注意的地方是
0042715F . FFD6 call esi \PostMessageA
传入的消息参数有一项是
WM_QUIT
说明了程序在判断加密狗失败的时候调用PostMessageA迫使程序退出.
那么我们来看看到底有多少地方调用了PostMessageA呢?下断点PostMessageA
在Intermodual Calls里面看到一共有15处,而传入WM_QUIT参数的分别在
第一处
004262AD |. E8 98E70000 call <jmp.&UniteDicSearch.CDicApi::UniteDic_SearchEx>
004262B2 |. 3D E70ECEFE cmp eax,FECE0EE7
004262B7 |. 75 7F jnz short MultiDic.00426338
004262B9 |. 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
004262BF |. 6A 00 push 0
004262C1 |. E8 E4C40200 call MultiDic.004527AA
004262C6 |. A1 E83F4800 mov eax,dword ptr ds:[483FE8]
004262CB |. 6A 00 push 0
004262CD |. 8D88 58030000 lea ecx,dword ptr ds:[eax+358]
004262D3 |. E8 D2C40200 call MultiDic.004527AA
004262D8 |. 68 38E00000 push 0E038 ; /Arg1 = 0000E038
004262DD |. B9 7C404800 mov ecx,MultiDic.0048407C ; |
004262E2 |. E8 D943FFFF call MultiDic.0041A6C0 ; \MultiDic.0041A6C0
004262E7 |. 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
004262ED |. 8B35 8C864600 mov esi,dword ptr ds:[<&USER32.PostMessageA>] ; USER32.PostMessageA
004262F3 |. 6A 00 push 0 ; /lParam = 0
004262F5 |. 6A 00 push 0 ; |wParam = 0
004262F7 |. 8B51 1C mov edx,dword ptr ds:[ecx+1C] ; |
004262FA |. 6A 12 push 12 ; |Message = WM_QUIT
004262FC |. 52 push edx ; |hWnd
004262FD |. FFD6 call esi ; \PostMessageA
004262FF |. A1 E83F4800 mov eax,dword ptr ds:[483FE8]
00426304 |. 6A 00 push 0 ; /lParam = 0
00426306 |. 6A 00 push 0 ; |wParam = 0
00426308 |. 6A 12 push 12 ; |Message = WM_QUIT
0042630A |. 8B88 74030000 mov ecx,dword ptr ds:[eax+374] ; |
00426310 |. 51 push ecx ; |hWnd
00426311 |. FFD6 call esi ; \PostMessageA
00426313 |. 8D4C24 20 lea ecx,dword ptr ss:[esp+20]
00426317 |. C74424 18 FFFFFFF>mov dword ptr ss:[esp+18],-1
0042631F |. E8 568B0200 call MultiDic.0044EE7A
00426324 |. 33C0 xor eax,eax
00426326 |. 8B4C24 10 mov ecx,dword ptr ss:[esp+10]
0042632A |. 64:890D 00000000 mov dword ptr fs:[0],ecx
00426331 |. 5E pop esi
00426332 |. 83C4 18 add esp,18
00426335 |. C2 0800 retn 8
第二处
00426F4A |. E8 FBDA0000 call <jmp.&UniteDicSearch.CDicApi::UniteDic_SearchEx>
00426F4F |. 83F8 FF cmp eax,-1
00426F52 |. 74 19 je short MultiDic.00426F6D
00426F54 |. 8B7424 28 mov esi,dword ptr ss:[esp+28]
00426F58 |. 8D5424 2C lea edx,dword ptr ss:[esp+2C]
00426F5C |. 52 push edx
00426F5D |. 8BCE mov ecx,esi
00426F5F |. E8 8B7C0200 call MultiDic.0044EBEF
00426F64 |. 895C24 0C mov dword ptr ss:[esp+C],ebx
00426F68 |. E9 CD000000 jmp MultiDic.0042703A
00426F6D |> 8B46 3C mov eax,dword ptr ds:[esi+3C]
00426F70 |. 8B4E 10 mov ecx,dword ptr ds:[esi+10]
00426F73 |. 50 push eax
00426F74 |. 51 push ecx
00426F75 |. 51 push ecx
00426F76 |. 8D5424 38 lea edx,dword ptr ss:[esp+38]
00426F7A |. 8BCC mov ecx,esp
00426F7C |. 896424 20 mov dword ptr ss:[esp+20],esp
00426F80 |. 52 push edx
00426F81 |. E8 697C0200 call MultiDic.0044EBEF
00426F86 |. 8D4424 14 lea eax,dword ptr ss:[esp+14] ; |
00426F8A |. 8D4E 14 lea ecx,dword ptr ds:[esi+14] ; |
00426F8D |. 50 push eax ; |Arg1
00426F8E |. E8 5DA70000 call MultiDic.004316F0 ; \MultiDic.004316F0
00426F93 |. 8B4C24 08 mov ecx,dword ptr ss:[esp+8]
00426F97 |. C64424 20 02 mov byte ptr ss:[esp+20],2
00426F9C |. 51 push ecx
00426F9D |. E8 1A5D0100 call MultiDic.0043CCBC
00426FA2 |. 83C4 04 add esp,4
00426FA5 |. 3D 19F13101 cmp eax,131F119
00426FAA |. 75 6D jnz short MultiDic.00427019
00426FAC |. 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
00426FB2 |. 6A 00 push 0
00426FB4 |. E8 F1B70200 call MultiDic.004527AA
00426FB9 |. 8B15 E83F4800 mov edx,dword ptr ds:[483FE8]
00426FBF |. 6A 00 push 0
00426FC1 |. 8D8A 58030000 lea ecx,dword ptr ds:[edx+358]
00426FC7 |. E8 DEB70200 call MultiDic.004527AA
00426FCC |. 68 38E00000 push 0E038 ; /Arg1 = 0000E038
00426FD1 |. B9 7C404800 mov ecx,MultiDic.0048407C ; |
00426FD6 |. E8 E536FFFF call MultiDic.0041A6C0 ; \MultiDic.0041A6C0
00426FDB |. A1 E83F4800 mov eax,dword ptr ds:[483FE8]
00426FE0 |. 8B35 8C864600 mov esi,dword ptr ds:[<&USER32.PostMessageA>] ; USER32.PostMessageA
00426FE6 |. 6A 00 push 0 ; /lParam = 0
00426FE8 |. 6A 00 push 0 ; |wParam = 0
00426FEA |. 8B48 1C mov ecx,dword ptr ds:[eax+1C] ; |
00426FED |. 6A 12 push 12 ; |Message = WM_QUIT
00426FEF |. 51 push ecx ; |hWnd
00426FF0 |. FFD6 call esi ; \PostMessageA
00426FF2 |. 8B15 E83F4800 mov edx,dword ptr ds:[483FE8]
00426FF8 |. 6A 00 push 0 ; /lParam = 0
00426FFA |. 6A 00 push 0 ; |wParam = 0
00426FFC |. 6A 12 push 12 ; |Message = WM_QUIT
00426FFE |. 8B82 74030000 mov eax,dword ptr ds:[edx+374] ; |
00427004 |. 50 push eax ; |hWnd
00427005 |. FFD6 call esi ; \PostMessageA
00427007 |. 8B7424 28 mov esi,dword ptr ss:[esp+28]
0042700B |. 68 883F4800 push MultiDic.00483F88
00427010 |. 8BCE mov ecx,esi
00427012 |. E8 D17E0200 call MultiDic.0044EEE8
00427017 |. EB 10 jmp short MultiDic.00427029
00427019 |> 8B7424 28 mov esi,dword ptr ss:[esp+28]
0042701D |. 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
00427021 |. 51 push ecx
00427022 |. 8BCE mov ecx,esi
00427024 |. E8 C67B0200 call MultiDic.0044EBEF
00427029 |> 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
0042702D |. 895C24 0C mov dword ptr ss:[esp+C],ebx
00427031 |. 885C24 20 mov byte ptr ss:[esp+20],bl
00427035 |. E8 407E0200 call MultiDic.0044EE7A
0042703A |> 8D4C24 2C lea ecx,dword ptr ss:[esp+2C]
0042703E |. C64424 20 00 mov byte ptr ss:[esp+20],0
00427043 |. E8 327E0200 call MultiDic.0044EE7A
00427048 |. 8B4C24 18 mov ecx,dword ptr ss:[esp+18]
0042704C |. 8BC6 mov eax,esi
0042704E |. 5E pop esi
0042704F |. 64:890D 00000000 mov dword ptr fs:[0],ecx
00427056 |. 5B pop ebx
00427057 |. 83C4 1C add esp,1C
0042705A \. C2 0800 retn 8
第三处
004317A4 |. E8 07330000 call <jmp.&CWordAnalysisDll.CWordRestore::GetFirstWord>
004317A9 |. 50 push eax
004317AA |. 8D4C24 30 lea ecx,dword ptr ss:[esp+30]
004317AE |. E8 35D70100 call MultiDic.0044EEE8
004317B3 |. 8B4424 2C mov eax,dword ptr ss:[esp+2C]
004317B7 |. C64424 18 03 mov byte ptr ss:[esp+18],3
004317BC |. 50 push eax
004317BD |. E8 FAB40000 call MultiDic.0043CCBC
004317C2 |. 83C4 04 add esp,4
004317C5 |. 3D 19F13101 cmp eax,131F119
004317CA |. 75 6E jnz short MultiDic.0043183A
004317CC |. 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
004317D2 |. 6A 00 push 0
004317D4 |. E8 D10F0200 call MultiDic.004527AA
004317D9 |. 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
004317DF |. 6A 00 push 0
004317E1 |. 81C1 58030000 add ecx,358
004317E7 |. E8 BE0F0200 call MultiDic.004527AA
004317EC |. 68 38E00000 push 0E038 ; /Arg1 = 0000E038
004317F1 |. B9 7C404800 mov ecx,MultiDic.0048407C ; |
004317F6 |. E8 C58EFEFF call MultiDic.0041A6C0 ; \MultiDic.0041A6C0
004317FB |. 8B15 E83F4800 mov edx,dword ptr ds:[483FE8]
00431801 |. 8B35 8C864600 mov esi,dword ptr ds:[<&USER32.PostMessageA>] ; USER32.PostMessageA
00431807 |. 6A 00 push 0 ; /lParam = 0
00431809 |. 6A 00 push 0 ; |wParam = 0
0043180B |. 8B42 1C mov eax,dword ptr ds:[edx+1C] ; |
0043180E |. 6A 12 push 12 ; |Message = WM_QUIT
00431810 |. 50 push eax ; |hWnd
00431811 |. FFD6 call esi ; \PostMessageA
00431813 |. 8B0D E83F4800 mov ecx,dword ptr ds:[483FE8]
00431819 |. 6A 00 push 0 ; /lParam = 0
0043181B |. 6A 00 push 0 ; |wParam = 0
0043181D |. 6A 12 push 12 ; |Message = WM_QUIT
0043181F |. 8B91 74030000 mov edx,dword ptr ds:[ecx+374] ; |
00431825 |. 52 push edx ; |hWnd
00431826 |. FFD6 call esi ; \PostMessageA
00431828 |. 8B7424 20 mov esi,dword ptr ss:[esp+20]
0043182C |. 68 883F4800 push MultiDic.00483F88
00431831 |. 8BCE mov ecx,esi
00431833 |. E8 B0D60100 call MultiDic.0044EEE8
00431838 |. EB 1F jmp short MultiDic.00431859
0043183A |> 8D4424 2C lea eax,dword ptr ss:[esp+2C]
0043183E |. B9 FC404800 mov ecx,MultiDic.004840FC
00431843 |. 50 push eax
00431844 |. E8 6AD70100 call MultiDic.0044EFB3
00431849 |. 8B7424 20 mov esi,dword ptr ss:[esp+20]
0043184D |. 68 FC404800 push MultiDic.004840FC
00431852 |. 8BCE mov ecx,esi
00431854 |. E8 96D30100 call MultiDic.0044EBEF
00431859 |> 895C24 08 mov dword ptr ss:[esp+8],ebx
0043185D |. 885C24 18 mov byte ptr ss:[esp+18],bl
00431861 |. 8D4C24 2C lea ecx,dword ptr ss:[esp+2C]
00431865 |> E8 10D60100 call MultiDic.0044EE7A
0043186A |> 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
0043186E |. C64424 18 00 mov byte ptr ss:[esp+18],0
00431873 |. E8 02D60100 call MultiDic.0044EE7A
00431878 |. 8B4C24 10 mov ecx,dword ptr ss:[esp+10]
0043187C |. 8BC6 mov eax,esi
0043187E |. 5E pop esi
0043187F |. 5B pop ebx
00431880 |. 64:890D 00000000 mov dword ptr fs:[0],ecx
00431887 |. 83C4 14 add esp,14
0043188A \. C2 1000 retn 10
包括上面调试中的一共4处
那么使用刚才说的分别设置
第一处 004262B7 修改为 jmp short MultiDic.00426338
第二处 00426FAA 修改为 jmp short MultiDic.00427019
第三处 004317CA 修改为 jmp short MultiDic.0043183A
第四处 00427102 修改为 jmp MultiDic.004271E6
通过对程序的分析 可以看出 使用了时钟来判断加密狗,使用了查找单词判断加密狗,使用了在访问第一个单词来判断加密狗
这样主程序算是破解完成
========================
继续调试发现出现了英文版的提示信息在查询的时候
那么在
UniteDicSearch.dll
CWordAnalysisDll.dll
下断Bp messageboxa
找到相应位置
CWordAnalysisDll.dll中
0039765B |. /75 1F jnz short CWordAna.0039767C
0039765D |. |6A 30 push 30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
0039765F |. |68 94593A00 push CWordAna.003A5994 ; |Title = "System Information"
00397664 |. |68 74593A00 push CWordAna.003A5974 ; |Text = "#E007 Please Check Soft Dog!"
00397669 |. |50 push eax ; |hOwner
0039766A |. |A2 72593A00 mov byte ptr ds:[3A5972],al ; |
0039766F |. |FF15 40313A00 call dword ptr ds:[<&USER32.MessageBoxA>] ; \MessageBoxA
00397675 |. |6A 00 push 0
00397677 |. |E8 7E2D0000 call CWordAna.0039A3FA
0039767C |> \8B4424 14 mov eax,dword ptr ss:[esp+14]
修改 0039765B 为 jmp short CWordAna.0039767C
UniteDicSearch.dll中
100018BD /75 1F jnz short UniteDic.100018DE
100018BF |6A 30 push 30
100018C1 |68 64F00110 push UniteDic.1001F064 ; ASCII "System InformationSystem"
100018C6 |68 44F00110 push UniteDic.1001F044 ; ASCII "#E007 Please Check Soft Dog!"
100018CB |50 push eax
100018CC |A2 40F00110 mov byte ptr ds:[1001F040],al
100018D1 |FF15 38A10110 call dword ptr ds:[<&USER32.MessageBoxA>] ; USER32.MessageBoxA
100018D7 |6A 00 push 0
100018D9 |E8 77D90000 call UniteDic.1000F255
100018DE \8B7424 18 mov esi,dword ptr ss:[esp+18]
修改 100018BD 为 jmp short UniteDic.100018DE
至此,打完收工,调试不再出现该类加密狗提示问题. 翠花....上酸菜.