逆向知識之CS輔助/外掛專題.2.實現CS1.6透視原理
一丶透視簡介
我們涉及到FPS游戲.免不了說透視.自瞄什么的. 在CS1.6中. 有OpenGl.也有D3D.
透視的方法很多. gl透視(也就是CS中可以實現的透視) D3D透視. HOOKD3d的繪圖函數.設置渲染狀態就可以實現透視. 方框透視.
根據敵人坐標以及我們的坐標. 使用三角函數(sin cos tan) 以及轉換屏幕比例算法. 求出的透視. 這種透視是通用的. 因為是算法計算出來了.依賴的就是游戲中的敵人跟我們的坐標.
二丶透視原理
Gl透視. 所講的這個透視是說CS中的透視.
首先知道兩個函數 openGL32.DLL 中的 glBegin(渲染ID) glDisable(ID) 關閉渲染.
其實在CS中實現透視很簡單.
1.HOOK glBegin函數. 過濾ID. 看看那個是人物ID.
2.HOOK之后.判斷是否是人物ID.如果是.則關閉渲染.
3.跳轉回去.繼續執行.
根據這個方法.也可以知道閃光彈繪制的時候的ID.我們也可以判斷.這樣也就實現了無視閃光了.
三丶HOOK代碼.
1.尋找Opengl32.dll. 從導出表中查看glBegin的偏移. 以及glDisable的偏移.
2.申請一塊內存空間.
3.內存空間中寫入我們的ShellCode. 也就是我們的HOOK代碼.
4.重定位到glBegin函數位置. 進行HOOK. 跳轉到我們ShellCode執行位置.
關於HOOK以及HOOK重定位函數不多說了. 做逆向的話這些必須需要會.
1.HOOK glBegin位置.跳轉到我們申請的空間. 當然.這里需要重定位. 目的地址 - 源地址 - 5
2.執行我們的ShellCode
上圖匯編代碼的意思是 比較esp +4 也就是參數值是否是人物ID. (cs中 5 6 )都可以
如果不想等.則恢復以前的HOOK地址位置值.並且跳轉回去.
如果相等. 調用glDisable函數.參數的值是 0xB71
這樣就可以完成一個HOOK.
當然寫HOOK代碼注意的問題很多. 比如Call glDisable的時候.你需要重定位glDisable.並且寫入到里面.
JMP回來的時候.也需要重定位.
四丶實現過后的表現形式.