前言
眾所周知xposed只能hook java層缸匪。
那就不能hook so嗎翁狐?
那就得搞xposed+
可+的方案有點(diǎn)多,今天來(lái)試試ele7的InlineHook
參考視頻及項(xiàng)目及文獻(xiàn)
Android Inline Hook詳解
想看原理點(diǎn)這個(gè)↑
(安卓逆向進(jìn)階視頻)03_ART實(shí)現(xiàn)XpHookNaitive兼容安卓10
想看視頻點(diǎn)這個(gè)↑
下面是參考的github項(xiàng)目:
ele7的原項(xiàng)目
ele7的dome項(xiàng)目
珍惜的dome 這個(gè)主要解決的有個(gè)安卓版本不同注入方式不同的問(wèn)題
人話講原理
就是用C++寫了個(gè)so文件,此處命名為Aso凌蔬,原APP要調(diào)用的so此處命名為Bso露懒,
- 先用xposed hook住原APP加載Bso的流程闯冷,不讓其加載
- 然后讀到Aso的路徑,讓原APP加載Aso懈词,實(shí)現(xiàn)了替換
- 然后Aso再去調(diào)用Bso蛇耀,就可在指令前后想咋搞就咋搞了
方案開始
首先是hook的目標(biāo),我選擇的是我自己的設(shè)備檢測(cè)github項(xiàng)目
不出意外我會(huì)更新坎弯。想要這個(gè)版本可以找歷史提交記錄 找到2022年2月23日提交的那版纺涤。
deviceDetection 設(shè)備檢測(cè)---檢測(cè)雞
大概樣子就長(zhǎng)這樣,然后箭頭指向的值就是我要改的值抠忘,圖中是已經(jīng)改好的撩炊。本來(lái)就沒(méi)調(diào)試應(yīng)該是0 我給改成了339.
然后是我的hook項(xiàng)目
https://github.com/mengmugai/HookTracerPid
講解
因?yàn)榇a都在里面的自己看就行,這里大概說(shuō)一下崎脉。
生成so
首先是CMakeLists.txt
文件定義好衰抑,生成的so名字就會(huì)為libLVmp.so
版本區(qū)別
因?yàn)?code>android 9.0以上沒(méi)有 doLoad
方法,使用nativeLoad
方法了荧嵌。所有要進(jìn)行判斷呛踊。
int version = android.os.Build.VERSION.SDK_INT;
Log.e("當(dāng)前系統(tǒng) 版本號(hào) " + version);
//android 9.0沒(méi)有 doLoad 方法
if (version >= 28) {
hook Runtime.class 的 nativeLoad方法{
if (如果是我要hook的so文件則){
加載我的`libLVmp.so`
}
}
else{
hook Runtime.class 的 doLoad方法{
if (如果是我要hook的so文件則){
加載我的`libLVmp.so`
}
}
}
大概就是這樣。真是代碼可以到github里面去看啦撮。
c++開發(fā)
主要是把
inlinehook
目錄搞來(lái)谭网,然后我們主要是寫main.cpp
首先加載走了
JNI_OnLoad
方法,然后調(diào)用into_TestSo
赃春。然后就是我寫的替換它的方法
int My_Java_com_mmg_detection_utils_DebugUtils_getTracerPid(JNIEnv *env, jobject thiz) {
int ret_value = Source_Java_com_mmg_detection_utils_DebugUtils_gettracerpid(env, thiz);
LOG(ERROR) << "返回值為:";
// LOGE(ret_value)
int my_ret_value=339;
if (ret_value!=0){
my_ret_value=0;
}
return my_ret_value;
}
手機(jī)就能看到改成339了愉择。就是最開始那個(gè)圖。
還有就是上面那個(gè)getAppSo()
方法也不是原有的 自己寫的
總結(jié)及提醒:
- 本文還是要與github項(xiàng)目一同看才好理解织中。
- 這個(gè)只支持32位的hook锥涕。64位不可。
- 包括我的設(shè)備檢測(cè)的項(xiàng)目也是64位的狭吼。也不行层坠。所以要強(qiáng)制安裝32位app 命令如下:
-
adb install --abi armeabi-v7a -r app-debug.apk
編譯好不運(yùn)行 而是用這個(gè)命令安裝
- so hook 方案 還有很多
- Cydia Substrate
- xHook 這是愛奇藝開發(fā)的got表hook框架 原理又不一樣了
- Dobby
- android-inline-hook 這個(gè)跟ele7的同名 但是是字節(jié)跳動(dòng)開發(fā)的 而且支持64位。
- SandHook