《安卓逆向这档事》第二十三课、黑盒魔法之Unidbg

查看 102|回复 10
作者:NightStar52   

一、课程目标
1.了解unicorn与unidbg
2.源码学习unidbg的常用api
3.了解unidbg_hook
4.了解unidbg_patch
二、工具
1.教程Demo
2.IDEA
3.IDA
三、课程内容
一.unicorn&unidbg
1.什么是unicorn

开源地址
Unicorn 是一个由新加坡南洋理工大学团队在2015年开源的CPU模拟器框架,它支持多种架构,包括X86/X64/ARM/ARM64/MIPS等。Unicorn 的主要特点是:
[ol]
  • 多架构支持:它能够模拟不同架构的CPU指令,这使得它在跨平台分析和测试中非常有用。
  • 高性能:Unicorn 通过使用JIT(Just-In-Time)编译技术,将模拟的指令翻译成宿主机的本地指令,从而提高了执行效率。
  • 丰富的接口:Unicorn 提供了多种语言的绑定,包括Python、Java、C#等,使得在不同编程环境中都能方便地使用。
  • Hook和拦截功能:Unicorn 允许用户在模拟执行过程中设置Hook,拦截和处理特定的指令或内存访问,这对于逆向工程和动态分析非常有用。
  • 专注于CPU模拟:与一些既模拟CPU又模拟操作系统的模拟器不同,Unicorn 专注于CPU指令的模拟,提供了简单的Hook接口、内存操作接口和指令执行接口,而不涉及操作系统层面的模拟。
    [/ol]
    2.什么是unidbg?
    开源地址
    Unidbg(Unicorn Debugger)是一个开源的轻量级模拟器,主要设计用于模拟执行Android平台上的Native代码。它由凯神在2019年开源,基于Maven构建,使用Java语言编写,可以在IDE中打开和运行。Unidbg能够模拟Android Native函数的执行,让逆向工程师和安全研究人员能够分析和理解二进制文件的运行行为。它支持模拟系统调用和JNI调用,使得可以在模拟环境中执行依赖这些调用的代码。Unidbg基于Unicorn项目,Unidbg的优势在于它提供了一种隐蔽的监控手段,可以模拟复杂的Native环境,帮助用户进行深入的动态分析。由于其开源特性,Unidbg得到了社区的广泛支持和持续更新,成为了Android Native逆向分析领域中一个强有力的工具。
    竞争者: AndroidNativeEmu 和继任者 ExAndroidNativeEmu     (Unidbg优点:模拟实现了更多的系统调用和 JNI)
    3.unidbg的使用场景与优缺点
    [table]
    [tr]
    [td]特性[/td]
    [td]描述[/td]
    [/tr]
    [tr]
    [td]使用场景

    开源, 指令

  • YIUA   

    时长一个小时,干货拉满,表哥们帮忙点点b站关注点击关注
    [i]
    a13389809   

    tql正己师傅!话说unidbg碰到通过proxy(binder?)来调用方法时应该怎么补环境呀,下面代码中方法asInterface返回的是IServiceManager类对象,但最后一行调用方法时传入的getService方法却是ServiceManagerProxy的方法:
    [C++] 纯文本查看 复制代码cls_ServiceManagerNative = (*jnienv)->FindClass(jnienv, "android/os/ServiceManagerNative");
    method_asInterface = (*jnienv)->GetStaticMethodID(jnienv, cls_ServiceManagerNative, "asInterface", "(Landroid/os/IBinder;)Landroid/os/IServiceManager;");
    IServiceManager = (void *)CallStaticObjectMethodV(jnienv, cls_ServiceManagerNative, method_asInterface, ContextObject);
    cls_ServiceManagerProxy = (*jnienv)->FindClass(jnienv, "android/os/ServiceManagerProxy");
    method_getService = (*jnienv)->GetMethodID(jnienv, cls_ServiceManagerProxy, "getService", "(Ljava/lang/String;)Landroid/os/IBinder;");
    v13 = (*jnienv)->NewStringUTF(jnienv, "package");
    v14 = (void *)CallObjectMethodV(jnienv, IServiceManager, method_getService, v13);
    qiuyu2019   

    正己哥太强了,爱了
    ring0day   

    学习了 谢谢分享
    刘统宝   

    牛! 受教了
    lc2006   

    楼主已达本人望尘莫及的高度
    massle   

    楼主介绍的很详细,有几个问题在这里解决了,谢谢。
    a13389809   

    学完必成达人,加油~
    YIUA   

    《安卓逆向这档事》第二十三课、黑盒魔法之Unidbg ,好看,巨好看
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部