本關我們將學習共享代碼,在C語言中角色屬性都是以結構體的方式進行存盤的,而結構體所存盤的資訊都是連續性的,這一關我們將會解釋如何處理游戲中的共用代碼,這種代碼是通用在除了自己以外的其他同型別對像上的
常常你在修改游戲的時候, 你找到了一個單位的健康值 或是你自己角色的生命值, 你會發現一種情況: 如果你把生命值相關代碼移除的話,其結果是你的角色無敵, 但你的敵人也無敵了,這就是共享代碼搞的鬼,
步驟 9: 注入++: (密碼=31337157)
本關模擬一種游戲,其中左邊為我方,而右邊為敵人,當我們點擊重新啟動并自動執行的時候我方血量不足會死亡,
你的任務是找到改寫健康的代碼, 并且修改以至于你可以獲得勝利,但"絕不能"使用鎖定HP的方法,
提示:在遍歷血量的時候應該使用單浮點數進行搜索,
1.首先你需要根據第一關中的搜索方法,分別將下面四個人物的血量搜索到,下面我已經搜索好并做好了備注,

2.你可以分別在每個動態地址上面,右鍵選擇【找出是什么改寫了這個地址】,會發現這四個地址都指向了同一潭訓編代碼,這也就說明了其使用了共享代碼,

3.我們直接在每一個地址上面右鍵選擇【瀏覽相關記憶體區域】,然后對比四個地址會發現一些規律,

我方隊友的結構


敵人的結構


上方的四個圖片可看出我方隊友編號為1而敵人的編號為2,我們可以通過編號來判斷是否為敵人,來決定要不要讓其掉血,
當然也可以判斷名字的開頭字母來決定,如果是D或E開頭,則說明是隊友不能讓其掉血,否則的話則直接執行扣血代碼,
4.接下來我們要注入代碼了,CE切換到記憶體瀏覽視窗,然后選擇【工具 -> 自動匯編】,【模板 -> 代碼注入】點擊確定,

上方原始代碼是 mov [ebx+04],eax,意思就是,血量處于 ebx+04 的位置,
5.為了能夠遍歷到狀態位,我們需要計算出隊伍編號和血量的偏移值,
觀察下圖發現 Dave 血量地址是 019E0794 和隊伍編號地址 019E07A0,兩者十六進制相減(019E07A0 - 019E0794 = 0C)得到0C,如果血量是 ebx+04,那么隊伍編號就應該是 ebx+04+0C 就是 ebx+10,

6.直接寫以下匯編代碼,然后執行,注入完成后回到練習程式中然后點擊【重新啟動游戲并自動執行】,本關會順利通過,

著作權宣告:本博客文章與代碼均為學習時整理的筆記,文章 [均為原創] 作品,轉載請 [添加出處] ,您添加出處是我創作的動力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/499655.html
標籤:訊息安全
下一篇:從事SAP相關作業需要三大技能
