風之紋章(Proc)破解實戰 我的第一篇水文 (9千字)

看雪資料發表於2002-03-12

風之紋章(Proc)破解實戰

Write by wakeme


軟體名稱:風之紋章(Proc)
版    本:V2.02 Build 275 原檔案大小 281K,脫殼後700K左右。
簡    介:
          一個比較好用的小工具,可以用來殺程式、監控程式、定時備份等,駐留在工作列上。

作    者:Wakeme
等    級:中級 (自己定的 :))
破解日期:2002年3月11日
破解工具:Trw2000 1.22 WDSM 89。3  衝擊波2000  、PEid.
破解目的:學習追註冊碼

說  明:

        本文目的在與學習破解技術,所有內容是在我的軟體破解記錄上整理出來的,只作技術交流。如若有紕漏,請各位多指教!


1、執行PEid ,將Proc.exe 拖到 PEid介面上 ,顯示出 ASPack 2.000 -> Alexey Solodovnikov壓縮。

2、啟用衝擊波,點選Track ,然後執行Proc.exe,顯示入口 0048B900 。

3、啟動trw 2000 ,透過Browse 找到檔案,load !
  中斷後下命令bpx 48b900
              g
    會在程式的入口處停下來,然後下命令 pedump c:\crack\procdump.exe
    就會生成可執行檔案,經測試用makepe 命令也可以,另外用Softice 中的jmp eip ,然後用prodump等工具也可以。Trw2000中生成的可以直接執行,用prodump抓的需要修復PE檔案頭。

4、執行軟體,填入任意註冊碼,報告“註冊失敗”,在看論壇精華的時候總發現別人喜歡暴力破解軟體,其實在我這段時間的經驗中,軟體暴力破解的成功率很低,許多軟體暴力破解後,功能也不完全,可見軟體開發者的加密意識提高了。

5、複製備份後,用WDSM進行反彙編,在字串參考中,找到“註冊失敗”和“註冊成功”的提示。雙擊“註冊成功”和“註冊失敗”分別到:


:0048AF28 8B45F8                  mov eax, dword ptr [ebp-08]
:0048AF2B 8D55FC                  lea edx, dword ptr [ebp-04]
:0048AF2E E831D5F7FF              call 00408464
:0048AF33 8B45FC                  mov eax, dword ptr [ebp-04]

* Possible StringData Ref from Code Obj ->"ph11.126.com"
                                  |
:0048AF36 BA48B04800              mov edx, 0048B048
:0048AF3B E8B88FF7FF              call 00403EF8
:0048AF40 7575                    jne 0048AFB7            跳到註冊失敗的視窗 !!!
:0048AF42 8D55F0                  lea edx, dword ptr [ebp-10]
:0048AF45 8B83D0040000            mov eax, dword ptr [ebx+000004D0]
:0048AF4B E8845CFAFF              call 00430BD4
:0048AF50 8B45F0                  mov eax, dword ptr [ebp-10]
:0048AF53 8D55F4                  lea edx, dword ptr [ebp-0C]
:0048AF56 E809D5F7FF              call 00408464
:0048AF5B 8B45F4                  mov eax, dword ptr [ebp-0C]

* Possible StringData Ref from Code Obj ->"1111-1111-1111-1111"    我最初理解為註冊碼的格式!
                                  |
:0048AF5E BA60B04800              mov edx, 0048B060
:0048AF63 E8908FF7FF              call 00403EF8
:0048AF68 754D                    jne 0048AFB7      跳到註冊失敗的視窗 !!!

* Possible StringData Ref from Code Obj ->"程式管理小工具---ph11.126.com"
                                  |
:0048AF6A BA7CB04800              mov edx, 0048B07C
:0048AF6F 8BC3                    mov eax, ebx
:0048AF71 E88E5CFAFF              call 00430C04
:0048AF76 33D2                    xor edx, edx
:0048AF78 8B83CC040000            mov eax, dword ptr [ebx+000004CC]
:0048AF7E 8B08                    mov ecx, dword ptr [eax]
:0048AF80 FF515C                  call [ecx+5C]
:0048AF83 33D2                    xor edx, edx
:0048AF85 8B83D0040000            mov eax, dword ptr [ebx+000004D0]
:0048AF8B 8B08                    mov ecx, dword ptr [eax]
:0048AF8D FF515C                  call [ecx+5C]
:0048AF90 6A40                    push 00000040

* Possible StringData Ref from Code Obj ->"恭喜您"
                                  |
:0048AF92 B99CB04800              mov ecx, 0048B09C

* Possible StringData Ref from Code Obj ->"註冊成功!"        注意的地方 !!!
                                  |
:0048AF97 BAA4B04800              mov edx, 0048B0A4
:0048AF9C A14CDA4800              mov eax, dword ptr [0048DA4C]
:0048AFA1 8B00                    mov eax, dword ptr [eax]
:0048AFA3 E8F440FCFF              call 0044F09C
:0048AFA8 33D2                    xor edx, edx
:0048AFAA 8B83D4040000            mov eax, dword ptr [ebx+000004D4]
:0048AFB0 8B08                    mov ecx, dword ptr [eax]
:0048AFB2 FF515C                  call [ecx+5C]
:0048AFB5 EB4C                    jmp 0048B003

  * 被一個無條件跳轉或條件跳轉引用, 位置在地址:            注意的地方 !!!
|:0048AF40(C), :0048AF68(C)                      這裡是哪裡 ,有兩個地方會跳到這裡 !!!
|

* Possible StringData Ref from Code Obj ->"程式管理小工具---未註冊"
                                  |
:0048AFB7 BAB8B04800              mov edx, 0048B0B8
:0048AFBC 8BC3                    mov eax, ebx
:0048AFBE E8415CFAFF              call 00430C04
:0048AFC3 B201                    mov dl, 01
:0048AFC5 8B83CC040000            mov eax, dword ptr [ebx+000004CC]
:0048AFCB 8B08                    mov ecx, dword ptr [eax]
:0048AFCD FF515C                  call [ecx+5C]
:0048AFD0 B201                    mov dl, 01
:0048AFD2 8B83D0040000            mov eax, dword ptr [ebx+000004D0]
:0048AFD8 8B08                    mov ecx, dword ptr [eax]
:0048AFDA FF515C                  call [ecx+5C]
:0048AFDD 6A10                    push 00000010

* Possible StringData Ref from Code Obj ->"錯誤"
                                  |
:0048AFDF B9D0B04800              mov ecx, 0048B0D0

* Possible StringData Ref from Code Obj ->"註冊失敗!"      注意的地方 !!!
                                  |
:0048AFE4 BAD8B04800              mov edx, 0048B0D8
:0048AFE9 A14CDA4800              mov eax, dword ptr [0048DA4C]
:0048AFEE 8B00                    mov eax, dword ptr [eax]
:0048AFF0 E8A740FCFF              call 0044F09C
:0048AFF5 8B83CC040000            mov eax, dword ptr [ebx+000004CC]
:0048AFFB 8B10                    mov edx, dword ptr [eax]
:0048AFFD FF92B0000000            call dword ptr [edx+000000B0]

6、下面我們就用TRW2000來追註冊碼:
  在軟體的設定-註冊中添入公司名:wakeme  序列號:1234-1234-1234-1234(格式來源與上面程式碼,其實別的格式、比如12345678也可以)
  在TRW2000中下斷點bpx 40af36 (第一個要跳到未註冊的CALL前面)
  軟體中點註冊、被攔截F10後

D edx 可以看到真正的註冊碼,我們F8跟進CALL

:00403EF8 53                      push ebx
:00403EF9 56                      push esi
:00403EFA 57                      push edi
:00403EFB 89C6                    mov esi, eax
:00403EFD 89D7                    mov edi, edx
:00403EFF 39D0                    cmp eax, edx  上面將我輸入的名字和序列號裝入,這裡關鍵比較,用D命令可以看到真正的註冊名
:00403F01 0F848F000000            je 00403F96
:00403F07 85F6                    test esi, esi
:00403F09 7468                    je 00403F73
:00403F0B 85FF                    test edi, edi
:00403F0D 746B                    je 00403F7A
:00403F0F 8B46FC                  mov eax, dword ptr [esi-04]
:00403F12 8B57FC                  mov edx, dword ptr [edi-04]
:00403F15 29D0                    sub eax, edx
:00403F17 7702                    ja 00403F1B
:00403F19 01C2                    add edx, eax

CALL 返回後執行到這裡:
:0048AF3B E8B88FF7FF              call 00403EF8
:0048AF40 7575                    jne 0048AFB7            跳到註冊失敗的視窗 !!!
:0048AF42 8D55F0                  lea edx, dword ptr [ebp-10]
:0048AF45 8B83D0040000            mov eax, dword ptr [ebx+000004D0]
在JNE 0048AFB7,我們下r fl z 讓程式繼續走到第二個比較的地方
:0048AF5E BA60B04800              mov edx, 0048B060
:0048AF63 E8908FF7FF              call 00403EF8
:0048AF68 754D                    jne 0048AFB7      跳到註冊失敗的視窗 !!!

在上面D EDX 可以看到正確註冊碼,我們F8跟入CALL 看看都有什麼

:00403EF8 53                      push ebx
:00403EF9 56                      push esi
:00403EFA 57                      push edi
:00403EFB 89C6                    mov esi, eax
:00403EFD 89D7                    mov edi, edx
:00403EFF 39D0                    cmp eax, edx上面將我輸入的名字和序列號裝入,這裡關鍵比較,用D命令可以看到真正的註冊號碼

:00403F01 0F848F000000            je 00403F96
:00403F07 85F6                    test esi, esi
:00403F09 7468                    je 00403F73
:00403F0B 85FF                    test edi, edi
:00403F0D 746B                    je 00403F7A
:00403F0F 8B46FC                  mov eax, dword ptr [esi-04]
:00403F12 8B57FC                  mov edx, dword ptr [edi-04]
:00403F15 29D0                    sub eax, edx
:00403F17 7702                    ja 00403F1B
:00403F19 01C2                    add edx, eax


跟上面的一樣,呵呵,原來這個軟體的註冊名和號碼是固定的:
公司名  :ph11.126.com
註冊號碼:1111-1111-1111-1111

在軟體的相同目錄下,filemon 監測到 proc.ini 檔案,其中有
[Registration]
Company=ph11.126.com
SequenceNum=1111-1111-1111-1111
專案,當該鍵被刪除軟體又被回覆未註冊版,該軟體啟動檢查該專案,而爆破完後寫入該專案的註冊碼不對,重起軟體就無效了。

呵呵,作者真會和我們開玩笑 :)

區區一文,實在沒什麼水平,不過還是要感謝ajj.126.com 的站長,在我初學破解的這半個月中,我的幾個問題他都盡力回答,讓我很感動。
還有要感謝看雪老師的那本書,雖然5天就看完了,但的確是本好書,有些東西還需要我細心的體會。

這個世界上不存在什麼天才,如果你覺得我是,就想想我那5天看書,看彙編的瘋狂勁,就不會說天才這兩個字字了,到目前位置,我最愛的破解是破那些CRACKME ,很有意思,光碟上的哪些CRACKME,我是這樣破解的,先是全部暴力破解,後來又全部追出註冊碼,現在我已經寫出部分的序號產生器了,還有透過keymake 的另外序號產生器顯示註冊碼的。

過程就是先用WDSM 破個遍、在用SMARTCHECK來作VB的、用DEDE找DELPHI 的,用OLLDY破任何能跟蹤的。。。

最後的感覺就是TR 還不如Softice,我們是在技巧上作文章,人家卻主導了方向。

呵呵,希望TR的作者能看到

相關文章