0
点赞
收藏
分享

微信扫一扫

使用Fridahook加固应用

你的益达233 2023-07-02 阅读 52

参考:https://bbs.kanxue.com/thread-246767.htm


对于未加固应用,我们可以通过如下方式打印堆栈

if(Java.available) {
    Java.perform(function(){
        var Def = Java.use("com.abc.Def");
        if(Def != undefined) {
            console.log("Def: " + Def.toString());
            console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));//java打印堆栈
        } else {
            console.log("Def: undefined");
        }
    });
}


但是如果应用到加固应用中会报错


Error: java.lang.ClassNotFoundException: Didn't find class "xxx" on path: DexPathList[[zip file


根据参考文章解决如下。


主要是重新指向classloader

if(Java.available) {
    Java.perform(function(){
        var application = Java.use("android.app.Application");
        application.attach.overload('android.content.Context').implementation = function(context) {
            var result = this.attach(context); // 先执行原来的attach方法
            var classloader = context.getClassLoader(); // 获取classloader
            Java.classFactory.loader = classloader;
var Def = Java.classFactory.use("com.abc.Def"); //这里不能直接使用Java.use,因为java.use会检查在不在perform里面,不在就会失败
            console.log("Def: " + Def);
// 然后下面的代码就和写正常的hook一样啦
Def.e.overload('java.lang.String').implementation = function(arg1) {
console.log("arg1: " + arg1);//打印原有参数
                var ret = this.e(arg1,arg2);//执行原有调用
console.log("ret: " + ret);//打印原有调用返回
                return ret;
            }
            return result;
        }
    });
}


举报

相关推荐

0 条评论