android hook技术教学视频,[科普向]hook技术简单介绍
首先
1、??這只是科普向,會介紹相關Hook技術及原理,但是不會給源碼、源碼請自行百度
2、請至少有一點Windows編程經驗,知道系統API是什么...以免看科普內容給您帶來不適
3、這里結合了一些大神的個人了解有可能有錯誤。(見諒)
首先要說下CPU權限...Intel把自家CPU指令分為四個等級,Ring0,Ring1,Ring2,Ring3,Windows操作系統只用了Ring0和Ring3兩個權限。簡稱R0和R3好了-。-
R0權限只能讓系統用,比較危險。R3權限為應用層用。大部分非驅動程序都是R3應用層的...
Hook也分為R0和R3兩個層次。
R3應用層Hook又分為兩種,一種是 API Hook,一種是系統鉤子。
R0內核層Hook我只介紹一種,SSDT Hook
系統鉤子:
系統鉤子實質上是系統提供的一個API函數,叫做 SetWindowsHookEx(),可以攔截指定的13種消息類型
全局鉤子包含這樣13種消息類型:具體參考百度百科:http://baike.baidu.com/link?url=5-gmumJKhgDSvAZiYb018vhbevJ-kcfzkHxRPG2k8dClvJaFy473iL0FiixCA0waNeD16sosZQlWoMp9irvYoq
這個是系統提供的功能,百度百科也有詳細的原理介紹。我也不太熟就不多說了...實在是用的太少
系統鉤子應用:鍵盤鼠標監控/禁用等等
API Hook:
API Hook可以說是很簡單很暴力的Hook方法。
要知道,程序調用一個API實質上調用的是那個API函數的入口地址。
也就是說,只要把API函數入口地址修改成我們自己的子程序的入口地址,那么程序就會調用API的時候調用到我們自己的子程序,從而實現Hook的效果
那么我們應該是這樣做的:
尋找需要Hook的函數地址-修改地址改成自己的子程序地址-還原為原來的函數地址
舉個例子,比如MessageBoxA()函數,它的地址是12345
我寫了個子程序叫做MyMessageBoxA(),它的地址是56789
我們只要將MessageboxA()在內存里把存放函數地址的12345改成56789,
那么別人調用MessageBoxA()的時候就會調用到地址56789,也就是我們自己寫的MyMessageBoxA()
至于我們是在自己的MyMessageBoxA()里怎么操作就隨意了
是放行(Call調用原地址)
還是攔截(直接無視調用請求)
還是修改(修改參數后Call調用原地址)都可以
然而這時候我們會面臨一個無法避免的問題:我們自己寫的子程序在自己的進程空間內,和目標進程完全不在一起。事實上windows似乎無法跨進程訪問
那么我們只能讓子程序和目標進程在同一個進程空間內運行...這個就需要另外一項技術:dll注入
所以我們通常能看到封包助手,軟件多開器之類的都會有個DLL...就是為了注入后Hook用的...
簡單的說下API Hook的應用
封包攔截。hook send函數,這樣發送封包(調用send函數)之前會先調用自己的函數,就可以獲取甚至修改封包內容了
軟件多開。已知道軟件可以通過創建互斥體(一個api函數)來限制多開...也就是說我們只要Hook掉那個api
SSDT Hook:
所謂R0級的Root,其實還有種稱呼:內核鉤子
是殺毒軟件廣泛采用的一項技術
這里要介紹下SSDT。
SSDT(System Services Descriptor Table),系統服務描述符表。這個表就是一個把ring3的Win32 API和ring0的內核API聯系起來。SSDT并不僅僅只包含一個龐大的地址索引表,它還包含著一些其它有用的信息,諸如地址索引的基地址、服務函數個數等。
知道這句話里包含著什么?我們從R3層調用的API函數實質上要通過查詢SSDT獲取R0層的真正地址...
這意味著如果我們可以把SSDT里的地址修改掉,就可以實現全局API Hook的效果。
不過權限問題← ←R3無驅進R0有多困難我就不吐槽了...你們可以自己試試...
驅動(Sys)加載后本身就是R0權限...所以R0層的Hook基本都會要寫驅動...
具體實現方法不說了(到了這個層次不會匯編真的沒法玩,一般理工類都會有匯編課選修,我選了,然而并沒有學好。)
最后
說下SSDT Hook的具體應用吧
已知關閉進程需要用函數TerminateProcess()。
調用TerminateProcess之前需要調用OpenProcess()獲取進程句柄。
那么我們如果Hook掉OpenProcess函數,檢測到如果是某個指定進程就不調用OpenProcess而是去返回獲取句柄失敗。那么會怎樣呢?
Windows任務管理器嘗試關閉進程,會因為OpenProcess在SSDT被Hook,訪問到你的子程序。然后你的子程序告訴了任務管理器:打開進程失敗
于是任務管理器就會返回一個經典的提示:無法完成操作 拒絕訪問。
ed3b4b4a20a44623cad0635d9a22720e0cf3d795[1].png (16.77 KB, 下載次數: 166)
2016-3-17 09:31 上傳
相信你們在不少殺毒軟件都看過這個提示
還有我自己按照百度百科對SSDT表的介紹,可以得知API也分為R3和R0.R3運行的API會通過查詢SSDT獲得R0的地址并且運行。
總結
以上是生活随笔為你收集整理的android hook技术教学视频,[科普向]hook技术简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 现在国内程序员的薪水是什么行情?
- 下一篇: 中间件技术及其应用