《FPE 2001 Demo 的延時修改》====>函式呼叫的重要性 (4千字)

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

《FPE 2001 Demo 的延時修改》====>函式呼叫的重要性

破解作者:yuppc[FCG、BCG]
破解時間:2001年7月31日
破解難度:易
注:(轉載希望保持完整,文章歸BCG、FCG所有)

軟體概述:
1>最老牌的國產遊戲修改器,也是最好的("我一直用他"),它的演示完全免費的,所以我們在這隻談"修改"!
2>新版本比2000版增加了很多的功能呀(自動機器人\網路修改\....),一級棒!
3>可以反編譯
4>下載地址:
http://www.esoftware.com.cn/oload.php?url=http://ftp.eware.com.cn/pub/game/gatools/fpe2001trial.zip
5>真是最好的遊戲修改軟體!!

修改目的:為加入CCG奮鬥!!

破解工具:
1>w32dasm黃金版  ===>靜態反彙編
2>hiew          ===>16位編輯器

"修改"開始:
1>首先要了解WINDOWS個應用程式是要對WINDOWS系統函式的呼叫來實現某些功能的(對CRACKER來說用動態下斷就是對函式呼叫的攔截);
2>在FPE2001和以前的版本一樣喜歡炫耀自己(啟動時不停的閃爍各個功能頁,結尾是也是要停一會),這是如何實現的呢---->呼叫函式(Sleep,SleepEx等函式);
3>安裝軟體,並執行;
4>觀察:開始執行時閃爍9次,關閉時閃爍一次並發現一個"關於"中關鍵詞"EXIT……";
5>開始用W32dasm反彙編,查詢關鍵詞"EXIT"(先解決關閉時的閃爍),程式碼如下:(注意函式的呼叫)
      :
      :
:00406513 803F00                  cmp byte ptr [edi], 00  ====>關鍵比較
:00406516 0F84ED020000            je 00406809    ========>關鍵跳(應該跳過SLEEP函式的呼叫)
:0040651C 8B93D0020000            mov edx, dword ptr [ebx+000002D0]
:00406522 807A4000                cmp byte ptr [edx+40], 00
:00406526 7413                    je 0040653B  ====>此處無用(因為要跳過EXIT)
:00406528 33D2                    xor edx, edx
:0040652A 8BC3                    mov eax, ebx
:0040652C E853170000              call 00407C84
:00406531 68D0070000              push 000007D0

* Reference To: KERNEL32.Sleep, Ord:0000h  =======>Sleep函式呼叫
                                  |
:00406536 E84D8C0900              Call 0049F188

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00406526(C)
|
:0040653B 8B9354020000            mov edx, dword ptr [ebx+00000254]
:00406541 8B83C8010000            mov eax, dword ptr [ebx+000001C8]
:00406547 E87A180800              call 00487DC6
:0040654C 66C746100800            mov [esi+10], 0008

* Possible StringData Ref from Data Obj ->"Exiting...."  ====>查詢標誌(停到這)
                                  |
:00406552 BA01454A00              mov edx, 004A4501
:00406557 8D45F8                  lea eax, dword ptr [ebp-08]
:0040655A E8499A0200              call 0042FFA8
      :
      :
      :
6>修改軟體啟動時的9次閃爍,查詢關鍵詞"Sleep"(函式名查詢),應該找到連續有9個SLEEP函式呼叫的程式段,程式碼如下:
      :
      :
:004025A5 8BD8                    mov ebx, eax
:004025A7 33D2                    xor edx, edx
:004025A9 8BC3                    mov eax, ebx
:004025AB E878EF0000              call 00411528    ===>設定標誌位的CALL
:004025B0 80BB3025000000          cmp byte ptr [ebx+00002530], 00  ====>標誌位比較
:004025B7 0F85E2000000            jne 0040269F  =======>關鍵跳(不跳則閃爍9次)
:004025BD C6833025000001          mov byte ptr [ebx+00002530], 01
:004025C4 6A64                    push 00000064

* Reference To: KERNEL32.Sleep, Ord:0000h=======>Sleep函式呼叫
                                  |
:004025C6 E8BDCB0900              Call 0049F188
:004025CB 8B93D0010000            mov edx, dword ptr [ebx+000001D0]
:004025D1 8B83C8010000            mov eax, dword ptr [ebx+000001C8]
:004025D7 E8EA570800              call 00487DC6
:004025DC 6A64                    push 00000064
      :
      :    ===================>中間有7個Sleep(總共有9個Sleep,知道嗎?)
      :
:0040267F E842570800              call 00487DC6
:00402684 68B0040000              push 000004B0

* Reference To: KERNEL32.Sleep, Ord:0000h=======>Sleep函式呼叫
                                  |
:00402689 E8FACA0900              Call 0049F188
:0040268E 8B93CC010000            mov edx, dword ptr [ebx+000001CC]
:00402694 8B83C8010000            mov eax, dword ptr [ebx+000001C8]
:0040269A E827570800              call 00487DC6

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004025B7(C)  ===========>跳躍地址(向上看)
|
:0040269F 5B                      pop ebx    ====>啟動的地址(最好直接跳到此)
:004026A0 C3                      ret
      :
      :
7>動手改動(你的最愛),啟動HIEW,改動地址00406516和004025B7,將他們全改為jmp就行了(位數不夠的加nop)  :D

8>試試吧,舒服多了吧.(所以用靜態彙編時應注意程式對關鍵函式的呼叫)

9>看雪主站上有關於Windows函式的呼叫,掌握了函式將事半功倍!!

10>收工,睡覺了!

-----------------------------------------------
FCG  ------->Http://WWW.CN778.NET
BCG  ------->http://crackerabc.longcity.net/

相關文章