Android中的hook怎么使用-創(chuàng)新互聯(lián)

這篇“Android中的hook怎么使用”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android中的hook怎么使用”文章吧。

創(chuàng)新互聯(lián)是一家專業(yè)提供臨夏州企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為臨夏州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

xposed框架

xposed是個開源的框架,在github上有源碼的,直接下載apk后安裝激活就可以使用,很多地方有這方面的教程,針對不同的手機(jī)架構(gòu),有大牛做了針對性的修改。可以在論壇中進(jìn)行搜索

通過替換/system/bin/app_process程序控制zygote進(jìn)程,使得app_process在啟動過程中會加載XposedBridge.jar這個jar包,從而完成對Zygote進(jìn)程及其創(chuàng)建的Dalvik虛擬機(jī)的劫持。

Xposed在開機(jī)的時候完成對所有的Hook Function的劫持,在原Function執(zhí)行的前后加上自定義代碼。

很多人將這個框架用在對android的私有化定制上面,其實(shí)在android安全測試方面這個框架提供了很大的便利,xposed主要是對方法的hook,在以往的重打包技術(shù)中,需要對smali代碼的進(jìn)行修改,修改起來比較麻煩。

利用xposed框架可以很容易的獲取到android應(yīng)用中的信息,比如加密私鑰、salt值等等,不需要飯編譯獲取密鑰轉(zhuǎn)換算法、不需要了解密鑰保存機(jī)制,直接hook函數(shù),獲取輸入輸出就可以。

原理

在Android系統(tǒng)中,應(yīng)用程序進(jìn)程都是由Zygote進(jìn)程孵化出來的,而Zygote進(jìn)程是由Init進(jìn)程啟動的。Zygote進(jìn)程在啟動時會創(chuàng)建一個Dalvik虛擬機(jī)實(shí)例,每當(dāng)它孵化一個新的應(yīng)用程序進(jìn)程時,都會將這個Dalvik虛擬機(jī)實(shí)例復(fù)制到新的應(yīng)用程序進(jìn)程里面去,從而使得每一個應(yīng)用程序進(jìn)程都有一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例。這也是Xposed選擇替換app_process的原因。

Zygote進(jìn)程在啟動的過程中,除了會創(chuàng)建一個Dalvik虛擬機(jī)實(shí)例之外,還會將Java運(yùn)行時庫加載到進(jìn)程中來,以及注冊一些Android核心類的JNI方法來前面創(chuàng)建的Dalvik虛擬機(jī)實(shí)例中去。注意,一個應(yīng)用程序進(jìn)程被Zygote進(jìn)程孵化出來的時候,不僅會獲得Zygote進(jìn)程中的Dalvik虛擬機(jī)實(shí)例拷貝,還會與Zygote一起共享Java運(yùn)行時庫。這也就是可以將XposedBridge這個jar包加載到每一個Android應(yīng)用程序中的原因。XposedBridge有一個私有的Native(JNI)方法hookMethodNative,這個方法也在app_process中使用。這個函數(shù)提供一個方法對象利用Java的Reflection機(jī)制來對內(nèi)置方法覆寫。有能力的可以針對xposed的源碼進(jìn)行分析,不得不說,作者對于android的機(jī)制和java的了解已經(jīng)相當(dāng)深入了。

簡單實(shí)例

很簡單的一個android登入代碼:

Android中的hook怎么使用

很簡單的就是判斷下用戶輸入的用戶名和密碼是正確,這里做個簡單的演示,將用戶輸入的用戶名和密碼信息hook出來不管正確與否

簡單說下xposed模塊的開發(fā),首先需要的是導(dǎo)入api

在manifest中定義

Android中的hook怎么使用

聲明這個是xposed模塊,名稱為hook test 并且使用api版本號是82

下面創(chuàng)建運(yùn)行時候的hook代碼:

Android中的hook怎么使用

看代碼中的注釋,主要是三個方法的調(diào)用,handleLoadPackage,主要是獲取到android包的相關(guān)信息,這里由于只是對logintest進(jìn)行hook,做下簡單的判斷。

findAndHookMethod 是主要的hook入口,里面幾個參數(shù)分別為包名,classloader,hook的函數(shù)名,參數(shù)類型(這個比較容易出錯,比如list類型寫為List.class),回調(diào)函數(shù)

回調(diào)函數(shù)中比較重要的:beforeHookedMethod和afterHookedMethod,一個是在函數(shù)運(yùn)行前劫持掉,一個是hook后放行,實(shí)例中對用戶輸入的字段進(jìn)行劫持打印,后面將參數(shù)之改為正確登入用戶名和密碼,這樣在app中輸入任何字符都能登入成功

frida Hook框架

Frida是一款基于python + javascript  的hook框架,通殺android\ios\linux\win\osx等各平臺,由于是基于腳本的交互,因此相比xposed和substrace  cydia更加便捷,本文重點(diǎn)介紹Frida在android下面的使用。

Frida的官網(wǎng)為:http://www.frida.re/

安裝

安裝Frida非常簡單,在pc端直接執(zhí)行

pip install frida

即可

在Android設(shè)備需要導(dǎo)入frida的服務(wù)端,需要root你的手機(jī)

Android中的hook怎么使用

運(yùn)行

設(shè)備上運(yùn)行frida-server:

Android中的hook怎么使用

電腦上運(yùn)行adb forward tcp轉(zhuǎn)發(fā):

27042端口用于與frida-server通信,之后的每個端口對應(yīng)每個注入的進(jìn)程。

運(yùn)行如下命令驗(yàn)證是否成功安裝:

$ frida-ps-R

正常情況應(yīng)該輸出進(jìn)程列表如下:

Android中的hook怎么使用

Hook模塊的編寫

hook的主要模塊是js編寫的,利用javascript的api與server進(jìn)行通信

下面結(jié)合一個真實(shí)例子進(jìn)行簡單的介紹,首先是測試代碼:

Android中的hook怎么使用

反編譯獲取app中的核心函數(shù)

對于上面的js代碼,其實(shí)就是調(diào)用app中的某個函數(shù),比如sign值生成函數(shù),加密解密函數(shù),不需要自己單獨(dú)的去分析算法流程,分析key值在哪,直接調(diào)用app的相應(yīng)函數(shù),讓app幫我們完成這些工作。

這里我們分析的app是友寶,這是一款飲料售貨機(jī),當(dāng)時抓包看到提貨的時候是只有個訂單id的,猜想是不是遍歷訂單的id,支付成功但是沒有取貨的訂單會不會響應(yīng)請求,自己掉貨出來。

下面對友寶的訂單進(jìn)行分析過程

1.抓取支付訂單成功鏈接

Android中的hook怎么使用

分析:
sign是校驗(yàn)值,主要是防止訂單偽造的,orderid是產(chǎn)生的支付訂單id,這個主要是防止偽造用

2.反編譯友寶app

找到morder/shipping所在的包為:com/ub/main/d/e.class

其中l(wèi)ocalStringBuffer存儲的就是url中的參數(shù)信息,該請求查找到的代碼在a()

生成簽名的函數(shù)在com/ub/main/d/e.class中的b函數(shù)

***加上sign值,發(fā)送請求

3.可以反編譯出他的sign計(jì)算方法,也可以直接調(diào)用b函數(shù)來產(chǎn)生sign值,后來發(fā)現(xiàn)app會自動取時間戳,我們就不需要給他array型的參數(shù)

直接調(diào)用a函數(shù),把orderId給他,讓他直接return一個值出來就好了,就有了上面的js代碼
4. 自動化的批量處理

看代碼

Android中的hook怎么使用

構(gòu)造了一個類,后面直接fuzz uid就可以了,提取里面的sign值拼接到post數(shù)據(jù)中去。

可以產(chǎn)生的post請求和抓到的數(shù)據(jù)包的請求是完全一樣的,但是并沒有測試成功,分析原因有可能是訂單id和用戶的id有所綁定。

不過學(xué)習(xí)到了怎樣通過frida對app進(jìn)行分析。

復(fù)雜參數(shù)的hook

如果遇到函數(shù)的參數(shù)類型是數(shù)組、map、ArrayList類型的,首先目標(biāo)MyClass類的fun1函數(shù),聲明如下:

Android中的hook怎么使用

解決方法:

用Xposed自身提供的XposedHelpers的findClass方法加載每一個類,然后再將得到的類傳遞給hook函數(shù)作參數(shù)!

以上就是關(guān)于“Android中的hook怎么使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前題目:Android中的hook怎么使用-創(chuàng)新互聯(lián)
本文來源:http://m.kartarina.com/article26/ccghcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)企業(yè)建站響應(yīng)式網(wǎng)站App設(shè)計(jì)小程序開發(fā)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
主站蜘蛛池模板: 色欲AV永久无码精品无码 | 免费A级毛片无码A∨免费| 无码中文字幕人妻在线一区二区三区| 久久久久亚洲av无码专区| 无码人妻精品内射一二三AV| 亚洲成a人无码亚洲成www牛牛| 亚洲精品9999久久久久无码| 亚洲AV无码成人精品区大在线| 亚洲成a人片在线观看无码专区| 无码中文字幕av免费放| 亚洲精品无码乱码成人| 一本一道VS无码中文字幕| 国产自无码视频在线观看| 人妻少妇精品无码专区二区| 亚洲伊人成无码综合网| 人妻丰满熟妇AV无码区| 国产亚洲大尺度无码无码专线| 久久亚洲精品无码aⅴ大香 | 欲色aV无码一区二区人妻| 99久无码中文字幕一本久道| 中文字幕丰满乱子无码视频| 人妻系列无码专区无码中出| 国产综合无码一区二区辣椒| 亚洲?v无码国产在丝袜线观看| 无码夫の前で人妻を犯す中字| 国产亚洲美日韩AV中文字幕无码成人| 无码精品一区二区三区| 精品无码日韩一区二区三区不卡| 内射人妻少妇无码一本一道| 日韩人妻无码精品无码中文字幕| 色爱无码AV综合区| 无码人妻精品一区二区三区99仓本 | 亚洲AV无码成人专区片在线观看| 18禁无遮挡无码网站免费| 无码AV片在线观看免费| 亚洲精品无码精品mV在线观看| 亚洲?v无码国产在丝袜线观看| 黑人巨大无码中文字幕无码| 人妻少妇看A偷人无码精品视频 | 日韩人妻无码精品久久免费一| 中文字字幕在线中文无码 |