Xposed插件開發---記錄文件操作

0x00 前言

因爲工作上的原因需要分析某個軟件將網絡下載的文件解壓到那個路徑,通過比對文件夾大小很難定位到具體位置,所以考慮使用xposed插件來做,因爲沒有現成的,所以只能自己動手來做一個了
需要如下準備工作
1.刷入xposed框架的安卓機一臺
2.有基礎的安卓開發經驗
3.瞭解過xposed插件的套路

0x01 入手點 File.createNewFile

一般應用下載文件會用到File類的createNewFile方法,就通過hook這個方法來做,查看File類的源碼,裏面有一個變量是

private final String path;

path保存了要操作的文件的路徑,可以把這個變量拿出來看下是不是我們想要的東西,以下是代碼

  @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
            Class clazz = loadPackageParam.classLoader.loadClass("java.io.File");
        XposedHelpers.findAndHookMethod(clazz, "createNewFile", new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                XposedBridge.log("hooking createNewFile ");
                Field[] fields = param.thisObject.getClass().getDeclaredFields();
                for (int i = 0; i < fields.length; i++) {
                    if (fields[i].getName().equals("path")) {//找到我們想要的屬性
                        fields[i].setAccessible(true);//設置可訪問
                        XposedBridge.log("wubin:     " + fields[i].get(param.thisObject));//打印出來
                    }
                }
                super.beforeHookedMethod(param);
            }
        });
    }

安裝到機器上重啓之後,發現能夠成功打印下載路徑

2020-01-13 15:22:38.753 5784-5821/? I/EdXposed-Bridge: hooking createNewFile
2020-01-13 15:22:38.753 5784-5821/? I/EdXposed-Bridge: OneT1me createNewFile:/data/user/0/com.estrongs.android.pop/files/local_crash_lock
2020-01-13 15:22:41.808 5948-5970/? I/EdXposed-Bridge: hooking createNewFile
2020-01-13 15:22:41.808 5948-5970/? I/EdXposed-Bridge: OneT1me createNewFile:/data/user/0/com.android.dialer/cache/persistent_log/plain_text/0
2020-01-13 15:22:54.738 6707-6741/? I/EdXposed-Bridge: hooking createNewFile
2020-01-13 15:22:54.738 6707-6741/? I/EdXposed-Bridge: OneT1me createNewFile:/data/user/0/com.estrongs.android.pop/files/local_crash_lock
2020-01-13 15:22:54.738 6707-6740/? I/EdXposed-Bridge: hooking createNewFile
2020-01-13 15:22:54.738 6707-6740/? I/EdXposed-Bridge: OneT1me createNewFile:/data/user/0/com.estrongs.android.pop/files/native_record_lock
2020-01-13 15:22:54.922 6707-6766/? I/EdXposed-Bridge: hooking createNewFile
2020-01-13 15:22:54.923 6707-6766/? I/EdXposed-Bridge: OneT1me createNewFile:/data/user/0/com.estrongs.android.pop/files/security_info
2020-01-13 15:22:57.782 6707-6741/? I/EdXposed-Bridge: hooking createNewFile
2020-01-13 15:22:57.782 6707-6741/? I/EdXposed-Bridge: OneT1me createNewFile:/data/user/0/com.estrongs.android.pop/files/local_crash_lock

但是跑過去查看這個文件,發現沒有了,於是反編譯這個apk,發現這個apk下載完成後會解壓文件,完成後會刪掉這個文件,於是就有了下面的工作

0x02 繼續File.renameTo

上一步未能成功抓到釋放的文件在那邊,猜測可能是解壓後用了renameTo方法,於是繼續hook,上代碼

        XposedHelpers.findAndHookMethod(clazz, "renameTo",File.class, new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                XposedBridge.log("hooking renameTo");
                Field[] fields = param.thisObject.getClass().getDeclaredFields();
                for (int i = 0; i < fields.length; i++) {
                    if (fields[i].getName().equals("path")) {
                        fields[i].setAccessible(true);
                        XposedBridge.log("wubin:     " + fields[i].get(param.thisObject));
                    }
                }
                super.beforeHookedMethod(param);
            }
        });

這一步,能夠成功抓取到我想要的軟件釋放的文件的路徑了,大功告成

2020-01-13 15:25:44.847 4851-4938/? I/EdXposed-Bridge: OneT1me renameTo:/data/system/netstats/xt.1578293607407-
2020-01-13 15:25:44.847 4851-4938/? I/EdXposed-Bridge: OneT1me renameTo:/data/system/netstats/xt.1578293607407-
2020-01-13 15:25:44.847 4851-4938/? I/EdXposed-Bridge: OneT1me renameTo:/data/system/netstats/xt.1578293607407-
2020-01-13 15:25:44.848 4851-4938/? I/EdXposed-Bridge: OneT1me renameTo:/data/system/netstats/xt.1578293607407-
2020-01-13 15:25:45.343 7916-7997/? I/EdXposed-Bridge: OneT1me renameTo:/data/user_de/0/com.google.android.tts/cache/cmn-cn
2020-01-13 15:25:57.537 5683-8036/? I/EdXposed-Bridge: OneT1me createNewFile:/storage/emulated/0/Android/data/com.google.android.tts/files/download_cache/cmn-tw_5.zip
2020-01-13 15:25:57.537 5683-8036/? I/EdXposed-Bridge: OneT1me createNewFile:/storage/emulated/0/Android/data/com.google.android.tts/files/download_cache/cmn-tw_5.zip

0x03 後記

後續可以擴展,記錄所有軟件的操作文件的行爲。
包括查詢文件是否存在exist、delete、createNewFile、renameTo等方法的操作。

可以製作成一個安全權限管理的文件,或者對重點文件監控設置是否允許操作。

需要注意的是,這個只能抓到java類的操作文件的方法,對native方法不生效,大神可以擴展一下

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