這是一個資料程式庫錄入系統,用的是某品牌的加密狗。PEID偵測為Borland Delphi 6.0 - 7.0,無殼。試用軟體,即現輔助說明:加密狗讀取錯誤,請與軟體供應商聯繫確認加密狗合法性!很牛乂!點擊確定,又即現一個輔助說明:未找到加密狗,目前為試用狀態。OD加載軟體,找到第個輔助說明處:
01FD4B50 /$ 83C4 DC add esp,-0x24
01FD4B53 . 33C0 xor eax,eax
01FD4B55 . A3 08E75100 mov dword ptr ds:[0x51E708],eax
01FD4B5A . E8 E1A10000 call CS.01E94D40
01FD4B5F . 85C0 test eax,eax
01FD4B61 . 74 17 je short CS.01FD4B7A
01FD4B63 . 6A 10 push 0x10 ; /Style = MB_OK MB_ICONHAND MB_APPLMODAL
01FD4B65 . 68 FCFB4D00 push CS.01FD4BFC ; Title = "錯誤"
01FD4B6A . 68 04FC4D00 push CS.01FD4C04 ; Text = "加密狗讀取錯誤,請與供應商聯繫確認加密狗合法性!"
01FD4B6F . 6A 00 push 0x0 ; hOwner = NULL
01FD4B71 . E8 C278F2FF call
往上看,01FD4B5A 這一個CALL那肯定是讀取加密狗了,跟入:
01E94D40 $ B8 A4A55100 mov eax,CS.0051A5A4
01E94D45 . 52 push edx
01E94D46 . 51 push ecx
01E94D47 . BA 44944E00 mov edx,CS.01E94444
01E94D4C . 8910 mov dword ptr ds:[eax],edx
01E94D4E . 51 push ecx
01E94D4F . 31C9 xor ecx,ecx
01E94D51 . E3 01 jecxz short CS.01E94D54
01E94D53 DD db DD
01E94D54 . 59 pop ecx
01E94D55 . C740 08 01000>mov dword ptr ds:[eax+0x8],0x1
01E94D5C . B9 01994E00 mov ecx,CS.01E94901
01E94D61 . 8948 04 mov dword ptr ds:[eax+0x4],ecx
01E94D64 . EB 01 jmp short CS.01E94D67
01E94D66 FF db FF
01E94D67 > FF70 08 push dword ptr ds:[eax+0x8]
01E94D6A . FF70 04 push dword ptr ds:[eax+0x4]
01E94D6D . FF30 push dword ptr ds:[eax]
01E94D6F . E8 54030000 call CS.004EA0C8
01E94D74 . 83C4 0C add esp,0xC
01E94D77 . 51 push ecx
01E94D78 . 31C9 xor ecx,ecx
01E94D7A . E3 01 jecxz short CS.01E94D7D
01E94D7C 8A db 8A
01E94D7D . 59 pop ecx
01E94D7E . 59 pop ecx
01E94D7F . 5A pop edx
01E94D80 . C3 retn
由於真正與加密狗進行資料交換的程式碼肯定是非常多的花指令,為了偷懶,我們就直接在此處PATH程式碼,所以此處為加密狗破解的關鍵點之一。
繼續尋找:
01E94D81 $ 52 push edx
01E94D82 . 51 push ecx
01E94D83 . E8 8D000000 call CS.01E94E15 //讀取加密狗中的資料
01E94D88 . 85C0 test eax,eax
01E94D8A . 75 4A jnz short CS.01E94DD6 //加密狗破解關鍵點二
01E94D8C . B8 44944E00 mov eax,CS.01E94444
01E94D91 . A3 A4A55100 mov dword ptr ds:[0x51A5A4],eax
01E94D96 . 51 push ecx
01E94D97 . 31C9 xor ecx,ecx
01E94D99 . E3 01 jecxz short CS.01E94D9C
01E94D9B . 3F aas
01E94D9C > 59 pop ecx
01E94D9D . C705 ACA55100>mov dword ptr ds:[0x51A5AC],0x2
01E94DA7 . BA 01994E00 mov edx,CS.01E94901
01E94DAC . 8915 A8A55100 mov dword ptr ds:[0x51A5A8],edx
01E94DB2 . EB 01 jmp short CS.01E94DB5
01E94DB4 EA db EA
01E94DB5 > FF35 ACA55100 push dword ptr ds:[0x51A5AC]
01E94DBB . FF35 A8A55100 push dword ptr ds:[0x51A5A8] ; CS.01E94901
01E94DC1 . FF35 A4A55100 push dword ptr ds:[0x51A5A4] ; CS.01E94444
01E94DC7 . E8 FC020000 call CS.004EA0C8 //如果前面讀取加密狗資料不規則,則再次偵測加密狗是否存在,
01E94DCC . 83C4 0C add esp,0xC
01E94DCF . 51 push ecx
01E94DD0 . 31C9 xor ecx,ecx
01E94DD2 . E3 01 jecxz short CS.01E94DD5
01E94DD4 7E db 7E ; CHAR '~'
01E94DD5 . 59 pop ecx
01E94DD6 > 59 pop ecx
01E94DD7 . 5A pop edx
01E94DD8 . C3 retn
01204D54 /$ 53 push ebx
01204D55 . 56 push esi
01204D56 . 51 push ecx
01204D57 . 89CE mov esi,ecx
01204D59 . C1EE 02 shr esi,0x2
01204D5C . 74 26 je short CS.01204D84
01204D5E > 8B08 /mov ecx,dword ptr ds:[eax]
01204D60 . 8B1A mov ebx,dword ptr ds:[edx]
01204D62 . 39D9 cmp ecx,ebx
01204D64 . 75 45 jnz short CS.01204DAB
01204D66 . 4E dec esi
01204D67 . 74 15 je short CS.01204D7E
01204D69 . 8B48 04 mov ecx,dword ptr ds:[eax+0x4]
01204D6C . 8B5A 04 mov ebx,dword ptr ds:[edx+0x4]
01204D6F . 39D9 cmp ecx,ebx
01204D71 . 75 38 jnz short CS.01204DAB
01204D73 . 83C0 08 add eax,0x8
01204D76 . 83C2 08 add edx,0x8
01204D79 . 4E dec esi
01204D7A .^ 75 E2 \jnz short CS.01204D5E
01204D7C . EB 06 jmp short CS.01204D84
01204D7E > 83C0 04 add eax,0x4
01204D81 . 83C2 04 add edx,0x4
01204D84 > 5E pop esi
01204D85 . 83E6 03 and esi,0x3
01204D88 . 74 36 je short CS.01204DC0
01204D8A . 8A08 mov cl,byte ptr ds:[eax]
01204D8C . 3A0A cmp cl,byte ptr ds:[edx]
01204D8E . 75 30 jnz short CS.01204DC0
01204D90 . 4E dec esi
01204D91 . 74 13 je short CS.01204DA6
01204D93 . 8A48 01 mov cl,byte ptr ds:[eax+0x1]
01204D96 . 3A4A 01 cmp cl,byte ptr ds:[edx+0x1]
01204D99 . 75 25 jnz short CS.01204DC0
01204D9B . 4E dec esi
01204D9C . 74 08 je short CS.01204DA6
01204D9E . 8A48 02 mov cl,byte ptr ds:[eax+0x2]
01204DA1 . 3A4A 02 cmp cl,byte ptr ds:[edx+0x2]
01204DA4 . 75 1A jnz short CS.01204DC0
01204DA6 > 31C0 xor eax,eax
01204DA8 . 5E pop esi
01204DA9 . 5B pop ebx
01204DAA . C3 retn
此函數驗證從加密狗中讀取的資料是否正常,加密狗破解第三處關鍵點。
繼續尋找:
01B649E5 . 8945 E4 mov [local.7],eax
01B649E8 . 8B45 FC mov eax,[local.1]
01B649EB . E8 38EEFFFF call CS.0046A828 //再一次讀取加密狗資料
01B649F0 . 84C0 test al,al
01B649F2 . 74 06 je short CS.01B64AFA//加密狗破解關鍵點四
01B649F4 . 81CB 00001000 or ebx,0x100000
01B649FA > 33C9 xor ecx,ecx
01B649FC . 55 push ebp
01B649FD . 68 81BA4600 push CS.01B64A81
01B64A02 . 64:FF31 push dword ptr fs:[ecx]
01B64A05 . 64:8921 mov dword ptr fs:[ecx],esp
01B64A08 . 53 push ebx ; /Style
01B64A09 . 57 push edi ; Title
01B64A0A . 56 push esi ; Text
01B64A0B . 8B45 FC mov eax,[local.1] ;
01B64A0E . 8B40 30 mov eax,dword ptr ds:[eax+0x30] ;
01B64A11 . 50 push eax ; hOwner
01B64A12 . E8 21BAF9FF call
經過數次的PATCH程式碼與驗證,錄入終於可以正常使用了,至此,加密狗破解完美成功!
01E94E99 . B8 01994E00 mov eax,CS.01E94901
01E94E9E . 8943 04 mov dword ptr ds:[ebx+0x4],eax
01E94EA1 . FF73 08 push dword ptr ds:[ebx+0x8]
01E94EA4 . 50 push eax
01E94EA5 . FF33 push dword ptr ds:[ebx]
01E94EA7 . E8 1C020000 call CS.004EA0C8 //再一次讀取加密狗
01E94EAC . 83C4 0C add esp,0xC
01E94EAF . 85C0 test eax,eax
01E94EB1 . 75 07 jnz short CS.01E94EBA //加密狗破解關鍵點五
01E94EB3 . C605 E96D5100>mov byte ptr ds:[0x516DE9],0x2
01E94EBA > 59 pop ecx
01E94EBB . 5A pop edx
01E94EBC . 5B pop ebx
01E94EBD . C3 retn
(編輯:加密狗)