Xpose模塊抓取函數功能學習筆記

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"











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章