游戲外掛原理解析與制作 - [內存數值修改類 篇四]


  前三篇的博文結合了C#的Demo對內存數據修改一類的掛剖析了原理,利用C#語言調用Windows API我們其實已經寫出了一個簡單的內存掃描工具,但是它存在一些缺陷,比如說只能所搜索單一類型數值(整型),只能搜索確定的數值,比如10002000,而不能進行模糊搜索,比如搜索某個值變小了,或者在某某區間內變化了等。

 

  我一直認為語言只是一種工具,只要能夠達到修改數值的目的,用什么語言都可以,甚至可以配合着多種語言和工具來完成一項數值的修改。其實實際中通常都是這樣,因為每種語言有自己的優勢,比如C語言/易語言這類非托管的語言對底層操作的權限非常之大,特別是易語言,容易上手加上不少人已經封裝了大量的操作底層的模塊,而C#Java等優勢就表現在應用層的封裝,API的靈活調用。合理的利用語言的優勢在它們擅長的領域,對技術保持開放的心態,不被拘束在語言層面才能對各種游戲進行剖析。

  

接下來的幾篇文章重點教學[Cheat Engine]這款內存修改器,類似的還有OD、金山游俠(這款工具沒有研究的意義,功能單一化、對於指針和匯編的理解幫助頗少),我們自己封裝工具耗費時間的成本實際上是很高的,而且這些工具已經擁有很強大的功能了,我們可以利用這些工具更好的理解原理。

 

  本章先講一下簡單的使用,我們這次就不寫Demo了,直接找一個小游戲進行測試。

 

  這個是三目童子,我小時候在小霸王游戲上玩的。

  

  

  我們目前看到的信息有:

   6格血          0個金幣         2條命

 

  這就是我們肉眼能看到的一些信息,還有人物坐標、裝備道具等是目前無法看到但真實存在的數值。

  

  現在我們打開CE:

  下圖是它的主界面:  

       

  

  我這個是比較老的版本了,首先點擊圖標,打開選擇進程的界面。

  

  從圖標或者進程名稱中可以看到,我用綠色框出來的這個進程就是我們三目童子的游戲進程。

     

  這一步的目的很明顯就是獲取該游戲進程的PID和句柄Handle

  

  我們點擊打開,打開之后可以看到右側控件已經變為可用狀態了。

  

 

  接下來我們就來嘗試搜索一下血量(6)這個數值

  

  

  我們在值中輸入6,點擊首次掃描,在左側顯示如下的列表,可以看到整個內存塊中有2801個值為6 的地址。

   

  

  現在采用上一章節提到的方法,使得6這個值發生變化,我們去撞一下小兵:

   

  可以看到血量變成5格了

 

  此時把值修改成5后,點擊再次掃描:

  

  

  下圖是搜索結果,沒有找到對應的地址, 可以看到數量是 0

  

  這就尷尬了,其實是因為我們的數值類型選擇的是4字節,CE打開默認4字節搜索就是整形數,而以前的游戲機不比現在有那么高的存儲容量,一般能以字節存放的變量就定義為BYTE,所以我們重新開始搜索,點擊新的掃描,然后下拉掃描類型為字節

   

  

  此時按下首次掃描,得到以下掃描結果

  

  可以看到 字節形式存放的變量高達68696個,我們繼續撞一下小兵

  

  好了,這下變成4格血量了,我們把CE需要掃描的值改為4,然后點擊再次掃描

  

  

  找到4個結果

  

  其中 地址0x2D00044 的值一直在變化,我們可以排除這個地址

 

  那么在剩下的三個地址中有沒有存放血量的地址呢,我們繼續改變血量

  

  血量變成三個格子了,我們對3再次進行搜索

  

  

  結果如下圖:

   

 

  現在就剩下一個地址0x2D00092中存放的字節值為3,我們來確定下這個地址是否是血量存放的地址,我們點擊該地址

  

  

  然后點擊箭頭圖標把他添加到待操作的地址列表中

  

  

  雙擊此記錄的值

  

  

  我們把值修改為6,我們再來看下游戲中的血量是否跟着變化了,注意界面上的血量可能沒有立刻跟着變化,因為這類游戲只有在血量發生變化的時候才會去讀取顯示它的值,所以我們需要再去撞一下怪。

   

  可以看到血量變成5格了,這說明修改成功了(修改6格血量后,撞一下怪減了一格血量,所以剩5),我們再來看下CE的界面

   

  沒有問題,數值顯示5,這樣的話我們就跟着CE這款工具完成了一次最基礎數據的修改。大家看其實和我們寫代碼修改用的原理是一樣的,就像破解WIFI密碼一樣,窮舉對比,找到正確的地址或密碼。

  

  下一節講解動態地址指針和偏移的查找。

  

  PS:轉載請附帶原文路徑:http://www.cnblogs.com/lene-y/p/7252446.html  。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM