因为相信, 所以看见
1.用javascript API打印十六进制的 bytes数组
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'
一般情况下,无脑用第一种方法就可以了 简单快捷
王某某 2022.0224 于工地办公楼
关于作者:
一个乙方安全公司搬砖的菜鸡,移动安全从业者。
最近忙着找女票,忙着在b站当扑街up主。
b站/公众号 : 移动安全王铁头
希望和大佬们一起学习,一起成长
点个
在看
你最好看
原文始发于微信公众号(移动安全王铁头):frida打印bytes数组的4种方法
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论