前面的文章
給網遊寫乙個掛吧–
啟動外掛程式上
介紹了輸入法注入的方法,本文解釋第二種方法。
有的遊戲限制比較多,可能會將輸入法注入也禁用掉……這個時候就需要另想方法了。其實我們的目的很簡單,就是要讓不知道我們掛存在的遊戲,在某個時刻將掛作為遊戲的乙個元件載入進來。輸入法注入是作業系統強制塞給遊戲的,當然遊戲有權利選擇不要。那麼我們可以用暴力解決,強制遊戲載入外掛程式:
1.比如利用緩衝區溢位漏洞(參考文章
如何利用緩衝區溢位的程式錯誤來執行黑客程式
和如何利用緩衝區溢位的程式錯誤來執行黑客程式(續))。
2.還有就是在遊戲每次都會執行的函式上掛個鉤子
,但是一般的windows鉤子都會被遊戲禁用掉……而本文的方法是hook directx endscene函式,即遊戲在繪圖結束後呼叫的函式,而且遊戲會在一秒內經常呼叫這個函式,簡直就是把它當訊息佇列使!
wow –使用directx endscene注入技術
這個方法可以用在wow 3.3.5.13930上,現在已經不行了,有興趣的朋友可以自己搭乙個3.3.5.13930的私服試試。據說有很多方法可以注入(directx endscene函式在d3d9.dll檔案中):
1、 在遊戲資料夾裡放乙個d3d9.dll,因為windows是先搜尋遊戲的工作目錄再查詢system32資料夾的,所以會載入到自定義的d3d9.dll。
2、 直接在遊戲啟動前把system32資料夾中的d3d9.dll換成自己的。
3、 使用ida直接獲取endscene的位址,並且在遊戲啟動後,修改這個位址的彙編碼,使其先呼叫我們的函式,再由我們的函式將控制權交還給真實的endscene程式。
4、 在外掛程式裡啟動遊戲,啟動時先將遊戲程序暫停,執行一系列hook操作:
a)先hook loadlibrary以便在遊戲載入d3d9.dll的時候;
b)再hook d3d9.dll裡的direct3dcreate9函式,
c)再通過hook過的direct3dcreate9函式獲取d3d9的指標,
d)從d3d9指標處hook d3d9->createdevice函式,以獲取指向裝置的指標device。
e)再從device指標處hook device->endscene函式。
5、 在windows作業系統裡建立乙個自己的device。
6、 或者就是使用setwindowshookex api安裝乙個系統級別的hook,然後我們的外掛程式就會被載入進每乙個程序!參考文件:
這裡我只用過第4種方法,因此本文也只介紹第4種方法,這裡我們用到easyhook這個庫,這個庫允許我們使用c#**hook系統api。easyhook的用法很簡單:
1、 在包含hook函式的託管dll裡,建立乙個類,實現了easyhook.ientrypoint這個介面。
2、 在類的建構函式裡建立與宿主程序的連線。
3、 然後在ientrypoint.run函式裡,註冊你的hook,下面是以createfile這個系統api為例:
1、 public
void run(remotehooking.icontext incontext, string inchannelname)
2、 );
9、 }
在第5行裡,那個dcreatefile就是createfile在c#中的委託表現方式,因為是通過函式指標的方式執行的,因此會宣告成乙個委託。
4、 最後在外掛程式裡,使用下面的**註冊hook:
1、 static
void main(
string args)
2、
5、 **裡,還有乙個關鍵的地方,就是hook後獲取的指標是乙個com介面,即拿到的是乙個虛函式表,因此在hook endscene方法的時候,就是把這個com介面的endscene的虛函式指標換成我們自己的,如下表的介面定義和替換方法:
1、
public
unsafe
class d3d9
2、
8、 }
9、
public idirect3ddevice9(d3d9.idirect3d9* innativeidirect3d9,
10、 d3d9.idirect3ddevice9* innativeidirect3ddevice9)
11、
16、
public d3d9.idirect3d9* nativeidirect3d9
17、
20、
public d3d9.idirect3ddevice9* nativeidirect3ddevice9
21、
24、
private
void overridefunctions()
25、
34、
public
uint endscene(d3d9.idirect3ddevice9 device)
35、
42、 }
比如在第37行 – 41行,就是在endscene呼叫的時候,先做我們的事情,然後再把控制權交給真正的endscene。而第26行,endscene函式idirect3ddevice9的第42個函式,因為在第3行,**已經將idirect3ddevice9介面(實際就是乙個虛函式表)當成乙個普通的c/c++結構體處理 – 而且是32位機上的結構體(如果要支援64位改一下就可以了),而第6行**,就是把這個虛函式表當作乙個普通的陣列處理。不過據說在directx10裡已經把endscene去掉了……
而easyhook的使用方式和詳細原理,請參考文件:
未完待續……
給網遊寫乙個掛吧(三) 啟動外掛程式下
前面的文章 給網遊寫乙個掛吧 啟動外掛程式上 介紹了輸入法注入的方法,本文解釋第二種方法。有的遊戲限制比較多,可能會將輸入法注入也禁用掉 這個時候就需要另想方法了。其實我們的目的很簡單,就是要讓不知道我們掛存在的遊戲,在某個時刻將掛作為遊戲的乙個元件載入進來。輸入法注入是作業系統強制塞給遊戲的,當然...
js寫乙個外掛程式
分號開頭,用於防止 壓縮合併時與其它 混在一起造成語法錯誤 而事實證明,uglify壓縮工具會將無意義的前置分號去掉,我只是習慣了這麼寫 function 立即執行函式,閉包,避免汙染全域性變數 通常乙個外掛程式只暴露乙個變數給全域性供其它程式呼叫 還有其它寫法,運算子 函式體 括號 例 funct...
VB寫乙個IE外掛程式
用vb編寫ie外掛程式 實現方法如下 首先需要獲得iobjectwithsite介面的定義,你下載個olelib.tlb,包含了介面定義。然後建立乙個 activex dll工程,在工程中引用這個tlb檔案,並且引用microsoft html object library mshtml.dll 和...