Frida-hook之byte[]轉String進行打印

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("參數(shù)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){
        //打印輸入?yún)?shù)

        //方法一
        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("參數(shù)二:"+arr.toString(y));
        console.log("參數(shù)三:"+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());

        //執(zhí)行原邏輯
        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;
    };
});
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容