軟體管理專家 v1.22a 之完美破解

看雪資料發表於2004-06-30

【軟體名稱】:軟體管理專家 v1.22a
【軟體限制】:功能限制
【保護方式】:無
【破解工具】: OllyDbg
【程式語言】: Delphi 6.0 - 7.0
【下載地址】:http://www3.skycn.com/soft/4880.html

【軟體簡介】:下載檔案的管理有時候是一件挺麻煩的事,特別是象筆者這樣的網蟲,每天都要下載大量的檔案,而且一股腦的放在download目錄下,但是時間一長的話,看著這些壓縮包,自己也搞不清那個檔案是幹什麼用的了。本軟體就是用來管理這些下載檔案的,你只要選中一個軟體,將它拖拽到FlashSoft的視窗中,填寫一些備忘的資訊,就把這個下載軟體分門別類地放到檔案盒中了,下次需要的話,不用去找,直接在軟體中呼叫就ok了,是不是挺方便的?
―――――――――――――――――――――――――――――――――
【破解過程】:

軟體目錄下有個dfbox.ini檔案,裡面有
UserName=aqtata
UserCode=123456

實時註冊的地方有點不一樣,那就從啟動時的驗證入手,OD載入

在GetPrivateProfileStringA斷,注意堆疊視窗,直到出現

0012F554   00488851  /CALL 到 GetPrivateProfileStringA 來自 DfBox.0048884C
0012F558   004913B4  |Section = "UserInfo"
0012F55C   004913A0  |Key = "UserName"
0012F560   0049138C  |Default = "No register"
0012F564   0012F57C  |ReturnBuffer = 0012F57C
0012F568   00000800  |BufSize = 800 (2048.)
0012F56C   00DA5370  \IniFileName = "D:\Flash Soft Manager\dfbox.ini"

好了,回到程式領空

0048884B  |. 50             PUSH EAX                                 ; |Section
0048884C  |. E8 0BEBF7FF    CALL <JMP.&kernel32.GetPrivateProfileStr>; \GetPrivateProfileStringA
00488851  |. 8BC8           MOV ECX,EAX   ====>停在這

一直F8

004EB28E  |. 8B45 D4        MOV EAX,DWORD PTR SS:[EBP-2C]
004EB291  |. 5A             POP EDX
004EB292  |. E8 655AFAFF    CALL DfBox.00490CFC    ====>這裡跟進去
004EB297  |. 84C0           TEST AL,AL
004EB299  |. 74 07          JE SHORT DfBox.004EB2A2
004EB29B  |. C683 2C050000 >MOV BYTE PTR DS:[EBX+52C],1
004EB2A2  |> 80BB 2C050000 >CMP BYTE PTR DS:[EBX+52C],1

跟進00490CFC

00490CFC  /$ 55             PUSH EBP
00490CFD  |. 8BEC           MOV EBP,ESP
00490CFF  |. 83C4 F4        ADD ESP,-0C
00490D02  |. 53             PUSH EBX
00490D03  |. 33C9           XOR ECX,ECX
00490D05  |. 894D F4        MOV DWORD PTR SS:[EBP-C],ECX
00490D08  |. 8955 F8        MOV DWORD PTR SS:[EBP-8],EDX
00490D0B  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
00490D0E  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00490D11  |. E8 5241F7FF    CALL DfBox.00404E68    ====>測試是否有使用者名稱
00490D16  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
00490D19  |. E8 4A41F7FF    CALL DfBox.00404E68    ====>測試是否有註冊碼
00490D1E  |. 33C0           XOR EAX,EAX
00490D20  |. 55             PUSH EBP
00490D21  |. 68 780D4900    PUSH DfBox.00490D78
00490D26  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
00490D29  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
00490D2C  |. 8D55 F4        LEA EDX,DWORD PTR SS:[EBP-C]
00490D2F  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00490D32  |. E8 61000000    CALL DfBox.00490D98     ====>演算法call
00490D37  |. 8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C]    ====>真碼
00490D3A  |. 8B55 F8        MOV EDX,DWORD PTR SS:[EBP-8]    ====>假碼
00490D3D  |. E8 8240F7FF    CALL DfBox.00404DC4          ====>比較
00490D42  |. 75 04          JNZ SHORT DfBox.00490D48     ====>不對則跳,爆破點
00490D44  |. B3 01          MOV BL,1
00490D46  |. EB 02          JMP SHORT DfBox.00490D4A
00490D48  |> 33DB           XOR EBX,EBX
00490D4A  |> 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
00490D4D  |. B8 900D4900    MOV EAX,DfBox.00490D90           ;  ASCII "ttdown"
00490D52  |. E8 6542F7FF    CALL DfBox.00404FBC
00490D57  |. 85C0           TEST EAX,EAX
00490D59  |. 74 02          JE SHORT DfBox.00490D5D
00490D5B  |. 33DB           XOR EBX,EBX
00490D5D  |> 33C0           XOR EAX,EAX
00490D5F  |. 5A             POP EDX
00490D60  |. 59             POP ECX
00490D61  |. 59             POP ECX
00490D62  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
00490D65  |. 68 7F0D4900    PUSH DfBox.00490D7F
00490D6A  |> 8D45 F4        LEA EAX,DWORD PTR SS:[EBP-C]
00490D6D  |. BA 03000000    MOV EDX,3
00490D72  |. E8 753CF7FF    CALL DfBox.004049EC
00490D77  \. C3             RETN

沒事看了看演算法,發現很簡單,跟進演算法call

00490D98  /$ 55             PUSH EBP
00490D99  |. 8BEC           MOV EBP,ESP
00490D9B  |. 83C4 F8        ADD ESP,-8
00490D9E  |. 53             PUSH EBX
00490D9F  |. 56             PUSH ESI
00490DA0  |. 57             PUSH EDI
00490DA1  |. 8955 F8        MOV DWORD PTR SS:[EBP-8],EDX
00490DA4  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
00490DA7  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00490DAA  |. E8 B940F7FF    CALL DfBox.00404E68
00490DAF  |. 33C0           XOR EAX,EAX
00490DB1  |. 55             PUSH EBP
00490DB2  |. 68 1D0E4900    PUSH DfBox.00490E1D
00490DB7  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
00490DBA  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
00490DBD  |. BB 01000000    MOV EBX,1
00490DC2  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00490DC5  |. E8 B63EF7FF    CALL DfBox.00404C80   ====>使用者名稱長度
00490DCA  |. 8BC8           MOV ECX,EAX    ====>送到ecx
00490DCC  |. 85C9           TEST ECX,ECX   ====>測試長度
00490DCE  |. 7E 1C          JLE SHORT DfBox.00490DEC   ====>跳了就掛了
00490DD0  |. BE 01000000    MOV ESI,1
00490DD5  |> 8B45 FC        /MOV EAX,DWORD PTR SS:[EBP-4]   ====>使用者名稱
00490DD8  |. 0FB67C30 FF    |MOVZX EDI,BYTE PTR DS:[EAX+ESI-1]   ====>依次取每個字元ascii值
00490DDD  |. 8BC3           |MOV EAX,EBX   ====>上次得出的結果送eax
00490DDF  |. 99             |CDQ
00490DE0  |. 33C2           |XOR EAX,EDX
00490DE2  |. 2BC2           |SUB EAX,EDX
00490DE4  |. F7EF           |IMUL EDI   ====>ascii值乘到eax
00490DE6  |. 8BD8           |MOV EBX,EAX   ====>結果送到ebx
00490DE8  |. 46             |INC ESI
00490DE9  |. 49             |DEC ECX
00490DEA  |.^75 E9          \JNZ SHORT DfBox.00490DD5
00490DEC  |> 8BC3           MOV EAX,EBX   ====>最後結果送到eax
00490DEE  |. 99             CDQ
00490DEF  |. 33C2           XOR EAX,EDX
00490DF1  |. 2BC2           SUB EAX,EDX
00490DF3  |. 83C0 64        ADD EAX,64    ====>結果再加上100
00490DF6  |. 99             CDQ
00490DF7  |. 33C2           XOR EAX,EDX
00490DF9  |. 2BC2           SUB EAX,EDX
00490DFB  |. 8BD8           MOV EBX,EAX
00490DFD  |. 8B55 F8        MOV EDX,DWORD PTR SS:[EBP-8]
00490E00  |. 8BC3           MOV EAX,EBX
00490E02  |. E8 AD86F7FF    CALL DfBox.004094B4
00490E07  |. 33C0           XOR EAX,EAX
00490E09  |. 5A             POP EDX
00490E0A  |. 59             POP ECX
00490E0B  |. 59             POP ECX
00490E0C  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
00490E0F  |. 68 240E4900    PUSH DfBox.00490E24
00490E14  |> 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
00490E17  |. E8 AC3BF7FF    CALL DfBox.004049C8
00490E1C  \. C3             RETN
00490E1D   .^E9 EE34F7FF    JMP DfBox.00404310
00490E22   .^EB F0          JMP SHORT DfBox.00490E14
00490E24   . 5F             POP EDI
00490E25   . 5E             POP ESI
00490E26   . 5B             POP EBX
00490E27   . 59             POP ECX
00490E28   . 59             POP ECX
00490E29   . 5D             POP EBP
00490E2A   . C3             RETN

這軟體註冊的方式不太一樣,花了不少時間,我老是在實時比較註冊碼的地方兜圈子

―――――――――――――――――――――――――――――――――
【暴 破】:

00490D42  |. 75 04          JNZ SHORT DfBox.00490D48     ====>改成nop(0x90142h)
―――――――――――――――――――――――――――――――――
【註冊碼】:

Name:aqtata
Code:470414836
―――――――――――――――――――――――――――――――――
【序號產生器】:

演算法簡單了,難的也搞不了,呵呵,下面是vb.net序號產生器(控制檯程式)

Sub Main()
        System.Console.WriteLine("軟體管理專家 v1.22a 算號器")
        Dim yhm As String
        System.Console.WriteLine("請輸入使用者名稱:")
        yhm = Console.ReadLine
        Dim i As Integer
        Dim a, b, d As Double
        b = 1
        For i = 1 To Len(yhm)
            d = Asc(Mid(yhm, i, 1))
            If Len(Hex(b)) > 8 Then b = "&H" & Right(Hex(b), 8)
            a = b
            a = a * d
            If Len(Hex(a)) > 8 Then a = "&H" & Right(Hex(a), 8)
            b = a
        Next
        System.Console.WriteLine("您的註冊碼是:" & b + 100)
        Console.ReadLine()
    End Sub

―――――――――――――――――――――――――――――――――


相關文章