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方法不生效,大神可以扩展一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值