通過游戲外掛.學習逆向技術指超級馬里奧.
一丶前言
1.什么是逆向.
逆向就是在沒有源代碼的情況下.通過匯編.反匯編來逆向一個成品的Exe(也可以是別的.舉例是EXE)這樣叫做逆向.
2.逆向的用途
逆向技術可以用於 反病毒.反外掛. 破解. ...... 等等.當然反病毒反外掛的前提就是你要對外掛或者病毒寫法了解. 才可以進行.所以逆向的高度取決於開發的水平.
3.這篇博客的作用.
這篇博客不是教授外掛的.而是以外掛為切入點.講解逆向技術.並了解逆向技術可以做什么.
二丶超級馬里奧
想必超級瑪麗大家都玩過.
那么我們可以對它做點什么.
1.血值.可以修改為無限血量
2.子彈個數.可以修改無限子彈.
3.生命個數.可以修改為無限生命
4.子彈狀態. 使馬里奧可以發送普通子彈. 登山鎬子彈. 以及忍者飛鏢子彈. CTRL+Z鍵還可以開啟大招.
三丶逆向工具准備
我們要做外掛的前提需要有逆向工具.
Cheat_Engine 簡稱CE 一款可以搜索內存的工具. 也可以看反匯編.
那么我們可以用CE做切入點.
1.使用CE 附加超級馬里奧進程.
2.搜索子彈個數. 依次減少.然后繼續搜索.這樣可以搜索到子彈的個數的基址.
3.基址就是保存信息的一個全局變量地址.就是不會變動的地址.這樣超級馬里奧重新啟動也會是這個地址.
1.搜索子彈個數
2.子彈個數更改.點擊再次掃描.
當我們再次掃描之后會發現還有兩個地址.根據經驗.綠色的是基地址.
當然我們可以關掉游戲.重新啟動.然后看看地址還是不是這個.如果是這個.(0x00428292) 那么這個地址就是個靜態地址.我們可以認為這個地址是不變的了.
3.下拉到下面.CTRL +B 鍵觀察附近內存. 然后CTRL + 2 以字節的10進制顯示.
觀察附近內存. 可以看到92上面的82地址是個6. 而看我們當前的血值也是6 可以猜想這個變量存放的是血值.
我們可以減血看一下.
我們可以修改一下血值.看看是否是.
修改之后發現是.所以82就是血的基址. 然后通過我們馬里奧不斷的進行不同的操作.
可以看出這塊內存會更改.
當然這個操作需要手動去做.步驟我就不做了.
所以我們可以得出.
0x00428282 = 血的基址
0x00428292 = 子彈個數基址.
0x004282A2 = 生命個數的基址.
四丶編程實現外掛編寫.
C++ : 如果是C++ 我們需要熟悉幾個API. OpenProcess 打開進程句柄. ReadProcessMemory(); 讀內存. WriteProcessMemory() 寫內存.
易語言: 易語言可以使用模塊. 我用的是超級模塊.
要熟悉的易語言命令.
1.取進程ID(進程名) 返回進程ID (跟OpenProcess 一樣.只不過是封裝的一個)
2.十六到十 在易語言當中.我們操作的地址需要轉化成10進制.可以用這個命令.
3.寫內存整數型 跟WriteProcessMemory一樣的. 只不過封裝了一下.
具體代碼可以在博客中下載. 一個是 VS2015 版本MFC的. 一個是易語言編寫的. 附加模塊.
成品圖演示
MFC
易語言:
資料下載: 鏈接:https://pan.baidu.com/s/1AaRAuw7uUcxhxCL_nCrYMQ 密碼:i2xt (超級馬里奧 + CE 工具 + 易語言.e代碼文件 + 成品 + MFC 代碼 + 成品)