PEDIY 之 打造你自己的遊戲祕技(一) (3千字)
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 eax, dword ptr [ebp-0C]
:0040698B C1E005 shl eax, 05
:0040698E 8B4D08 mov ecx, dword 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 eax, dword ptr [ebp-0C]
:0040630B C1E005 shl eax, 05
:0040630E 8B4D08 mov ecx, dword ptr [ebp+08]
:00406311 83AC087011000005 sub dword ptr [eax+ecx+00001170], 00000005 <--把這裡改掉
:00406319 8B45F4 mov eax, dword ptr [ebp-0C] <--我們會停在這裡
:0040631C C1E005 shl eax, 05
:0040631F 8B4D08 mov ecx, dword ptr [ebp+08]
還有一處是當小人在彈簧板上向上彈時頭頂碰到釘子時減血,同樣的方法找到下面:
:00406615 8B45F4 mov eax, dword ptr [ebp-0C]
:00406618 C1E005 shl eax, 05
:0040661B 8B4D08 mov ecx, dword ptr [ebp+08]
:0040661E 83AC087011000005 sub dword ptr [eax+ecx+00001170], 00000005 <--把這裡改掉
:00406626 8B45F4 mov eax, dword ptr [ebp-0C] <--停在這一句
:00406629 C1E005 shl eax, 05
:0040662C 8B4D08 mov ecx, dword 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 ebp, esp
:00401BA8 83EC28 sub esp, 00000028
:00401BAB 53 push ebx
:00401BAC 56 push esi
:00401BAD 57 push edi
:00401BAE 8B4508 mov eax, dword 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 eax, dword ptr [ebp+08]
:00401BD5 8945E8 mov dword ptr [ebp-18], eax
:00401BD8 6A76 push 00000076
:00401BDA 8B4508 mov eax, dword 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 eax, dword ptr [ebp-28]
:00401C13 50 push eax
* Reference To: USER32.RegisterClassA, Ord:01BAh
|
:00401C14 FF15E0034100 Call dword ptr [004103E0] <--光條停在這裡,向上找
:00401C1A 0FB7C0 movzx eax, ax
:00401C1D E900000000 jmp 00401C22
401C96處就是WndProc了,我們轉到這裡:
:00401C96 55 push ebp
:00401C97 8BEC mov ebp, esp
:00401C99 83EC08 sub esp, 00000008
:00401C9C 53 push ebx
:00401C9D 56 push esi
:00401C9E 57 push edi
:00401C9F 6A00 push 00000000
:00401CA1 8B4508 mov eax, dword 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 eax, dword 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 eax, dword 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 eax, dword ptr [ebp+10]
:00401DD6 C1E810 shr eax, 10
:00401DD9 25FFFF0000 and eax, 0000FFFF
:00401DDE 0FB7C0 movzx eax, ax
:00401DE1 50 push eax
:00401DE2 8B4514 mov eax, dword ptr [ebp+14]
:00401DE5 50 push eax
:00401DE6 8B4510 mov eax, dword ptr [ebp+10]
:00401DE9 25FFFF0000 and eax, 0000FFFF
:00401DEE 50 push eax
:00401DEF 8B45FC mov eax, dword ptr [ebp-04]
:00401DF2 50 push eax
:00401DF3 E817090000 call 0040270F <--進這個CALL
:00401DF8 83C410 add esp, 00000010
:00401DFB 33C0 xor eax, eax
:00401DFD E956020000 jmp 00402058
* Referenced by a CALL at Address:
|:00401DF3
|
:0040270F 55 push ebp
:00402710 8BEC mov ebp, esp
:00402712 83EC04 sub esp, 00000004
:00402715 53 push ebx
:00402716 56 push esi
:00402717 57 push edi
:00402718 8B450C mov eax, dword ptr [ebp+0C]
:0040271B 8945FC mov dword ptr [ebp-04], eax
:0040271E E917010000 jmp 0040283A <--再跳到後面
:00402723 8B4508 mov eax, dword 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 eax, dword 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 eax, dword 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 eax, dword ptr [ebp+08]
:00402726 mov dword ptr [ebx+00001310], 00000000
:00402730 mov eax, dword ptr [ebp+08]
:00402733 push eax
:00402734 call 004080C0
call進去看看
到達這裡:
:004080C0 push ebp
:004080C1 mov ebp, esp
:004080C3 sub esp, 00000014
:004080C5 push ebx
:004080C7 push esi
:004080C8 push edi
:004080C9 call 00406E5F
:004080CE mov eax, dword ptr [ebp+08]
:004080D1 mov eax, dword 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 eax, dword ptr [ebp+08]
:00408191 8B8048120000 mov eax, dword ptr [eax+00001248]
:00408197 83E820 sub eax, 00000020
:0040819A 8B4D08 mov ecx, dword ptr [ebp+08]
:0040819D 89817C110000 mov dword ptr [ecx+0000117C], eax
:004081A3 8B4508 mov eax, dword ptr [ebp+08]
:004081A6 8B807C110000 mov eax, dword ptr [eax+0000117C]
:004081AC 8B4D08 mov ecx, dword ptr [ebp+08]
:004081AF 89815C110000 mov dword ptr [ecx+0000115C], eax
:004081B5 8B4508 mov eax, dword ptr [ebp+08]
:004081B8 C7808011000000000000 mov dword ptr [ebx+00001180], 00000000
:004081C2 8B4508 mov eax, dword ptr [ebp+08]
:004081C5 8B8080110000 mov eax, dword ptr [eax+00001180]
:004081CB 8B4D08 mov ecx, dword ptr [ebp+08]
:004081CE 898160110000 mov dword ptr [ecx+00001160], eax
:004081D4 8B4508 mov eax, dword ptr [ebp+08]
:004081D7 C7808C11000007000000 mov dword ptr [ebx+0000118C], 00000007
:004081E1 8B4508 mov eax, dword ptr [ebp+08]
:004081E4 8B808C110000 mov eax, dword ptr [eax+0000118C]
:004081EA 8B4D08 mov ecx, dword ptr [ebp+08]
:004081ED 89816C110000 mov dword ptr [ecx+0000116C], eax
:004081F3 8B4508 mov eax, dword ptr [ebp+08]
:004081F6 C780901100000C000000 mov dword ptr [ebx+00001190], 0000000C
接下來的是最激動人心的,血的初始化:
:00408200 8B4508 mov eax, dword ptr [ebp+08]
:00408203 8B8090110000 mov eax, dword ptr [eax+00001190]
:00408209 8B4D08 mov ecx, dword 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 ecx, dword 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點),變成小強!
再作成免註冊中文版,全部搞定。
最後請大俠門拍小力點..哇!不要拍頭啊!!
相關文章
- 用webgl打造自己的3D迷宮遊戲2016-09-19Web3D遊戲
- 打造你自己的程式設計師品牌2014-02-19程式設計師
- RSS推送技術——打造自己的今日頭條2018-05-10
- Unity 3D 打造自己的Mecanim Callback System2018-05-14Unity3D
- 過程化技術:打造「開放世界」的祕密2019-09-27
- Vue3原始碼解析,打造自己的Vue3框架,實現技術深度與思維2024-09-03Vue原始碼框架
- NExT Studios楊佳陽:什麼是3A 遊戲? 如何打造自己的IP?2019-09-27iOS遊戲
- 帶你學習透過GitHub Actions如何快速構建和部署你自己的專案,打造一條屬於自己的流水線2024-07-27Github
- 基於Gitea打造一個屬於你自己的程式碼託管平臺2020-10-01Git
- 從 0 到 1,帶你解剖 MVP 的神祕之處,並自己動手實現 MVP !2018-08-16MVP
- DirectX遊戲程式設計,揭祕Direct3D遊戲開發核心技術2010-03-18程式設計3D遊戲開發
- 簡談為什麼遊戲公司要打造自己旗下的IP2021-06-22遊戲
- 開始做遊戲系列——擁有你自己的遊戲(轉)2007-08-12遊戲
- 打造3A級遊戲渲染方案2019-12-23遊戲
- 基於 vue-cli3 打造屬於自己的 UI 庫2019-03-28VueUI
- 遊戲反外掛技術揭祕2021-12-05遊戲
- 打造屬於自己的underscore系列 ( 一 ) - 框架設計2018-12-06框架
- 打造自己的JavaScript工具庫2022-03-01JavaScript
- 如何打造自己的npm庫2018-03-02NPM
- 打造自己的JavaScript武器庫2017-11-13JavaScript
- Vim實戰手冊(8)Vimide——打造你自己的IDE(A)2012-01-29IDE
- 打造中國人自己的steam,騰訊做了一件讓所有遊戲人拍手稱快的事!2018-07-14遊戲
- 掀開高階遊戲黑客的面紗,教你打造遊戲修改器 (10千字)2015-11-15遊戲黑客
- Vim實戰手冊(9)Vimide——打造你自己的IDE(B)2012-01-31IDE
- 在這個射擊遊戲裡,你的隊友是上一局的自己2020-02-27遊戲
- 如何打造一款自己的 VSCode 主題?2019-04-18VSCode
- Drone CI For Github —— 打造自己的CI/CD工作流(一)2020-10-01Github
- 告別原生,打造自己的topBar2019-04-09
- 使用 Azure OpenAI 打造自己的 ChatGPT2023-03-30OpenAIChatGPT
- Mac - 打造自己的工作流2018-05-15Mac
- 使用hadoop打造自己的雲2011-04-19Hadoop
- Taro 技術揭祕之taro-cli2018-06-21
- 你也可以手寫自己的Promise(一)2019-02-25Promise
- 打造自己的 APP「冰與火百科」(一):分析定位2017-07-08APP
- 花樣遊戲發行《進擊的阿斯托拉-諾倫之祕》9月3日首發2019-09-03遊戲
- PicGo+GitHub:打造自己的圖床2021-04-07PicGoGithub圖床
- 打造自己的Vue元件文件生成工具2021-08-09Vue元件
- 使用註解打造自己的IOC框架2017-11-28框架