美文网首页
Frida-hook之byte[]转String进行打印

Frida-hook之byte[]转String进行打印

作者: h1code2 | 来源:发表于2019-12-04 21:54 被阅读0次
    Java.perform(function () {
        var class1 = Java.use("com.ss.a.b.a");
        var class2 = Java.use("com.ss.sys.ces.a"); // 底层
        var JavaString = Java.use("java.lang.String");
        var ByteString = Java.use("com.android.okhttp.okio.ByteString");
    
        class2.leviathan.implementation = function (s1, s2) {
            console.log("com.ss.sys.ces.a => leviathan");
            var result = this.leviathan(s1, s2);
            console.log("com.ss.sys.ces.a => result:" + result);
            console.log("com.ss.sys.ces.a => result string:" + ByteString.of(result).hex());
            return result;
        };
    
        class1.a.overload('java.lang.String').implementation = function (s1) {
            console.log("com.ss.a.b.a = >a");
            console.log("参数1:" + s1);
            var result = this.a(s1);
            console.log("com.ss.a.b.a => result:" + result);
            // console.log("com.ss.a.b.a => result:" + JavaString.$new(result));
            return result;
        }
    });
    
    # 以下代码来自龙哥分享
    console.log("加载脚本成功!");
    Java.perform(function x() {
        //定位StringBuilder,StringBuffer类
        const stringbuilder = Java.use("com.dianping.util.NativeHelper");
    
        //定位方法
        const func = "ndug";
    
        // 使用log类和Exception类产生堆栈
        var jAndroidLog = Java.use("android.util.Log");
        var jException = Java.use("java.lang.Exception");
    
        var ByteString = Java.use("com.android.okhttp.okio.ByteString");
    
        stringbuilder[func].implementation = function(x, y, z){
            //打印输入参数
    
            //方法一
            var argsArray = [];
            for(var i = 0; i < x.length; i++) {
                argsArray.push(x[i]);
            }
            console.log("测试一:"+"["+argsArray.join(",")+"]");
    
            //方法二
            var arr = Java.use("java.util.Arrays");
            console.log("测试二:" + arr.toString(x));
    
            console.log("参数二:"+arr.toString(y));
            console.log("参数三:"+arr.toString(z));
    
            //方法三
            console.log("测试三"+JSON.stringify(x));
    
            // 打印十六进制字符串
            var arg1 = ByteString.of(x).hex();
            console.log("Arg1:"+arg1);
            console.log("Arg2:"+ByteString.of(y).hex());
            console.log("Arg3:"+ByteString.of(z).hex());
    
            //执行原逻辑
            const result = this[func](x, y, z);
            // 打印返回的字符串内容
    
            var ret = ByteString.of(result).hex();
            console.log("Result:"+ret);
    
            console.log("Result Length:"+ret.length);
            // 只有长度大于30时,才打印堆栈
            if (result.length > 15) {
                // 抛出异常。打印堆栈
                console.log(jAndroidLog.getStackTraceString(jException.$new()));
            }
    
            //return出去
            return result;
        };
    });
    

    相关文章

      网友评论

          本文标题:Frida-hook之byte[]转String进行打印

          本文链接:https://www.haomeiwen.com/subject/uakrgctx.html