Gifline破解實錄 (4千字)

看雪資料發表於2001-08-05

Gifline破解實錄

從華軍軟體園裡拽下來一個將文字轉成GIF的軟體,寫一下如何破解它的。

工具:TRW2000 1.22  W32DASM 8.93    REGMON95
適用物件:入門級
破解者:D-X-C  E-MAIL:ZHIDA8721@SINA.COM
下載地址:http://www.newhua.com.cn/down/gifline.zip

開始幹活了,先用W32DASM調入GIFLINE,查詢字串“is incorrect”,如下:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045C51D(C)
|
:0045C558 0FAF7DF0                imul edi, dword ptr [ebp-10]
:0045C55C 8D55E4                  lea edx, dword ptr [ebp-1C]
:0045C55F 8BC7                    mov eax, edi
:0045C561 E852A7FAFF              call 00406CB8
:0045C566 8B4DE4                  mov ecx, dword ptr [ebp-1C]
:0045C569 8D45E8                  lea eax, dword ptr [ebp-18]

* Possible StringData Ref from Code Obj ->"dpd-"  *後來發現這原來是註冊碼的前4位固定值
                                  |
:0045C56C BACCC64500              mov edx, 0045C6CC
:0045C571 E8EA75FAFF              call 00403B60
:0045C576 8B55E8                  mov edx, dword ptr [ebp-18]
:0045C579 8B45F8                  mov eax, dword ptr [ebp-08]
:0045C57C E8A376FAFF              call 00403C24 *要害CALL,判斷註冊碼
:0045C581 0F8580000000            jne 0045C607  *關鍵跳轉,改成je就OK了
。。。。。。
。。。。。。                            *省略的這部分後來總結出是註冊成功後向登錄檔裡建兩個鍵值
。。。。。。
* Possible StringData Ref from Code Obj ->"Sorry, This Registration Code "  /跳到這就沒戲了
->"is incorrect. Please try again " /往前看,看哪可以跳過此處
                            ->"by copying the code from your "
                            ->"License documentation. If problems "
                            ->"persist please contact us via: "
                            ->"dinther@geocities.com"
                                  |
:0045C607 B8FCC64500              mov eax, 0045C6FC
:0045C60C E847B1FDFF              call 00437758

還是不過癮,再破破註冊碼。用TRW2000載入,點REGISTER後,要求填入E-MAIL和REGISTRATION CODE,填:enjoy@haha (只要有個“@”就可以) 和 1234567890 (真正註冊碼的長度由你的E-MAIL算出,長度不固定)
下命令 bpx 0167:0045c57c (我的機器是這句,不知道你的,要不是,就自己追追)就是那句 call 00403c24
找到後按F8 追入
:00403C24 53                      push ebx
:00403C25 56                      push esi
:00403C26 57                      push edi
:00403C27 89C6                    mov esi, eax
:00403C29 89D7                    mov edi, edx
:00403C2B 39D0                    cmp eax, edx
:00403C2D 0F848F000000            je 00403CC2
:00403C33 85F6                    test esi, esi
:00403C35 7468                    je 00403C9F
:00403C37 85FF                    test edi, edi
:00403C39 746B                    je 00403CA6
:00403C3B 8B46FC              mov eax, dword ptr [esi-04] *送入假註冊碼的長度 看到EAX=0000000A
:00403C3E 8B57FC              mov edx, dword ptr [edi-04] *送入真註冊碼的長度 看到EDX=0000000B
:00403C41 29D0                    sub eax, edx          你可以回過頭來將假註冊碼改成11位,那個問,你咋知道是送註冊碼的長度?試的唄
。。。。。。
。。。。。。
。。。。。。
以下這一段就是判斷註冊碼的,咋知道?這可是關鍵地方啦,因為執行完00403C4D這句,看到ECX=34333231,什麼意思?就是1234的ASCII碼的倒序!你怎麼想到的?因為我先前用88888888當註冊碼,發現ECX=38383838,太顯眼了!為什麼又要用1234567890當註冊碼?不這樣咋發現它是倒序存放的。
:00403C4D 8B0E                  mov ecx, dword ptr [esi] *假註冊碼的前4位,ECX=34333231
:00403C4F 8B1F                  mov ebx, dword ptr [edi] *真註冊碼的前4位,EBX=2D647064
即dpd- 的ASCII碼的倒序
:00403C51 39D9                  cmp ecx, ebx          *第一次比較
:00403C53 7558                  jnz 00403CAD      *不能讓它跳轉,下指令 r fl z=1 改變零標誌
:00403C55 4A                  dec edx
:00403C56 7415                  je 00403C6D        *判斷是否檢查完畢
:00403C58 8B4E04              mov ecx, dword ptr [esi+04] *假註冊碼接下來的4位,ECX=38373635
:00403C5B 8B5F04              mov ebx, dword ptr [edi+04] *真註冊碼接下來的4位,EBX=31343036
:00403C5E 39D9                cmp ecx, ebx              *第二次比較
:00403C60 754B                jnz 00403CAD    *不能讓它跳轉,下指令 r fl z=1 改變零標誌
:00403C62 83C608                  add esi, 00000008
:00403C65 83C708                  add edi, 00000008
:00403C68 4A                      dec edx
:00403C69 75E2                    jne 00403C4D  *由於真註冊碼的長度是11位,所以要跳回00403C4D那句再判斷,我就不寫了,應該能懂了吧。最後的註冊碼:dpd-6041164
:00403C6B EB06                  jmp 00403C73

整理一下:E-MAIL:enjoy@haha  CODE: dpd-6041164
該完了吧?還羅嗦什麼?再說一句。前面不是說過註冊成功後要往登錄檔裡寫東東嗎?就是下面:
[HKEY_CURRENT_USER\Software\setenil]
"date"=hex:00,00,00,80,40,92,46,41
"name"= enjoy@haha
這個你用REGMON95可以監測到,其實就是date那句最重要,無論是什麼樣的註冊碼最終都得到這句。
好了,是不是說的很詳細?給出了三種註冊方式。初學者可以好好看看了。

相關文章