Mover98 V3.1 暴力破解 + 註冊碼破解(有實時檢驗、自校驗,還有一個非常捉弄人的地方,小心 :D) (8千字)

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

Mover98 V3.1 暴力破解 + 註冊碼破解(有實時檢驗、自校驗,還有一個非常捉弄人的地方,小心 :D)

作者:PaulYoung
時間:2001.05.06凌晨
軟體簡介:是一種搬移軟體的工具,你可以利用它將已經安裝的軟體,從一個磁碟機(資料夾)整個搬動到另外一個磁碟機(資料夾)下,而且還可以正常的執行。連所有和該軟體相關的資料夾、捷徑、動態連結檔等等,通通會一併的搬動。所以在軟體搬移之後,不需要修改原來程式集或桌面上的程式捷徑,一樣還是可以開啟軟體。在使用方式上,Mover98提供一個精靈,你只要簡單的回答幾個問題,他就會幫你移動軟體。你可以從程式集中選擇要移動的軟體,也可以直接到磁碟機中指定要搬動的軟體資料夾。接下來,你只要指定儲存軟體的位置,Mover98就會把整個軟體通通搬到新的位置下。還可以移動整個windows目錄喔!但是Mover98在還沒有註冊之前,只能讓你使用5次而已!
下載:http://www.yadown.com/longfei/patch/pmover9831-f.zip  (漢化修改版)
破解工具:TRW 2000 V1.03,HIEW V6.55,W32DASM V8.93
______________________________________________________________________________________________________________

一、暴力篇
  Mover98 V3.1 註冊方式採用實時校驗方式,即只有使用者名稱和註冊碼完全正確時,註冊鍵才會被啟用。不過我這回採用另外一種辦法,巧妙地破解了它。
  首先反彙編它。在“串式參考”處找到"Thank you for registering Mover98. "(註冊成功的資訊),雙擊後往上看:

:0047B27F 53                      push ebx
:0047B280 8BD8                    mov ebx, eax
:0047B282 33C0                    xor eax, eax
:0047B284 55                      push ebp
:0047B285 681DB34700              push 0047B31D
:0047B28A 64FF30                  push dword ptr fs:[eax]
:0047B28D 648920                  mov dword ptr fs:[eax], esp
:0047B290 8D55FC                  lea edx, dword ptr [ebp-04]
:0047B293 8B83F8010000            mov eax, dword ptr [ebx+000001F8]
:0047B299 E8FE61FAFF              call 0042149C
:0047B29E 8B45FC                  mov eax, dword ptr [ebp-04]
:0047B2A1 50                      push eax
:0047B2A2 8D55F8                  lea edx, dword ptr [ebp-08]
:0047B2A5 8B83F4010000            mov eax, dword ptr [ebx+000001F4]
:0047B2AB E8EC61FAFF              call 0042149C
:0047B2B0 8B45F8                  mov eax, dword ptr [ebp-08]
:0047B2B3 5A                      pop edx
:0047B2B4 E8BF42FEFF              call 0045F578        //無疑,這一定是驗證註冊碼的了,進入看看(按選單中有CALL字樣的小圖示)
:0047B2B9 84C0                    test al, al         
:0047B2BB 7445                    je 0047B302
:0047B2BD 6A00                    push 00000000
:0047B2BF 668B0D2CB34700          mov cx, word ptr [0047B32C]
:0047B2C6 B203                    mov dl, 03

* Possible StringData Ref from Code Obj ->"Thank you for registering Mover98. "
                                        ->"Happy moving ..."



**************************************************************************************************************

來到這裡...這裡肯定是驗證註冊碼的關鍵了

* Referenced by a CALL at Addresses:
|:0045F6CA  , :0047B2B4  , :0047B3A8      //哇噻,共有三處驗證註冊碼耶!
|
:0045F578 55                      push ebp
:0045F579 8BEC                    mov ebp, esp
:0045F57B 83C4F4                  add esp, FFFFFFF4
:0045F57E 53                      push ebx
:0045F57F 33C9                    xor ecx, ecx
:0045F581 894DF4                  mov dword ptr [ebp-0C], ecx
:0045F584 8955F8                  mov dword ptr [ebp-08], edx
:0045F587 8945FC                  mov dword ptr [ebp-04], eax
:0045F58A 8B45FC                  mov eax, dword ptr [ebp-04]
:0045F58D E82248FAFF              call 00403DB4
:0045F592 8B45F8                  mov eax, dword ptr [ebp-08]
:0045F595 E81A48FAFF              call 00403DB4
:0045F59A 33C0                    xor eax, eax
:0045F59C 55                      push ebp
:0045F59D 6808F64500              push 0045F608
:0045F5A2 64FF30                  push dword ptr fs:[eax]
:0045F5A5 648920                  mov dword ptr fs:[eax], esp
:0045F5A8 8B45FC                  mov eax, dword ptr [ebp-04]
:0045F5AB E85046FAFF              call 00403C00
:0045F5B0 83F805                  cmp eax, 00000005
:0045F5B3 7C11                    jl 0045F5C6
:0045F5B5 8B55FC                  mov edx, dword ptr [ebp-04]
:0045F5B8 B820F64500              mov eax, 0045F620
:0045F5BD E8CA48FAFF              call 00403E8C
:0045F5C2 85C0                    test eax, eax
:0045F5C4 7504                    jne 0045F5CA

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045F5B3(C)
|
:0045F5C6 33DB                    xor ebx, ebx
:0045F5C8 EB23                    jmp 0045F5ED

______________________________________________________________________________________________________________

現在,可以暴力修改了
:0045F6CA E8A9FEFFFF              call 0045F578    //NOP 掉(@Offset0005eacah)
:0047B2B4 E8BF42FEFF              call 0045F578    //NOP 掉(@Offset0007a6b4h)
:0047B3A8 E8CB41FEFF              call 0045F578    //NOP 掉(@Offset0007a7a8h)

另外,需要說明的是,英文原版是有自校驗功能的,但這個漢化修改版已去除了自檢驗,所以不用理會。
之前曾有位大哥發貼說過一種辦法,其實可以有兩種辦法:

//******************** Program Entry Point ********
.
.
.
:0047DC53 E80843FBFF              call 00431F60
:0047DC58 84C0                    test al, al
:0047DC5A EB05                    jmp 0047DC61   //方法一:英文原版為 jne 0047DC61,改為jmp 0047DC61.
:0047DC5C E86F5BF8FF              call 004037D0    //方法二:可以NOP掉此Call  (@Offset 7d05c)


經過修改後,隨便填一個使用者名稱,註冊名有無均可以註冊成功了!!YEAH...
**************************************************************************************************************


二、註冊碼篇
  雖然暴力破解成功了,但我又心血來潮想解它的註冊碼,畢竟註冊碼方便得多啦。
  經檢查發現,剛才胡亂填的註冊資訊存入在C:\WINDOWS\WIN.INI中,格式如下:
[Mover98]
Name=?????
ID=??????

  好,動手破了它!先填好假的使用者名稱和註冊碼。
[Mover98]
Name=Paul Young  (注意注意!!!使用者名稱必須不少於5個位元組並且必須包含1個空格以上,Why?Come on,let me tell you!)
ID=78787878


  上面我們已經分析過了,0045F6CA,0047B2B4,0047B3A8三處都是驗證註冊碼的,但不知為什麼,我只能在0045F6CA處設斷,其餘兩個不行,不過不要緊,破解繼續。
  由於該軟體是在啟動時讀取WIN.INI的資訊來判斷你是否為註冊使用者的,當然是在上面這三處判斷啦,所以先用TRW 2000 下bpx 0045f6ca,g,退出,執行Mover98,中斷在:0045F6CA call 0045F578處(D EAX or D EDX 可以發現它你填的使用者名稱和註冊碼),F8進入,F10單步跟蹤...

:0045F578 55                      push ebp
:0045F579 8BEC                    mov ebp, esp
:0045F57B 83C4F4                  add esp, FFFFFFF4
:0045F57E 53                      push ebx
:0045F57F 33C9                    xor ecx, ecx
:0045F581 894DF4                  mov dword ptr [ebp-0C], ecx
:0045F584 8955F8                  mov dword ptr [ebp-08], edx
:0045F587 8945FC                  mov dword ptr [ebp-04], eax
:0045F58A 8B45FC                  mov eax, dword ptr [ebp-04]
:0045F58D E82248FAFF              call 00403DB4
:0045F592 8B45F8                  mov eax, dword ptr [ebp-08]
:0045F595 E81A48FAFF              call 00403DB4
:0045F59A 33C0                    xor eax, eax
:0045F59C 55                      push ebp
:0045F59D 6808F64500              push 0045F608
:0045F5A2 64FF30                  push dword ptr fs:[eax]
:0045F5A5 648920                  mov dword ptr fs:[eax], esp
:0045F5A8 8B45FC                  mov eax, dword ptr [ebp-04]
:0045F5AB E85046FAFF              call 00403C00        //驗證使用者名稱
:0045F5B0 83F805                  cmp eax, 00000005  //不能小於5位
:0045F5B3 7C11                    jl 0045F5C6
:0045F5B5 8B55FC                  mov edx, dword ptr [ebp-04]
:0045F5B8 B820F64500              mov eax, 0045F620
:0045F5BD E8CA48FAFF              call 00403E8C      //D EDX =使用者名稱,D EAX= (空格!!!)
:0045F5C2 85C0                    test eax, eax
:0045F5C4 7504                    jne 0045F5CA      //使用者名稱不包含空格則跳(沒有空格時顯示no jump,有空格則jump)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045F5B3(C)
|
:0045F5C6 33DB                    xor ebx, ebx     //沒有空格跳到此玩完
:0045F5C8 EB23                    jmp 0045F5ED

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045F5C4(C)
|
:0045F5CA 8B45FC                  mov eax, dword ptr [ebp-04]
:0045F5CD E85AFFFFFF              call 0045F52C
:0045F5D2 8D55F4                  lea edx, dword ptr [ebp-0C]
:0045F5D5 E81A81FAFF              call 004076F4
:0045F5DA 8B45F4                  mov eax, dword ptr [ebp-0C]    //D EAX=真註冊碼(下面幾處也可以)
:0045F5DD 8B55F8                  mov edx, dword ptr [ebp-08]
:0045F5E0 E82B47FAFF              call 00403D10
:0045F5E5 7504                    jne 0045F5EB
:0045F5E7 B301                    mov bl, 01
:0045F5E9 EB02                    jmp 0045F5ED

  看來,做一名 Cracker 有時真需要比女孩子更細心才行呀!!!!!
______________________________________________________________________________________________________________

歡迎光臨我的網路小屋

"Cracker 初體驗"

http://paulyoung.yeah.net

相關文章