Xposed hook技術學習筆記

最近做一個安卓apk的逆向,需要用到xposed 中的hook技術,所以便學習了一下,在此紀錄一下。

demo:apk用的是非蟲大神的一個demo例子:crackme02

首先需要在manifest中填寫三段

 <!--添加標識-->
        <meta-data 
        android:name="xposedmodule" 
        android:value="true"/>
        
        <!--載入Hook模塊之後顯示的信息-->
    <meta-data
        android:name="xposeddescription"
        android:value="Xposed Demo For Hook !" />
   
    <!--規定jar包的版本信息-->
    <meta-data
        android:name="xposedminversion"
        android:value="30" />      //網上的例子中此處一般爲54,這是支持的最低的xposedbridge.jar的版本,由於新版的xposed框架不是用好用,很多人還在用2.5.1版本,該版本框架用的是較低版本xposedbridge.jar.所以還是改一下吧。

接下來就是指定入口,在assets下創建一個名爲xposed_init文件 輸入apk包名及實現的類名。這裏我們新建一個類名爲:Module

下面開始實現這個類

首先指定需要hook的函數所在的activity,其次獲取需要hook的函數名。廢話不多說,如下所示。

if (lpparam.packageName.equals("com.droider.crackme0201")){
XposedBridge.log("Loaded App:" + lpparam.packageName);

//查找要Hook的函數
XposedHelpers.findAndHookMethod(
"com.droider.crackme0201.MainActivity", //被Hook函數所在的類com.droider.crackme0201.MainActivity
lpparam.classLoader, 
"checkSN",     //被Hook函數的名稱checkSN
String.class, //被Hook函數的第一個參數String
String.class, //被Hook函數的第二個參數String
new XC_MethodHook(){
@Override
protected void beforeHookedMethod(MethodHookParam param)
throws Throwable {
// Hook函數之前執行的代碼

//傳入參數1
XposedBridge.log("beforeHookedMethod userName:" + param.args[0]); 
//傳入參數2 
XposedBridge.log("beforeHookedMethod sn:" + param.args[1]);
//函數返回值
XposedBridge.log("beforeHookedMethod result:" + param.getResult());
}

@Override
protected void afterHookedMethod(MethodHookParam param)
throws Throwable {
// Hook函數之後執行的代碼

//通過對checkSN函數的分析發現,只要修改函數的返回值即可實現註冊的破解
param.setResult(true); //改變返回值

//傳入參數1
XposedBridge.log("afterHookedMethod userName:" + param.args[0]); 
//傳入參數2 
XposedBridge.log("afterHookedMethod sn:" + param.args[1]);
//函數返回值
XposedBridge.log("afterHookedMethod result:" + param.getResult());
}
});
}

主要是afterhookedmothod函數,這個函數實現了對函數返回值的更改,即將返回值改爲了true。因爲我們通過分析非蟲大神的demo可知,checksn這個函數是對輸入進行校驗,如果正確則返回true。所以只要修改了返回值,則可以成功註冊。

這是一種不改變apk源碼的情況下而影響apk運行結果的方法,應該算是apk動態調試的一種重要方法,剛剛入了個門,以後有更多的見解還會繼續分享。

發佈了55 篇原創文章 · 獲贊 67 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章