Sunday, June 24, 2018

資訊安全 與外掛羈絆?

外掛介紹?


以為要上台報告打太詳細囉,個人觀點拉別認真

外掛介紹與種類


記憶體修改應該一開始上課所說的屬於修改攻擊攻擊法的其中一種=而記憶體修改與外掛之間有有什麼關係,先來講講外掛有自動外掛和記憶體修改外掛和封包修改外掛,自動外掛就是像按鍵精靈,就是模擬鍵盤和滑鼠的動作不斷進行重複,像是掛在遊戲不斷定點打怪,再來就是封包修改外掛,clientserver端 在進行連線的時候,以遊戲來舉例的話,server端會給你腳色的血量和怪物的位置,然後client會取得你的血量,還是你的攻擊數值,然後在進行攻擊在這邊你可以修改封包來間接更改遊戲的數值,在遊戲裡如果lol有腳色躲在草叢裡這時候server端會發送封包給你跟你講那邊有人不要顯示
這時候你的用戶端你可以進行封包的竊聽然後再修改記憶體位置讓對面腳色顯示,因為大部分的伺服器只要你的client端發送的資料她都信,現在大部分的外掛都是按鍵精靈,和記憶體修改,封包修改與竊聽現在遊戲公司都會寫好封包加密你不知道封包在寫什麼竊聽也沒用,而最好寫的按鍵精靈,最好被遊戲擋掉也是按鍵精靈,如果一般來講你的按鍵精靈發送到遊戲裡面都是軟體級發送按鍵,就是用微軟內建的api去呼叫,api有分前台和後台,前台發送按鍵就是你視窗只能固定在最上層,而後台你就可以收在後面你的外掛還是可以持續對你得遊戲視窗發送,但是還是會被遊戲擋掉,最終辦法就是驅動級模擬按鍵winio.dll可以直接模擬鍵盤按鍵,前提你鍵盤要用ps2這樣才有效果,但是這只能可以前台,有了鍵盤按鍵,接下來就是要判斷什麼情況下你才要按下鍵盤的按鍵,你可以取得螢幕的像素點還是讀取記憶體的位置和封包竊聽來達到判斷是否要按鍵,再來來介紹這次要跟大家講的記憶體修改,因為就像我前面剛剛講的只要是用戶端講的服務器都信,當然有些服務器也會做判斷,來比對發送結果跟你執行結果來看看有沒有相符合,但是伺服器都不這麼做為什麼不這麼做呢,你一個判斷要卡幾秒,你想打一下怪物,卡個一秒這樣遊戲體驗不太好吧,所以能大多說不會多做過濾,所以記憶體修改可以做什麼事情呢,不侷限外掛,在軟體破解方面序號啊,都可以繞過去,如果反編譯能力過強的話
我們現在所打的程式都是由source code 然後編譯然後轉換成二進制檔,二進制看不懂r所以那些二進位的又會被轉為asm組合語言,什麼是組合語言就是像旁便那張圖一樣,我們用常用的呢
像是
Mov eax,1;
Cmp tmp,tmp2
Jmp xxxx








工具介紹



要怎樣觀看記憶體位置呢,有靜態分析ida和動態分析有ollydbg cheat engine


Ida可以去把你的程式碼他可以把你的執行檔裡面的執行檔機械瑪去化成流程圖讓破解者比較好分析,是意圖如下

然後再來就是ollydbg

左邊是機械瑪和asm組合語言,右邊的是暫存器等等再來就是
cheat engine:可以動態的去看你的記憶體位置和修改

這些是寫外掛的一些工具,下面來簡單示範怎樣修改記憶體裡面的

位置假設我要修改a變成1如果我是用修改器得怎樣做呢

模擬修改



程式執行後:這程式會一直跑
開啟我的cheat engin

可以看到上面已經加載了

點選左上角那個可以找尋進程 選擇你的main.exe按開啟

我們已經列印出a的變數記憶體位置

點這裡可以看到記憶體位置再來點右鍵

填入你的位置0x6ffe4c

可以發現你的變數位置在這裡現在回到這畫面

看右邊又個按鈕add address manually

輸入你的0x6ffe4c ,按下ok


這邊按右鍵選擇你的變數可以看誰在訪問你的變數現在回到你的程式繼續動作

按下後你可以看到你這邊已經有變動了

因為你的程式去訪問你的變數去做cmp現在來往上追蹤

把它紀錄下來,0040156D記住這位置回到

這邊在goto 0040156D 可以看到他跳到這裡

你仔細比對跟組合語言比對一下他把變數rbp-04這位置指向的是你的變數位置他把它移到暫存器eax 然後再cmp eax 1 比對看如果相符這邊我們就可以來做一些變動了
eax比對那邊設為0看會發生什麼事
這邊更改過後再去看你程式碼看會發生什麼可以發現

這邊
只是小小的展示,要如何要繞過遊戲防護呢,你可以進行dll injection
這些注入到目標主程式的記憶體讓目標主程式的記憶體已為他是自己的我們可以自己寫個dll再注入到遊戲裡面,在記憶體修改的方面的話每次開機的話你的記憶體都會不一樣,這樣的話你的dll可以做基址的定位為什麼要做定位呢,每次記憶體都會不一樣,像是你腳色血量,你如果位置都寫死的話你這次寫的外掛可以,位置都寫死位置到下次開機所有的位置你可能要重寫了,所以要做基址的定位
要怎樣用呢比如說你注入到遊戲的dll位置一定是固定的,假如說你這次的遊戲血量是0x1234 ,你注入到遊戲的記憶體位置是0x1000 那你的記憶體修改的位置可以寫為 0x1234-xxxx.dll = 234也就是你的位移量,你這邊的話你的位置就可以xxxx.dll+234當然系統也不會讓你這好破解,也會有一級指針,二級指針,三級指針等等
vc++寫的dll注入器+dll檔_sourcecode_在mega
這邊記憶體修改就差不多了更深入的話可以google
反外掛的原理會對遊戲進行字串的掃描,和對user mod kernel mod層那邊進行函數的攔截,破解反外掛的機制呢你可以選擇寫個驅動還是進行ssdt那邊進行函數的替換這邊太高端無法進行研究。
這些原理只能套在x86 也就是32位元下才有用。
還有另一種的方法就是虛擬機vm在虛擬機下開啟外掛和遊戲,你在外面對vm做修改這是你就可以對反外掛和遊戲上下其手,隨便你怎樣修改了。