吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1166|回复: 44
收起左侧

[Android 求助] 新手小白,在hook某个app数据库时遇到的问题

[复制链接]
ouyang12138 发表于 2023-4-14 15:51
本帖最后由 ouyang12138 于 2023-5-1 14:28 编辑

新人小白一个,最近心血来潮想学学逆向,想hook某个app实现对消息的监测,开始直接hook sqlitedatabase的.insertwithonconflict,打出来的log一看并没有发现消息内容相关的,然后jadx里面搜了下反编译的代码,发现了有个sqlcipher的database,然后查了下资料大部分聊天记录等隐私数据就是用的sqlcipher去存,然后看到源码 package net.sqlcipher.database
public long insertWithOnConflict(String str, String str2, ContentValues contentValues, int i)


我的hook代码
public class HookEntry implements IXposedHookLoadPackage {
    public static String TAG = "Demo";
    public static ClassLoader dexClassLoader = null;
    public static ClassLoader classLoader = null;
   
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
        if (loadPackageParam.packageName.equals(HookUtils.XPOSED_HOOK_PACKAGE)) {
            classLoader = loadPackageParam.classLoader;
            XposedBridge.log(TAG + " has Hooked!");
            XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    Context context = (Context) param.args[0];
                    dexClassLoader = context.getClassLoader();
                    if (dexClassLoader == null) {
                        XposedBridge.log("cannot get classloader return ");
                        return;
                    }
                    XposedBridge.log(TAG + " has Hooked!");
                    final Class<?> sqliteDatabase = XposedHelpers.findClass("net.sqlcipher.database.SQLiteDatabase", dexClassLoader);
                    final Method insertWithOnConflictMethod = XposedHelpers.findMethodExact(sqliteDatabase, "insertWithOnConflict", String.class, String.class, ContentValues.class, int.class);

                    XC_MethodHook methodHook = new XC_MethodHook() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            XposedBridge.log(TAG + " insertWithOnConflictMethod");
                            String table = (String) param.args[0];
                            ContentValues contentValues = (ContentValues) param.args[2];
                            if (table != null && table.toLowerCase().startsWith("insert into")) {
                                LogUtil.PrintInsert(table, contentValues, "sqlcipher insert");
                            }
                        }
                    };
                    // Hook insertWithOnConflict 方法
                    XposedBridge.hookMethod(insertWithOnConflictMethod, methodHook);
                }
            });
        }
    }
}
;
    }
});然后我发送消息,发现lsp里看模块日志并没有打印,该apphook是成功了的,打印了两次has hooked。不明白,想问问大佬们有没有相关经验,解解疑惑
用同样的代码去hook某个漂流瓶是成功的,看来只能是这个app做了特殊处理了。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ouyang12138 发表于 2023-4-30 23:51
public class HookEntry implements IXposedHookLoadPackage {
    public static String TAG = "Demo";
    public static ClassLoader dexClassLoader = null;
    public static ClassLoader classLoader = null;
   
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
        if (loadPackageParam.packageName.equals(HookUtils.XPOSED_HOOK_PACKAGE)) {
            classLoader = loadPackageParam.classLoader;
            XposedBridge.log(TAG + " has Hooked!");
            XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    Context context = (Context) param.args[0];
                    dexClassLoader = context.getClassLoader();
                    if (dexClassLoader == null) {
                        XposedBridge.log("cannot get classloader return ");
                        return;
                    }
                    XposedBridge.log(TAG + " has Hooked!");
                    final Class<?> sqliteDatabase = XposedHelpers.findClass("net.sqlcipher.database.SQLiteDatabase", dexClassLoader);
                    final Method insertWithOnConflictMethod = XposedHelpers.findMethodExact(sqliteDatabase, "insertWithOnConflict", String.class, String.class, ContentValues.class, int.class);

                    XC_MethodHook methodHook = new XC_MethodHook() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            XposedBridge.log(TAG + " insertWithOnConflictMethod");
                            String table = (String) param.args[0];
                            ContentValues contentValues = (ContentValues) param.args[2];
                            if (table != null && table.toLowerCase().startsWith("insert into")) {
                                LogUtil.PrintInsert(table, contentValues, "sqlcipher insert");
                            }
                        }
                    };
                    // Hook insertWithOnConflict 方法
                    XposedBridge.hookMethod(insertWithOnConflictMethod, methodHook);
                }
            });
        }
    }
}
a13389809 发表于 2023-4-25 13:08
XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        Context context = (Context) param.args[0];
        dexClassLoader = context.getClassLoader();
XposedBridge.log("hook suucess ");
        if (dexClassLoader == null) {
            XposedBridge.log("cannot get classloader return ");
            return;
        }
    }
});
 楼主| ouyang12138 发表于 2023-4-14 18:20
网上没找到相关的。。。不然也不会来问了,困扰好久了
wwwhhhlll 发表于 2023-4-14 18:48
可以在控制台里打印日志信息那样知道自己哪里有问题
 楼主| ouyang12138 发表于 2023-4-17 11:31
wwwhhhlll 发表于 2023-4-14 18:48
可以在控制台里打印日志信息那样知道自己哪里有问题

是没发现问题的,classloader找到了,方法也找到了,没报错但是表现看起来是这个插入函数没有被执行过,但是不应该
 楼主| ouyang12138 发表于 2023-4-17 13:21
help,有人救救吗
wykdz 发表于 2023-4-18 08:55
数据库打开了么?
 楼主| ouyang12138 发表于 2023-4-18 11:15
wykdz 发表于 2023-4-18 08:55
数据库打开了么?

sqlite是打开了的 sqlcipher,我发送了消息,总得存消息?也没hook到
 楼主| ouyang12138 发表于 2023-4-18 15:45
wykdz 发表于 2023-4-18 08:55
数据库打开了么?

hook构造函数看数据库路径和密码,都为空,确实没有打开
 楼主| ouyang12138 发表于 2023-4-20 18:43
但是hook了数据库总会被使用的,为啥一直不会输出呢,不合理
wykdz 发表于 2023-4-21 11:00
so里直接调用,hook so里的才有
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 11:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表