Unidbg 问题汇总(一)

1.Long参数的传递

假设一个native函数中参数是long类型,比如这样

在这里插入图片描述

在编译成arm32的SO时,一定概率会被转成两个int.

long a = 0x1000L → int a1 = 0,int a2 = 0x1000

在Unidbg主动调用时,一定要记得处理,否则会出问题.这是一个常见问题,JAVA层传入的时间戳,常常就是jlong.

处理办法有2

1是按照SO的情况,传给它两个int

2是按照传入诸如 long tm= 1621265630L;的标准写法,Unidbg自动帮我们分割成两个

在这里插入图片描述

2.jbytearray 怎么查看

更宽泛的问法是,有个jobject对象,想查看它的内容,最常见的就是jbyteArray

Frida中可以这么操作

hexdump(ptr(Java.vm.tryGetEnv().getByteArrayElements(args[0])))

Unidbg中当然也可以,以hookZz中为例

public void preCall(Emulator<?> emulator, HookZzArm32RegisterContext ctx, HookEntryInfo info) {
    UnidbgPointer jbytearrayptr = ctx.getPointerArg(2);

    DvmObject<?> dvmbytes = vm.getObject(jbytearrayptr.toIntPeer());
    // 取出byte
    byte[] result = (byte[]) dvmbytes.getValue();
    // 转换成String 或者按需转成其他
    System.out.println(new String(result));
};

3.std::string 的读写

public String readStdString(Pointer strptr){
    Boolean isTiny = (strptr.getByte(0) & 1) == 0;
    if(isTiny){
        return strptr.getString(1);
    }
    return strptr.getPointer(emulator.getPointerSize()* 2L).getString(0);
}

public void writeStdString(Pointer strptr, String content){
    Boolean isTiny = (strptr.getByte(0) & 1) == 0;
    if(isTiny){
        strptr.write(1, content.getBytes(StandardCharsets.UTF_8), 0, content.length());
    }
    strptr.getPointer(emulator.getPointerSize()* 2L).write(0, content.getBytes(StandardCharsets.UTF_8), 0, content.length());
};

4.TraceCode为什么trace不到module init中的指令

在这里插入图片描述

是因为traceCode的执行时机晚了,load library在它前面…只需要确认module base 和module size后,将emulator.traceCode写在loadlibrary前面即可.

5.HOOK 框架使用问题

Unidbg支持了数个Hook框架,HookZz和Dobby就是其中两个.有人会困惑,HookZz不就是Dobby前身吗,两者不是一个东西吗?为什么要说两个Hook框架?

这其实是有原因的,Unidbg作者在注释中写道:HookZz在arm32位上支持较好,Dobby在64位上支持较好.(因此将两者,或者说Dobby以及其前身HookZz作为两个独立Hook工具)

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
unidbg是一个针对Android系统的动态二进制分析工具,它能够模拟和分析Android应用程序的执行过程。该工具利用了QEMU和Unicorn模拟器的特性,通过对虚拟机进行操控,实现对Android应用程序的脱壳、动态调试、动态修改等功能。 与传统的静态分析工具相比,unidbg具有很多优势。首先,unidbg采用动态分析的方式进行分析,能够绕过代码的混淆和加密,对于那些使用加密算法进行保护的应用程序也能有效地进行分析。其次,unidbg不需要对应用程序进行重新编译,能够直接加载原始二进制文件进行执行,节省了分析时间和资源。此外,unidbg可以模拟各种硬件平台和系统版本,方便进行兼容性和兼容性测试。 而xhs指的是小红书应用,是一款流行的社交媒体应用程序,用户可以在其中分享生活中的照片、美食、旅行等内容,并与其他用户进行互动和交流。 结合上述两个概念,如果要使用unidbg分析小红书应用(xhs),可以通过以下步骤进行: 1. 在模拟器或真机环境中安装unidbg工具,并准备好相应的系统库和插件。 2. 将小红书应用程序的安装包导入到模拟器或真机环境中。 3. 使用unidbg命令行工具或API,加载小红书应用程序的二进制文件,并开始动态分析。 4. 在动态分析过程中,可以对小红书应用程序进行脱壳、hook函数、修改数据等操作,以获取目标应用程序的内部逻辑和敏感数据。 5. 通过观察和分析unidbg的执行日志,可以获取关键信息,如函数调用堆栈、内存读写等,进一步研究和理解小红书应用程序的工作原理。 综上所述,unidbg工具可以作为一种有效的动态分析工具,用于分析小红书应用程序和其他Android应用程序的执行过程,帮助开发者进行bug修复、反编译分析、代码优化和安全评估等工作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值