一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

技術(shù)熱點(diǎn):Android hook技術(shù)淺析

 dinghj 2017-04-25

0

前言

xposed框架

xposed,主頁:http://repo./module/de.robv.android.xposed.installer

是個(gè)開源的框架,在github上有源碼的,直接下載apk后安裝激活就可以使用,很多地方有這方面的教程,針對(duì)不同的手機(jī)架構(gòu),有大牛做了針對(duì)性的修改??梢栽谡搲羞M(jìn)行搜索

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

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

很多人將這個(gè)框架用在對(duì)android的私有化定制上面,其實(shí)在android安全測(cè)試方面這個(gè)框架提供了很大的便利,xposed主要是對(duì)方法的hook,在以往的重打包技術(shù)中,需要對(duì)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)程啟動(dòng)的。Zygote進(jìn)程在啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)Dalvik虛擬機(jī)實(shí)例,每當(dāng)它孵化一個(gè)新的應(yīng)用程序進(jìn)程時(shí),都會(huì)將這個(gè)Dalvik虛擬機(jī)實(shí)例復(fù)制到新的應(yīng)用程序進(jìn)程里面去,從而使得每一個(gè)應(yīng)用程序進(jìn)程都有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。這也是Xposed選擇替換app_process的原因。

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

簡(jiǎn)單實(shí)例

很簡(jiǎn)單的一個(gè)android登入代碼:

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

簡(jiǎn)單說下xposed模塊的開發(fā),首先需要的是導(dǎo)入api,具體的可以參考:https://github.com/rovo89/XposedBridge/wiki/Using-the-Xposed-Framework-API

在manifest中定義

聲明這個(gè)是xposed模塊,名稱為hook test 并且使用api版本號(hào)是82

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

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

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

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

frida Hook框架

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

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

安裝

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

pip install frida

即可

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

運(yùn)行

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

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

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

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

$ frida-ps-R

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

Hook模塊的編寫

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

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

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

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

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

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

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

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

2.反編譯友寶app

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

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

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

最后加上sign值,發(fā)送請(qǐng)求

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

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

看代碼

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

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

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

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

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

解決方法:

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

具體實(shí)現(xiàn)可參考鏈接,大牛講的很清楚。

參考鏈接

https://xianzhi.aliyun.com/forum/read/611.html

http://www./articles/terminal/56453.html

http://bbs./showthread.php?t=202147&page=2

【編輯推薦】

【責(zé)任編輯:seeker TEL:(010)68476606】

點(diǎn)贊 0

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美成人欧美一级乱黄| 国产精品午夜视频免费观看| 日韩欧美好看的剧情片免费| 欧美日韩一级aa大片| 成人区人妻精品一区二区三区| 亚洲中文字幕视频在线播放| 亚洲最新av在线观看| 亚洲男女性生活免费视频| 国产成人免费激情视频| 老司机激情五月天在线不卡| 搡老妇女老熟女一区二区| 国产精品一区二区三区日韩av | 亚洲精品成人综合色在线| 免费观看一区二区三区黄片| 午夜福利国产精品不卡| 日韩欧美国产精品中文字幕| 国产精品尹人香蕉综合网| 五月综合激情婷婷丁香| 亚洲成人免费天堂诱惑| 国产欧美另类激情久久久| 国产韩国日本精品视频| 女生更色还是男生更色| 亚洲二区欧美一区二区 | 日韩成人免费性生活视频| 在线视频三区日本精品| 麻豆剧果冻传媒一二三区| av一区二区三区天堂| 五月天六月激情联盟网| 91精品国产av一区二区| 精品国模一区二区三区欧美| 亚洲一区二区三区日韩91| 亚洲精品黄色片中文字幕| 国产原创激情一区二区三区| 午夜国产精品福利在线观看 | 中文字幕禁断介一区二区| 国产免费黄片一区二区| 中文字幕欧美精品人妻一区| 亚洲欧美日韩网友自拍| 亚洲一区二区三区福利视频| 亚洲精品成人福利在线| 欧美日韩一级aa大片|