unidbg安装运行

1.unicorn介绍

好比是一个CPU,可以模拟执行各种指令
提供了很多编程语言接口,可以操作内存、寄存器等
但它不是一个系统,内存管理、文件管理、系统调用等都需要自己来实现

2.基于unicorn开发的框架

cemu用来学习汇编的工具
AndroidNativeEmu Python开发
unidbgJava开发

3.unidbg

支持模拟JNI调用
支持模拟系统调用指令
支持ARM32和ARM64
支持Hookzz、Dobby、xHook、原生unicornHook等Hook方式
支持Android、iOS
好比是在CPU上搭建了一个系统,因此可以很方便地在PC端模拟运行SO
学习成本较低,不需要复现so算法,补环境后直接运行即可

4.unidbg项目地址

https://github.com/zhkl0228/unidbg

5.导入工程

从GitHub下载项目,解压后,使用IDEA打开

6.工程结构

unidbg-master -> unidbg-android -> src
    main 工程源码
    test 测试案例
        java 源码
        resources 资源

7.等待初始化

第一次打开等待下载依赖完成

8.初始化完成后测试运行就报错: java: 错误: 不支持发行版本 7

当前下的这个 unidbg-0.9.7 好像默认的是 java 1.7,(在全局的pom.xml中),我没有java 1.7,用的21然后报错了,

gpt说**在 Maven 项目中, `3.3` 是 Maven Compiler Plugin 的版本, `1.7` 是 Java 版本**

那我将项目结构用 1.8将**全局的pom.xml**改成 1.8,然后 pom.xml 右上角会提示重新加载,点一下重载后就没这个报错了。

但是之后我为了验证,将这里重新从1.8 改为 1.7 运行也不报错了,那就不管了。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>

测试运行项目有没有问题, 运行 -->

根目录下的 unidbg-android/ src/ test/ java/ com/ bytedance.../ TTEncrypt 

### Unidbg iOS 调试与逆向工程 Unidbg 是一款用于模拟执行 ARM 和 MIPS 架构二进制文件的 Java 库,支持 Android 的 ELF 文件以及动态库的加载和函数调用。对于 iOS 相关的调试与逆向工程工作而言,尽管 Unidbg 主要针对的是 Android 平台上的应用,但是由于其底层机制的支持,也可以被用来处理部分 iOS 上的相关任务。 #### 使用场景 当涉及到 iOS 设备中的应用程序时,通常会遇到如下几种情况: - **越狱环境下的直接操作**:如果目标设备已经完成越狱,则可以直接安装运行自定义工具来进行更深入的操作。 - **非侵入式的远程分析**:通过提取 IPA 或者 App Store 下载的应用包,在本地环境中利用 Unidbg 来解析其中包含的 Mach-O 可执行文件或框架内的共享库[^1]。 #### 实现过程 为了实现上述功能,可以按照以下方式来设置开发环境: ```bash git clone https://github.com/unidbg/unidbg-examples.git cd unidbg-examples/ios/ ./gradlew build java -jar ./build/libs/unidbg-ios-example.jar ``` 这段脚本将会克隆官方仓库中有关于 iOS 示例项目的代码,并编译构建该项目以便后续测试使用。 接下来就是编写具体的业务逻辑了,这里给出一段简单的 Python 伪代码作为示范(实际项目里应采用 Java 编写): ```python from unidbg import * from unidbg.fileio import * # 初始化模拟器实例 emu = Emulator() emu.load('libexample.dylib') # 设置断点位置 breakpoint_address = emu.find_function('_objc_msgSend') emu.set_breakpoint(breakpoint_address) while True: try: # 运行到下一个断点处暂停 emu.resume_and_wait_for_signal() # 获取当前寄存器状态和其他上下文信息 context = emu.get_context() print(f"Hit breakpoint at address {hex(context.pc)}") # 执行一些额外的动作... except Exception as e: break ``` 此段代码展示了如何创建一个基于 Unidbg 的仿真环境,并且能够在指定地址设置断点监听特定 API 的调用行为;同时还可以读取 CPU 寄存器的状态以及其他有用的信息帮助理解程序流程。 需要注意的是,以上介绍的内容仅适用于学习目的和技术交流用途,请勿将其应用于非法活动之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值