《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/