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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

安卓逆向_22( 一 ) --- Xposed【 Android Studio + Xposed 实现简单的 hook 】

發(fā)布時(shí)間:2024/7/23 Android 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓逆向_22( 一 ) --- Xposed【 Android Studio + Xposed 实现简单的 hook 】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

From:使用滲透測(cè)試框架 Xposed 框架 hook 調(diào)試 Android APP:https://www.freebuf.com/articles/terminal/56453.html

Xposed框架分析:https://blog.csdn.net/zjx839524906/article/details/81046844

xposted框架 原理

Xposed框架之函數(shù)Hook學(xué)習(xí):https://www.cnblogs.com/csnd/p/11800719.html

如何看待阿里開(kāi)源的 dexposed 框架?:https://www.zhihu.com/question/31894163

Epic——ART上的Dexposed(無(wú)侵入式Hook框架):https://bbs.pediy.com/thread-222931.htm

【搬磚】無(wú)需 Root 也能使用 Xposed:https://www.52pojie.cn/thread-679501-1-1.html

?

Android中Xposed框架篇—利用Xposed框架實(shí)現(xiàn)攔截系統(tǒng)方法:http://www.520monkey.com/archives/895

?

關(guān)鍵字:xposed hook:https://www.baidu.com/s?wd=xposed%20hook

?

?

1. 什么是 hook

?

hook 本質(zhì)就是劫持函數(shù)調(diào)用,但由于處于 linux 用戶態(tài),每個(gè)進(jìn)程都有自己獨(dú)立的進(jìn)程空間,所以必須先注入到所要 hook 的進(jìn)程空間,修改其內(nèi)存中的進(jìn)程代碼,替換其過(guò)程表的符號(hào)地址。

Android 中一般通過(guò) ptrace 函數(shù)附加進(jìn)程,然后向遠(yuǎn)程進(jìn)程注入 so 庫(kù),從而達(dá)到監(jiān)控以及遠(yuǎn)程進(jìn)程關(guān)鍵函數(shù)掛鉤。

Hook 的難點(diǎn)在于尋找函數(shù)的入口點(diǎn)、替換函數(shù),這就涉及到函數(shù)的連接與加載機(jī)制。

Android 中一般存在兩種 hook:sdk hook,ndk hook。native hook 的難點(diǎn)在于理解 ELF 文件與學(xué)習(xí) ELF 文件,Java 層 Hook 則需要了解虛擬機(jī)的特性與 java 上的反射使用。另外還存在全局 hook,即結(jié)合 sdk hook 和 ndk hook,xposed 就是一種典型的全局 hook 框架。

?

?

2. Xposed

?

xposed 原理

Xposed 是 Android 平臺(tái)下的一個(gè)著名hook框架,其原理是通過(guò)修改替換 /system/bin/app_process 程序控制 zygote 進(jìn)程,使app_process 在啟動(dòng)過(guò)程中加載 xposedBrider.jar 包,從而完成對(duì) zygote 進(jìn)程以及其創(chuàng)建的虛擬機(jī)劫持。基于 xposed 框架可以制作出許多功能強(qiáng)大的模塊,其在功能不沖突的情況下同時(shí)運(yùn)作。

?

Xposed 工程

Xposed 源碼地址為:https://github.com/rovo89
Xposed 文件下載地址為:http://dl-xda.xposed.info/framework/

工程主要包括 5 部分:

  • Xposed:獨(dú)立實(shí)現(xiàn)了一版 Xposed版的 zyogte,即生成用來(lái)替換 /system/bin/app_process 的可執(zhí)行文件,該文件在系統(tǒng)啟動(dòng)時(shí)在 init.rc 中被調(diào)用,啟動(dòng) Zygote 進(jìn)程,init.zygote.rc 中源碼如下:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-serverclass mainsocket zygote stream 660 root systemonrestart write /sys/android_power/request_state wakeonrestart write /sys/power/state ononrestart restart mediaonrestart restart netd
  • XposedBridge:Xposed 框架的 Java 部分,編譯輸出為 XposedBridge.jar?(編寫 hook 需要導(dǎo)入)為開(kāi)發(fā)者提供接口
  • android_art:Xposed 框架的 C++ 部分,對(duì) XposedBridge 的補(bǔ)充
  • XposedTools:框架編譯工具,因?yàn)?Xposed 和 XposedBridge 編譯依賴于 Android 源碼,而且還有一些定制化的東西。
  • XposedInstaller:Xposed 插件管理和功能選擇應(yīng)用,界面如下圖所示,

    其功能包括啟動(dòng) Xposed 框架,下載和啟用指定插件,或禁用插件等。

?

?

Xposed 框架

?

Xposed Framework 是一個(gè)很強(qiáng)大的滲透測(cè)試框架,本文中講述如何用 Xposed Framework hook 一個(gè)Android APP中的一個(gè)方法并繞過(guò)登錄驗(yàn)證。

?

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
For Android 5.0 or higher (Lollipop/Marshmallow), these versions don't work! Use this instead:
http://forum.xda-developers.com/showthread.php?t=3034811
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

?

Xposed Framework 原理簡(jiǎn)述

Xposed Framewrork 也使用了模塊化的擴(kuò)展模式,可以通過(guò)編寫模塊來(lái)滿足不同的需求,比如有一個(gè)模塊叫?3dot menu,可以在每一個(gè) APP 界面中添加一個(gè)三點(diǎn)按鈕,20MP sensor for Superior Auto?可以擴(kuò)展 sony 相機(jī),所有 Xposed Framework 能夠?qū)崿F(xiàn)的功能都是通過(guò)模塊的方式實(shí)現(xiàn)的,這里提供了一些例子模塊:example modules。

如果想了解更多關(guān)于 Xposed Framework 的詳情,出門右轉(zhuǎn) :Xposed Framework

Zygote 是 Android 的核心,每打開(kāi)一個(gè) app,Zygote 就會(huì) fork 一個(gè)虛擬機(jī)實(shí)例來(lái)運(yùn)行 app,Xposed Framework 深入到了 Android 核心機(jī)制中,通過(guò)改造 Zygote 來(lái)實(shí)現(xiàn)一些很牛逼的功能。Zygote 的啟動(dòng)配置在 /init.rc?腳本中,由系統(tǒng)啟動(dòng)的時(shí)候開(kāi)啟此進(jìn)程,對(duì)應(yīng)的執(zhí)行文件是 /system/bin/app_process,這個(gè)文件完成類庫(kù)加載及一些函數(shù)調(diào)用的工作。

當(dāng)系統(tǒng)中安裝了 Xposed Framework 之后,會(huì)對(duì)?app_process 進(jìn)行擴(kuò)展,也就是說(shuō),Xposed Framework 會(huì)拿自己實(shí)現(xiàn)的 app_process?覆蓋掉 Android 原生提供的?app_process 文件,當(dāng)系統(tǒng)啟動(dòng)的時(shí)候,就會(huì)加載由 Xposed Framework 替換過(guò)的進(jìn)程文件,并且,Xposed Framework 還定義了一個(gè) jar 包,系統(tǒng)啟動(dòng)的時(shí)候,也會(huì)加載這個(gè)包:

/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar

環(huán)境要求

  • 1. Rooted Device / Emulator (已 root 的手機(jī)或者模擬器)
  • 2.?Xposed Installer?( 通過(guò)?Xposed Installer.apk 安裝 xposed
  • 3. Testing Android App

Xposed Framework 就是一個(gè) apk 包,下載到后用下面的命令安裝到手機(jī)上:

adb?install?<xposed-installer-you-just-downloaded>.apk

現(xiàn)在安裝 Xposed 比較方便,因?yàn)?Xposed 作者開(kāi)發(fā)了一個(gè) Xposed Installer App,下載后按照提示傻瓜式安裝(前提是 root 手機(jī))。其實(shí)它的安裝過(guò)程是這個(gè)樣子的:首先探測(cè)手機(jī)型號(hào),然后按照手機(jī)版本下載不同的刷機(jī)包,最后把 Xposed 刷機(jī)包刷入手機(jī)重啟就 好。刷機(jī)包下載 里面有所有版本的刷機(jī)包。

刷機(jī)包解壓打開(kāi)里面的?文件?構(gòu)成是這個(gè)樣子的:

Xposed 原理簡(jiǎn)介及其精簡(jiǎn)化:https://www.jianshu.com/p/6b4a80654d4e

META-INF/ 里面有文件配置腳本 flash-script.sh 配置各個(gè)文件安裝位置。 system/bin/ 替換zygote進(jìn)程等文件 system/framework/XposedBridge.jar jar包位置 system/lib system/lib64 一些so文件所在位置 xposed.prop xposed版本說(shuō)明文件

所以安裝 Xposed 的過(guò)程就上把上面這些文件放到手機(jī)里相同文件路徑下。

通過(guò)查看文件安裝腳本發(fā)現(xiàn):Xposed?就是修改替換了?/system/bin/app_process 文件,app_process 是 zygote 的進(jìn)程文件。所以 Xposed 通過(guò)替換的 zygote 進(jìn)程實(shí)現(xiàn)了控制手機(jī)上所有 app 進(jìn)程。因?yàn)樗?app 進(jìn)程都是由 Zygote fork 出來(lái)的。

Xposed 的基本原理是修改了 ART/Davilk 虛擬機(jī),將需要 hook 的函數(shù)注冊(cè)為 Native 層函數(shù)。當(dāng)執(zhí)行到這一函數(shù)時(shí),虛擬機(jī)會(huì)優(yōu)先執(zhí)行 Native層函數(shù),然后再去執(zhí)行 Java層函數(shù),這樣完成函數(shù)的 hook。

安裝好之后,打開(kāi) Xposed ,下面是截圖:

Modules 下面是一些可用的模塊

?

?

3. 模塊實(shí)現(xiàn)一個(gè)模塊

?

一個(gè)Xposed模塊 就是 一個(gè) Android app。

  • 如果你只是 hook,那么可以選擇 add no activity
  • 但是如果有和自身app交互,那么就選擇 empty activity

?

實(shí)現(xiàn)模塊要完成下面幾個(gè)步驟

  • 1. 實(shí)現(xiàn)?IXposedHookLoadPackage接口
  • 2. 指定要 hook 的包名 ( 這里是 com.attify.vuln )
  • 3. 判斷當(dāng)前加載的包是否是指定的包 ( 在接口方法中判斷)
  • 4. 指定要 hook 的方法名
  • 5. 實(shí)現(xiàn) beforeHookedMethod方法afterHookedMethod方法 ( hook的具體功能 )

下圖是模塊的核心代碼,上述各項(xiàng)都已經(jīng)具備

這里的包名是com.attify.vuln,

if(lpparam.packageName.equals("com.attify.vuln"))

上面這一行代碼指定了只有當(dāng) com.attify.vuln 這個(gè)包加載的時(shí)候,才會(huì)觸發(fā)一系列的 hook 行為,當(dāng)這行為觸發(fā)的時(shí)候,de.robv.android.xposed.XposedHelpers 類的 findAndHookMethod 方法就會(huì)被調(diào)用,并在適當(dāng)?shù)臅r(shí)候執(zhí)行前置方法(beforeHookedMethod)和后置方法(afterHookedMethod),這里繞過(guò)驗(yàn)證方法只需要讓傳遞到 checkLogin 方法的兩個(gè)參數(shù)相等即可,so easy。當(dāng) checkLogin 方法被調(diào)用前調(diào)用我們實(shí)現(xiàn)的模塊,并執(zhí)行前置函數(shù),就可以使得傳遞給 checkLogin 函數(shù)的兩個(gè)參數(shù)相等。

?

最后環(huán)節(jié)

把我們實(shí)現(xiàn)的模塊安裝到設(shè)備上,如下圖:

勾選我們剛才安裝的模塊,并重啟系統(tǒng),等系統(tǒng)重啟之后,打開(kāi)樣例 app,在輸入密碼的地方輸入任意字符,因?yàn)槲覀儗?shí)現(xiàn)的那個(gè)模塊會(huì)執(zhí)行

param.args[1]?=?param.args[0];

這行代碼,所以輸入任意密碼都會(huì)通過(guò)驗(yàn)證,如下圖

整個(gè)模塊執(zhí)行過(guò)程的 log 信息可以在 Xposed log 中查看到,如下圖

由日志可以看到,hook 的關(guān)鍵代碼 (前置函數(shù)) 執(zhí)行前,checkLogin 方法的兩個(gè)參數(shù)是不同的,而在后置函數(shù)執(zhí)行的時(shí)候,兩個(gè)參數(shù)已然相等了:)

[參考來(lái)源?attify,譯/實(shí)習(xí)編輯 吳知,轉(zhuǎn)載請(qǐng)注明來(lái)自FreeBuf黑客與極客(FreeBuf.COM)]shi

?

?

4. 示例

?

示例 1:Android Studio + Xposed 實(shí)現(xiàn)簡(jiǎn)單的 hook

?

************************?這三個(gè)示例重點(diǎn)看,理解 xposed 的 hook?**********************************

  • 1. Android Studio + Xposed實(shí)現(xiàn)簡(jiǎn)單的hook(詳細(xì)篇):https://www.52pojie.cn/thread-873366-1-1.html
  • 2. Xposed 使用經(jīng)驗(yàn):https://www.52pojie.cn/thread-728459-1-1.html
  • 3. Android逆向Hook學(xué)習(xí)——第一篇:Xposed:https://www.52pojie.cn/thread-873013-1-1.html

查看 Xposed 的 log

不能導(dǎo)入模塊參考:

? ? ? ?Why Xposed cannot load module?:https://forum.xda-developers.com/xposed/xposed-load-module-t3771921

The thing is you are including Xposed API into your module which is not OK. Yo have to configure the gradle for Xposed lib to be "provided" not "compiled".

*****************************************************************************************************

?

?

示例?2 :crackme 的 Hook 并打印用戶名和密碼

?

Form:https://www.bilibili.com/video/BV1UE411A7rW?p=73

https://www.52pojie.cn/thread-232658-1-1.html

Android入門破解題目(EX05_01_.apk、Crackme02.apk、CrackMe-F1F2.apk)
? ? ? ? https://blog.csdn.net/m0_38071863/article/details/102931100

第一個(gè)Android crackme:https://www.cnblogs.com/flycat-2016/p/5521979.html

示例破解程序

工程目錄:

示例 hook 代碼:

hook 后,無(wú)論輸入什么,都可以注冊(cè)成功,因?yàn)閔ook 修改了返回值,使返回值一直是?true

?

hook 系統(tǒng)函數(shù)(攔截系統(tǒng)函數(shù)),篡改 IMEI 號(hào):( getDeviceId 函數(shù)沒(méi)有參數(shù) )

?

去優(yōu)酷廣告

?

?

示例 3:Hook 人人直播.apk

?

From( hook解密算法 ):https://www.bilibili.com/video/BV1UE411A7rW?p=75

"人人直播" 登錄協(xié)議分析:https://www.cnblogs.com/LuLuLuHao

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的安卓逆向_22( 一 ) --- Xposed【 Android Studio + Xposed 实现简单的 hook 】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。