frida 打印bytes数组的4种方法


1.用javascript API打印十六进制的 bytes数组

大家好,我是王铁头 一个乙方安全公司搬砖的菜鸡
持续更新移动安全,iot安全,编译原理相关原创视频文章
更多安卓逆向视频[https://space.bilibili.com/430241559]

function bytes2hexstr_1(arrBytes) {
    var str = "";
    for (var i = 0; i < arrBytes.length; i++) {
        var tmp;
        var num = arrBytes[i];
        if (num < 0) {
            tmp = (255 + num + 1).toString(16);
        } else {
            tmp = num.toString(16);
        }
        if (tmp.length == 1) {
            tmp = "0" + tmp;
        }
        str += tmp;
    }
    return str;
}
2.用javascript API分开打印十进制的 byte数组
function bytes2hexstr_2(arrBytes) 
{
    var str_hex = JSON.stringify(arrBytes);
    return str_hex;
}

3.用Android API打印十六进制的 byte数组
function bytes2hexstr_3(bytes_ary)
{
    var ByteString = Java.use("com.android.okhttp.okio.ByteString");
    var str_hex = ByteString.of(bytes_ary).hex();
    return str_hex;
}
4.调用apk本身的方法打印 byte数组

这个方式需要 apk本身里面有相关方法

image-20220224200445587

找到相关方法后,主动调用传参就可以了

function bytes2hexstr_4(bytes_ary)
{
    var Hex_Tools = Java.use("com.wangtietou.test_rpc_all.Hex_Tools");
    var str_hex = Hex_Tools.bytes2HexString(bytes_ary);
    return str_hex;
}

在稍微大点的APK里面,其实是有很多工具类的

类似 bytes转str ,str转bytes这种

而且开发者的习惯,一般会封装成静态方法

所以直接主动调用就可以了

调用结果:

image-20220224200846393

4种方法都成功打印了传参的byte数组

除了第2种方法是十进制之外

其他都是16进制打印

十进制的49 是16进制的 0x31 也是 '1'的ascii码

49 = 0x31 = '1'


一般情况下,无脑用第一种方法就可以了 简单快捷

持续更新移动安全,iot安全,编译原理相关原创视频文章
关注公众号获取更多安全知识,行业见闻