PEDIY 之 打造你自己的遊戲祕技(一) (3千字)

看雪資料發表於2015-11-15

PEDIY 之 打造你自己的遊戲祕技(一)
是男人就下100層
目的程式下載地址: http://diy.xinxing.org/lihai/down100.rar

這個小遊戲本來是原來LB論壇上有人提出來請求破解的,於是我下了一個玩玩,結果玩得昏天黑地,差點荒廢了Crack大業 ^_^.這個東東的確不錯:上面滿是釘子的房頂不停地向下壓,你必須控制小人踩著託板快速向下跑,有的託板會翻轉,有的裝著彈簧,有的是釘板,如果碰到釘子生命就會減少.如果血減為零或者直接跳了下去就OVER了.它號稱"是男人就下100層",想下100層真的很不容易,尤其到了後面,幾乎全是釘板,根本找不到落腳的地方.中等難度我還勉強做了一回男人*_*,高階難度的根本不可能下到100層了.怎麼辦?這次我們的CRACK技術要用上了,讓我們來一個GameDIY ! (建議各位先玩幾次)

首先,這個東東還要求註冊,不過它的註冊判斷簡直是專門寫給Cracker看的,我這樣的菜鳥只用十幾分鍾連序號產生器都搞定了,對各位高手來說更是不成問題了,破解過程省略.

好了,現在我們想辦法找到它讓我們"減血"的地方.

執行"金山遊俠",或者FPE,GameMaster之類的遊戲修改器(別吃驚,慢慢往下看),數數一開始我們有多少血:12格,在"金山遊俠"裡輸入12,查詢,找到一堆記憶體地址.跳上釘板費一些血,再數數還有多少格,進行第二次查詢,直到找出唯一的一個地址:4E11E8.好了,現在在遊俠裡雙擊它,修改為12,怎麼樣,又成滿血了!呵呵,激動嗎?

您說什麼,不激動?這樣的小把戲N年以前就會玩了,用不著我在這裡廢話?當然了,這只是一些初級玩家的玩法.我們CRACKER怎麼能滿足於此呢?好了,我們繼續.

還記得上面找到的那個地址嗎?現在用Symbol Lorder載入遊戲,在SOFTICE裡下記憶體斷點BPM 4E11E8 W,也就是當程式向這個地址寫入內容時就中斷.(在破解軟體時我們可以利用各種API函式迅速中斷在關鍵的程式碼處,但現在用API中斷就不行了,我想來想去還是先用遊戲修改軟體找到記憶體地址再用記憶體斷點比較簡單,當然你也可以在SOFTICE裡用S手工搜,只要你有耐心把成百上千個記憶體地址記下來一一對比*_*....)

斷點下好沒有?現在回到遊戲,勇敢地跳上一塊釘板,轟! SOFTICE出來了,中斷在下面:

:00406988 8B45F4                  mov eaxdword ptr [ebp-0C]
:0040698B C1E005                  shl eax, 05
:0040698E 8B4D08                  mov ecxdword ptr [ebp+08]
:00406991 83AC087011000006        sub dword ptr [eax+ecx+00001170], 00000006 <--HEHE,就是這裡了
:00406999 E97D000000              jmp 00406A1B  <--我們會停在這一句

很明顯,在406991這一句上我們被減掉了六格血,現在我們把它改為sub dword ptr [eax+ecx+1170],0 也就是機器碼改為83AC087011000000,再回到遊戲往釘板上跳一跳,怎麼樣?爽吧?

這樣只是把釘板上的減血去掉了,可是如果被頂上的釘子壓住還是會減血,用同樣的方法可以找到下面:

:00406308 8B45F4                  mov eaxdword ptr [ebp-0C]
:0040630B C1E005                  shl eax, 05
:0040630E 8B4D08                  mov ecxdword ptr [ebp+08]
:00406311 83AC087011000005        sub dword ptr [eax+ecx+00001170], 00000005 <--把這裡改掉
:00406319 8B45F4                  mov eaxdword ptr [ebp-0C]  <--我們會停在這裡
:0040631C C1E005                  shl eax, 05
:0040631F 8B4D08                  mov ecxdword ptr [ebp+08]

還有一處是當小人在彈簧板上向上彈時頭頂碰到釘子時減血,同樣的方法找到下面:

:00406615 8B45F4                  mov eaxdword ptr [ebp-0C]
:00406618 C1E005                  shl eax, 05
:0040661B 8B4D08                  mov ecxdword ptr [ebp+08]
:0040661E 83AC087011000005        sub dword ptr [eax+ecx+00001170], 00000005 <--把這裡改掉
:00406626 8B45F4                  mov eaxdword ptr [ebp-0C]  <--停在這一句
:00406629 C1E005                  shl eax, 05
:0040662C 8B4D08                  mov ecxdword ptr [ebp+08]

這三處都改好以後,你就成了金剛不壞之身了,再想當男人就容易多了吧?

(未完待續)


PEDIY 之 打造你自己的遊戲祕技(二)

上一次我們用修改減血的數值使自己變成了"無敵",但本文的題目是"打造你自己的遊戲祕技",真正的遊戲往往是按某些特殊的鍵以後才會有滿血,無敵等功能,而不知道祕技的玩家是無法享受這種特殊服務的.現在我們就在遊戲中加入自己的祕技:只要按一個鍵就會變成滿血.

大致確定一個思路:我們先要加入一個"快捷鍵"(有時也叫"加速鍵","加速器"等),每次按下中觸發一個訊息,在視窗處理的函式中加入對這條訊息的處理過程.

先確定WndProc視窗訊息處理過程的位置.這裡用一種我認為比較簡單的方法:一個典型的WINDOWS程式往往是先定義一個WndClass結構,(這個結構中包含WndProc的指標,視窗使用的圖示游標等)然後用RegisterClass註冊這個視窗類.我們現在關心的是WndProc的地址,它在WndClass結構的第二項.所以我們只要先找到RegisterClass函式,然後向上查詢對WndClass的定義就可以了.(我的程式設計很爛,有些術語說得不準確,具體請參考關於WINDOWS程式設計的書.)

用W32DASM反彙編(用IDA當然最好了,不過這個東東比較簡單,用W32DASM完全可以搞定)

在"輸入函式"裡雙擊RegisterClassA函式,就來到這裡:

:00401BA5 55                      push ebp
:00401BA6 8BEC                    mov ebpesp
:00401BA8 83EC28                  sub esp, 00000028
:00401BAB 53                      push ebx
:00401BAC 56                      push esi
:00401BAD 57                      push edi
:00401BAE 8B4508                  mov eaxdword ptr [ebp+08]
:00401BB1 A300E24000              mov dword ptr [0040E200], eax
:00401BB6 C745D820200000          mov [ebp-28], 00002020
:00401BBD C745DC961C4000          mov [ebp-24], 00401C96   <--這個就是我們要找的
:00401BC4 C745E000000000          mov [ebp-20], 00000000

* Possible Reference to String Resource ID=00004: "?
                                  |
:00401BCB C745E404000000          mov [ebp-1C], 00000004
:00401BD2 8B4508                  mov eaxdword ptr [ebp+08]
:00401BD5 8945E8                  mov dword ptr [ebp-18], eax
:00401BD8 6A76                    push 00000076
:00401BDA 8B4508                  mov eaxdword ptr [ebp+08]
:00401BDD 50                      push eax

* Reference To: USER32.LoadIconA, Ord:017Ah
                                  |
:00401BDE FF1538044100            Call dword ptr [00410438]
:00401BE4 8945EC                  mov dword ptr [ebp-14], eax
:00401BE7 68007F0000              push 00007F00
:00401BEC 6A00                    push 00000000

* Reference To: USER32.LoadCursorA, Ord:0176h
                                  |
:00401BEE FF1540044100            Call dword ptr [00410440]
:00401BF4 8945F0                  mov dword ptr [ebp-10], eax

* Possible Reference to String Resource ID=00004: "?
                                  |
:00401BF7 6A04                    push 00000004

* Reference To: GDI32.GetStockObject, Ord:00F6h
                                  |
:00401BF9 FF1580024100            Call dword ptr [00410280]
:00401BFF 8945F4                  mov dword ptr [ebp-0C], eax

* Possible Reference to Menu: MenuID_0074 
                                  |
:00401C02 C745F874000000          mov [ebp-08], 00000074

* Possible StringData Ref from Data Obj ->"NsShaftClass"
                                  |
:00401C09 C745FC14D24000          mov [ebp-04], 0040D214
:00401C10 8D45D8                  lea eaxdword ptr [ebp-28]
:00401C13 50                      push eax

* Reference To: USER32.RegisterClassA, Ord:01BAh
                                  |
:00401C14 FF15E0034100            Call dword ptr [004103E0] <--光條停在這裡,向上找
:00401C1A 0FB7C0                  movzx eaxax
:00401C1D E900000000              jmp 00401C22

401C96處就是WndProc了,我們轉到這裡:

:00401C96 55                      push ebp
:00401C97 8BEC                    mov ebpesp
:00401C99 83EC08                  sub esp, 00000008
:00401C9C 53                      push ebx
:00401C9D 56                      push esi
:00401C9E 57                      push edi
:00401C9F 6A00                    push 00000000
:00401CA1 8B4508                  mov eaxdword ptr [ebp+08]
:00401CA4 50                      push eax

* Reference To: USER32.GetWindowLongA, Ord:0132h
                                  |
:00401CA5 FF1578034100            Call dword ptr [00410378]
..........(省略一部分)
:00401D4F 6A00                    push 00000000
:00401D51 6A00                    push 00000000
:00401D53 8B4508                  mov eaxdword ptr [ebp+08]
:00401D56 50                      push eax

* Reference To: USER32.SetWindowLongA, Ord:0215h
                                  |
:00401D57 FF1588034100            Call dword ptr [00410388]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401D25(C)
|
:00401D5D 8B450C                  mov eaxdword ptr [ebp+0C]
:00401D60 8945F8                  mov dword ptr [ebp-08], eax
:00401D63 E90A020000              jmp 00401F72 <--跳轉過去

JMP後在這裡:(HEHE,很明顯了,[ebp-8]中是各種訊息的代號,其中我們要找的是0x111即WM_COMMAND訊息,當點選選單或快捷鍵時都會產生這條訊息)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401D63(U)
|
:00401F72 837DF806                cmp dword ptr [ebp-08], 00000006
:00401F76 0F871F000000            ja 00401F9B
:00401F7C 0F84E6FDFFFF            je 00401D68
:00401F82 837DF801                cmp dword ptr [ebp-08], 00000001
:00401F86 0F840BFEFFFF            je 00401D97
:00401F8C 837DF802                cmp dword ptr [ebp-08], 00000002
:00401F90 0F842AFEFFFF            je 00401DC0
:00401F96 E9B7FFFFFF              jmp 00401F52

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401F76(C)
|
:00401F9B 817DF800010000          cmp dword ptr [ebp-08], 00000100
:00401FA2 0F8715000000            ja 00401FBD
:00401FA8 0F8454FEFFFF            je 00401E02
:00401FAE 837DF80F                cmp dword ptr [ebp-08], 0000000F
:00401FB2 0F84FCFEFFFF            je 00401EB4
:00401FB8 E995FFFFFF              jmp 00401F52

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401FA2(C)
|
:00401FBD 817DF811010000          cmp dword ptr [ebp-08], 00000111 <--就是它,WM_COMMAND=0x111
:00401FC4 0F8718000000            ja 00401FE2
:00401FCA 0F8403FEFFFF            je 00401DD3 <--跳到這個地址看看
:00401FD0 817DF801010000          cmp dword ptr [ebp-08], 00000101
:00401FD7 0F8452FEFFFF            je 00401E2F
:00401FDD E970FFFFFF              jmp 00401F52

跳到WM_COMMAND訊息處理部分:

:00401DD3 8B4510                  mov eaxdword ptr [ebp+10]
:00401DD6 C1E810                  shr eax, 10
:00401DD9 25FFFF0000              and eax, 0000FFFF
:00401DDE 0FB7C0                  movzx eaxax
:00401DE1 50                      push eax
:00401DE2 8B4514                  mov eaxdword ptr [ebp+14]
:00401DE5 50                      push eax
:00401DE6 8B4510                  mov eaxdword ptr [ebp+10]
:00401DE9 25FFFF0000              and eax, 0000FFFF
:00401DEE 50                      push eax
:00401DEF 8B45FC                  mov eaxdword ptr [ebp-04]
:00401DF2 50                      push eax
:00401DF3 E817090000              call 0040270F <--進這個CALL
:00401DF8 83C410                  add esp, 00000010
:00401DFB 33C0                    xor eaxeax
:00401DFD E956020000              jmp 00402058

* Referenced by a CALL at Address:
|:00401DF3   
|
:0040270F 55                      push ebp
:00402710 8BEC                    mov ebpesp
:00402712 83EC04                  sub esp, 00000004
:00402715 53                      push ebx
:00402716 56                      push esi
:00402717 57                      push edi
:00402718 8B450C                  mov eaxdword ptr [ebp+0C]
:0040271B 8945FC                  mov dword ptr [ebp-04], eax
:0040271E E917010000              jmp 0040283A <--再跳到後面
:00402723 8B4508                  mov eaxdword ptr [ebp+08]
:00402726 C7801013000000000000    mov dword ptr [ebx+00001310], 00000000
...........
終於到達目的地了,仔細看好,[ebp-4]是訊息的wParam值,也就是各個選單項或快捷鍵的ID值,這些ID值可以用資源編輯工具(如eXeScope,ResHacker)等看到,用ResHacker分析這個程式,可以發現它的選單ID值從40001至40017(即0x9C41-0x9C51),還有一個快捷鍵F1,ID值為40021(0x9C55).

:0040283A 816DFC419C0000          sub dword ptr [ebp-04], 00009C41 <--ID值與9C41的差
:00402841 837DFC14                cmp dword ptr [ebp-04], 00000014
:00402845 0F875E000000            ja 004028A9 <--如果超出範圍就不處理
:0040284B 8B45FC                  mov eaxdword ptr [ebp-04]
:0040284E FF248555284000          jmp dword ptr [4*eax+00402855] <--根據差值的不同選擇下面的表中不同的值進行跳轉,好像一個CASE結構,很有意思的寫法

:00402855 23274000                DWORD 00402723-\
:00402859 41274000                DWORD 00402741 |
:0040285D 5F274000                DWORD 0040275F |
:00402861 70274000                DWORD 00402770 |
:00402865 81274000                DWORD 00402781 |
:00402869 92274000                DWORD 00402792 |
:0040286D 92274000                DWORD 00402792 |
:00402871 92274000                DWORD 00402792 |--前17項是各個選單項的處理
:00402875 A7274000                DWORD 004027A7 |
:00402879 A7274000                DWORD 004027A7 |
:0040287D A7274000                DWORD 004027A7 |
:00402881 BC274000                DWORD 004027BC |
:00402885 CD274000                DWORD 004027CD |
:00402889 DE274000                DWORD 004027DE |
:0040288D EF274000                DWORD 004027EF |
:00402891 00284000                DWORD 00402800 |
:00402895 11284000                DWORD 00402811-/
:00402899 A9284000                DWORD 004028A9-\
:0040289D A9284000                DWORD 004028A9 |--這三項沒有用到
:004028A1 A9284000                DWORD 004028A9-/ <-修改這一句使它指向我們自己寫的程式碼
:004028A5 24284000                DWORD 00402824----這是程式快捷鍵F1的處理

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040273C(U), :0040275A(U), :0040276B(U), :0040277C(U), :0040278D(U)
|:004027A2(U), :004027B7(U), :004027C8(U), :004027D9(U), :004027EA(U)
|:004027FB(U), :0040280C(U), :0040281F(U), :00402830(U), :00402835(U)
|:00402845(C), :0040BDC2(U)
|
:004028A9 5F                      pop edi
:004028AA 5E                      pop esi
:004028AB 5B                      pop ebx
:004028AC C9                      leave
:004028AD C3                      ret

軟體好像故意給我們留了位置增加功能啊:).這下省事了.定義一個ID值為40020(0x9C54)的快捷鍵F2,在ResHack裡是這樣的:
        VK_F1, 40021, NOINVERT, VIRTKEY  //程式原有的
VK_F2, 40020, NOINVERT, VIRTKEY  //自己加入的
(因為是"祕"技所以就不定義選單了:))
然後把4028A1這裡的DWORD值改為40BDB8,這裡是塊尾的空白,可以用來加入程式碼.(注:在HIEW裡這一個"地址表"會被識別成類似花指令的東東,看準再改.)

在程式程式碼段結尾處的空白裡寫入自己的程式碼:

原來的程式碼:
* Reference To: KERNEL32.RtlUnwind, Ord:01C7h
                                  |
:0040BDB2 FF2540034100            Jmp dword ptr [00410340]
:0040BDB8 00000000000000000000    BYTE 10 DUP(0)
:0040BDC2 00000000000000000000    BYTE 10 DUP(0)
:0040BDCC 00000000000000000000    BYTE 10 DUP(0)
:0040BDD6 00000000000000000000    BYTE 10 DUP(0)

用HIEW修改後:

* Reference To: KERNEL32.RtlUnwind, Ord:01C7h
                                  |
:0040BDB2 FF2540034100            Jmp dword ptr [00410340]
:0040BDB8 C705E8114E000C000000    mov dword ptr [004E11E8], 0000000C <--自己的程式碼,充滿12格血
:0040BDC2 E9E26AFFFF              jmp 004028A9 <--自己的程式碼,返回
:0040BDC7 00000000000000000000    BYTE 10 DUP(0)
:0040BDD1 00000000000000000000    BYTE 10 DUP(0)
:0040BDDB 00000000000000000000    BYTE 10 DUP(0)

用HIEW應當這樣輸入: 
mov d,[4E11E8],0c
jmp 1EA9 //1EA9是檔案偏移地址,在修改完成後可以看到HIEW自動把它轉成了虛擬地址4028A9

修改以後再執行一下,只要一按F2鍵,馬上就成起死回生了!


標 題:是男人就下100層補充 (6千字)
發信人:*咖啡豆*  
時 間:2003-12-02 21:40:11
詳細資訊:

看了RORO大俠的文章,興致勃勃,下了一個來改。
由於已經有RORO提供的資料,所以改起來非常順利
只是有一個地方必須說明,就是RORO說的用快捷鍵直接改記憶體的方法有一點問題,就

是每次在不同環境下執行WINDOWS程式的記憶體和值的對應位置不是固定的,比如說移

動了軟體,或初始化的過程稍有不同,都會導致值地址的改變。所以按RORO的方法改

很可能導致非法訪問或寫到不知道的地址造成錯誤。當然了,這只是忽略了一個小問

題罷了,就讓我來補充一下.
一個WINDOWS程式的執行過程是不斷在執行--就緒--阻塞中迴圈的,當程式等待某個事

件,資源的時候,它會阻塞自己,這時需要做現場保護工作--把一些重要的變數儲存

起來,當他恢復的時候就會把保護的資源還原過來。於是可以從現場恢復的時候找到

每個變數的定址方式。
於是,先掛一次,於是回到開始時的介面,這時如果按單人遊戲選單項(就是第一項

,我漢化過了)會進行初始化工作,也就是各個變數的副初值。
先找到選單處理的位置,由於RORO已經說的很清楚, 於是很容易就找到這裡
:0040283A                 sub dword ptr [ebp-04], 00009C41
:00402841                  cmp dword ptr [ebp-04], 00000014
:00402845                  ja 004028A9
:0040284B                 mov eaxdword ptr [ebp-04]
:0040284E                 jmp dword ptr [4*eax+00402855]

:00402855                 DWORD 00402723;<--由於ID是40001,所以是第一個
:00402859                 DWORD 00402741
:0040285D                DWORD 0040275F
:00402861                 DWORD 00402770
:00402865                 DWORD 00402781
:00402869                 DWORD 00402792
:0040286D                DWORD 00402792
:00402871                 DWORD 00402792
:00402875                 DWORD 004027A7
:00402879                 DWORD 004027A7
:0040287D                DWORD 004027A7
跳過去看看,到了這裡:
:00402723                 mov eaxdword ptr [ebp+08]
:00402726                 mov dword ptr [ebx+00001310], 00000000
:00402730                 mov eaxdword ptr [ebp+08]
:00402733                 push eax
:00402734                 call 004080C0
call進去看看
到達這裡:
:004080C0               push ebp
:004080C1               mov ebpesp
:004080C3               sub esp, 00000014
:004080C5               push ebx
:004080C7               push esi
:004080C8               push edi
:004080C9               call 00406E5F
:004080CE               mov eaxdword ptr [ebp+08]
:004080D1               mov eaxdword ptr [eax]
:004080D3               push eax

* Reference To: USER32.GetMenu, Ord:0103h
                                  |
:004080D4 FF1530044100            Call dword ptr [00410430]
:004080DA 8945EC                  mov dword ptr [ebp-14], eax

* Possible Reference to String Resource ID=00001: "/7? 100B難H"

一大堆什麼東西啊!
那是最開始的對話筐的撤消和把一些選單項DISABLE
一直拖啊拖啊,終於到了!
以下就是初始化時的語句:
:0040818E 8B4508                  mov eaxdword ptr [ebp+08]
:00408191 8B8048120000            mov eaxdword ptr [eax+00001248]
:00408197 83E820                  sub eax, 00000020
:0040819A 8B4D08                  mov ecxdword ptr [ebp+08]
:0040819D 89817C110000            mov dword ptr [ecx+0000117C], eax
:004081A3 8B4508                  mov eaxdword ptr [ebp+08]
:004081A6 8B807C110000            mov eaxdword ptr [eax+0000117C]
:004081AC 8B4D08                  mov ecxdword ptr [ebp+08]
:004081AF 89815C110000            mov dword ptr [ecx+0000115C], eax
:004081B5 8B4508                  mov eaxdword ptr [ebp+08]
:004081B8 C7808011000000000000    mov dword ptr [ebx+00001180], 00000000
:004081C2 8B4508                  mov eaxdword ptr [ebp+08]
:004081C5 8B8080110000            mov eaxdword ptr [eax+00001180]
:004081CB 8B4D08                  mov ecxdword ptr [ebp+08]
:004081CE 898160110000            mov dword ptr [ecx+00001160], eax
:004081D4 8B4508                  mov eaxdword ptr [ebp+08]
:004081D7 C7808C11000007000000    mov dword ptr [ebx+0000118C], 00000007
:004081E1 8B4508                  mov eaxdword ptr [ebp+08]
:004081E4 8B808C110000            mov eaxdword ptr [eax+0000118C]
:004081EA 8B4D08                  mov ecxdword ptr [ebp+08]
:004081ED 89816C110000            mov dword ptr [ecx+0000116C], eax
:004081F3 8B4508                  mov eaxdword ptr [ebp+08]
:004081F6 C780901100000C000000    mov dword ptr [ebx+00001190], 0000000C
接下來的是最激動人心的,血的初始化:
:00408200 8B4508                  mov eaxdword ptr [ebp+08]
:00408203 8B8090110000            mov eaxdword ptr [eax+00001190]
:00408209 8B4D08                  mov ecxdword ptr [ebp+08]
:0040820C 898170110000            mov dword ptr [ecx+00001170], eax;<---血的定址
很容易看出,血是放在[ebp+00001170]
其實所有的現場恢復都在這裡了
找到定址方式就好辦了,按照RORO大蝦的方法
加個快捷鍵,然後通過在
:00402855 23274000                DWORD 00402723
:00402859 41274000                DWORD 00402741
:0040285D 5F274000                DWORD 0040275F
:00402861 70274000                DWORD 00402770
:00402865 81274000                DWORD 00402781
:00402869 92274000                DWORD 00402792
:0040286D 92274000                DWORD 00402792
:00402871 92274000                DWORD 00402792
:00402875 A7274000                DWORD 004027A7
:00402879 A7274000                DWORD 004027A7
:0040287D A7274000                DWORD 004027A7
:00402881 BC274000                DWORD 004027BC
:00402885 CD274000                DWORD 004027CD
:00402889 DE274000                DWORD 004027DE
:0040288D EF274000                DWORD 004027EF
:00402891 00284000                DWORD 00402800
:00402895 11284000                DWORD 00402811
:00402899 A9284000                DWORD 004028A9
:0040289D C2BD4000                DWORD 0040BDC2;<--改成跳到我改的地方
:004028A1 A9284000                DWORD 004028A9
:004028A5 24284000                DWORD 00402824
改一個跳轉
跳到最後加程式碼的地方:
:0040BDB2 FF2540034100            Jmp dword ptr [00410340]
:0040BDB8 00000000000000000000    BYTE 10 DUP(0);<--原來的程式碼


:0040BDC2                   mov ecxdword ptr [ebp+08]                        |   我加的程式碼
:0040BDC5                   mov dword ptr [ebx+00001170], 00FFFFFF; |
:0040BDCF                   jmp 004028A9                                                |
:0040BDD4                   BYTE 10 DUP(0)
:0040BDDE                  BYTE 10 DUP(0)
:0040BDE8                   BYTE 10 DUP(0)
:0040BDF2                   BYTE 10 DUP(0)
:0040BDFC                  BYTE 10 DUP(0)
於是一按空格就變成FFFFFF血(16777215點),變成小強!
再作成免註冊中文版,全部搞定。
最後請大俠門拍小力點..哇!不要拍頭啊!!

相關文章