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本身里面有相关方法

找到相关方法后,主动调用传参就可以了
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这种
而且开发者的习惯,一般会封装成静态方法
所以直接主动调用就可以了
调用结果:
4种方法都成功打印了传参的byte数组
除了第2种方法是十进制之外
其他都是16进制打印
十进制的49 是16进制的 0x31 也是 '1'的ascii码
49 = 0x31 = '1'
一般情况下,无脑用第一种方法就可以了 简单快捷
持续更新移动安全,iot安全,编译原理相关原创视频文章
关注公众号获取更多安全知识,行业见闻