Xposed框架是Android環境下的hook框架,今天仔細練習了一下,練習的目標是一個ctf app點擊打開鏈接。
具體步驟如下:
1.下載並安裝xposed框架,安裝後如圖所示:
點擊模塊可以查看到當前已經安裝的xposed模塊。
點擊上圖右邊的複選框,激活該模塊,重啓安卓模擬器即可加載。重啓安卓模擬器的辦法有兩個,一個是直接關閉模擬器並打開,另外一個是使用如下adb命令:
adb shell "stop;start"
當前我們的myhook apk還沒有生成,所以暫時不用做。
2.打開adt開發環境,新建一個android項目:
點擊下一次,按下圖進行設置:
隨後全部點下一步,直到完成。
在AndroidManifest.xml配置Xposed的基本信息。
主要部分代碼如下: <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="hookclick" />
<meta-data
android:name="xposedminversion"
android:value="54" />
</application>
上面寫的版本號是54,也就是我們用jar的版本號。這部分內容基本上不用修改。
在工程上按alt+enter,選擇Add External JARs,導入XposedBridgeApi-54.jar,注意一定要這麼導入,而不能直接把jar文件插入開發環境。
3、在assets目錄下新建一個xposed_init文件。編輯內容爲:包名+類名,這裏我寫的是com.example.hooktest.hookModule。注意這裏面的包名要和前面AndroidManifest.xml裏面的包名一致。
4、編寫類代碼
首先,在src下面創建一個名稱爲com.example.hooktest的包,在這個包下面創建一個名爲hookModule的類,如下圖所示:
在hookModule.class中加入如下代碼:
package com.example.hooktest;
import android.os.Bundle;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class hookModule implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
// TODO Auto-generated method stub
if (lpparam.packageName.equals("mirage.goldsnow.mctf")) {
XposedHelpers.findAndHookMethod("mirage.goldsnow.mctf.MainActivity",
lpparam.classLoader,
"onCreate",
Bundle.class,
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
String flag = (String)XposedHelpers.callMethod(param.thisObject, "getFlag");
Log.d("xx", "the flag is=" + flag);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
}
});
}
}
}
上面代碼中的紅色部分是要注意的關鍵點。下面逐一解釋:
第一個
mirage.goldsnow.mctf
指的是目標apk的包名。
第二個
mirage.goldsnow.mctf.MainActivity
指的是activity名。
第三個
onCreate
指的是要攔截的存放flag的初始化函數。
第四個
getFlag
指的是讀取flag字符串的函數。
Log.d("xx", "the flag is=" + flag);
這實際上是一個android調試類,更詳細的說明可以參考《Log圖文詳解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法》這篇文章。
5、生成apk並安裝。安裝後,需要在xposed框架中激活,並重啓模擬器,具體的操作方法見上面的第1部分。
6、在xposed中軟重啓,如下圖:
重啓後安裝上面的目標ctf文件,並運行,用下面的命令即可查看ctf值。
adb shell "logcat | grep the flag"