日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android hook技术教学视频,[科普向]hook技术简单介绍

發布時間:2023/12/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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技术简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。