app安全之安卓native层安全分析(四):unidbg模拟调用

认识Unidbg for32Bit() //指定模拟器目标平台.setProcessName("com.qidian.dldl.official") //设置进程名.addBackendFactory(new Unicorn2Factory(true)) //模拟器的底层执行引擎.build();// 创建模拟器实例// 获取模拟器的内存操作接口// 设置系统库解析器// 创建一个 Dalvik 虚拟机实例。// 设置虚拟机的日志输出模式。 阅读详情

前言

继续跟着龙哥的unidbg学习:SO逆向入门实战教程四:mfw_so层逆向_白龙~的博客-优快云博客

还是那句,我会借鉴龙哥的文章,以一个初学者的角度,加上自己的理解,把内容丰富一下,尽量做到不在龙哥的基础上画蛇添足,哈哈。感谢观看的朋友

分析

首先打开目标app,然后随便搜个东西,抓个包看看:
 

其中,上面的这个zzzghostsigh参数就是我们要逆向的加密参数了。

1.找加密位置

jadx直接搜:

然后再搜这个【HTTP_BASE_PARAM_GHOSTSIGH】

 ok,根据刚才的逻辑跟栈,就是这个xPreAuthencode方法了

objection hook确认:

好的,就是这里了,看到第一个参数是一个context,第二个是哥字符串,感觉像是把url啥的全拼到一起了,第三个参数就是这个app的包名

2.ida分析so

把目标so文件拖进去,卧槽,一团乱,也是动态注册的,卧槽

多说无益,直接用unidbg吧

unidbg调试

1.搭架子

package com.mfw;

import com.github.unidbg.AndroidEmulator;
import com.github.unidbg.Module;
import com.github.unidbg.linux.android.AndroidEmulatorBuilder;
import com.github.unidbg.linux.android.AndroidResolver;
import com.github.unidbg.linux.android.dvm.AbstractJni;
import com.github.unidbg.linux.android.dvm.DalvikModule;
import com.github.unidbg.linux.android.dvm.VM;
import com.github.unidbg.memory.Memory;

import java.io.File;

public class roadbook extends AbstractJni {
    private final AndroidEmulator emulator;
    private final VM vm;
    private final Module module;

    roadbook() {
        // 创建模拟器实例,进程名建议依照实际进程名填写,可以规避针对进程名的校验
        emulator = AndroidEmulatorBuilder.for32Bit().setProcessName("com.sina.oasis").build();
        // 获取模拟器的内存操作接口
        final Memory memory = emulator.getMemory();
        // 设置系统类库解析
        memory.setLibraryResolver(new AndroidResolver(23));
        // 创建Android虚拟机,传入APK,Unidbg可以替我们做部分签名校验的工作
        vm = emulator.createDalvikVM(new File("unidbg-android\\src\\test\\java\\com\\mfw\\mafengwo.apk"));
        // 加载目标SO
        DalvikModule dm = vm.loadLibrary(new File("unidbg-android\\src\\test\\java\\com\\mfw\\libmfw.so"), true); // 加载so到虚拟内存
        //获取本SO模块的句柄,后续需要用它
        module = dm.getModule();
        vm.setJni(this); // 设置JNI
        vm.setVerbose(true); // 打印日志
        dm.callJNI_OnLoad(emulator); // 调用JNI OnLoad
    }


    public static void main(String[] args) {
        roadbook test = new roadbook();
    }
}

运行一下,好像没有啥问题,而且还把地址打印出来了:

2.主动调用

直接干吧,没啥好说的,把hook的参数复制过去

package com.mfw;

import com.github.unidbg.AndroidEmulator;
import com.github.unidbg.Module;
import com.github.unidbg.linux.android.AndroidEmulatorBuilder;
import com.github.unidbg.linux.android.AndroidResolver;
import com.github.unidbg.linux.android.dvm.*;
import com.github.unidbg.memory.Memory;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class roadbook extends AbstractJni {
    private final AndroidEmulator emulator;
    private final VM vm;
    private final Module module;

    roadbook() {
        // 创建模拟器实例,进程名建议依照实际进程名填写,可以规避针对进程名的校验
        emulator = AndroidEmulatorBuilder.for32Bit().setProcessName("com.sina.oasis").build();
        // 获取模拟器的内存操作接口
        final Memory memory = emulator.getMemory();
        // 设置系统类库解析
        memory.setLibraryResolver(new AndroidResolver(23));
        // 创建Android虚拟机,传入APK,Unidbg可以替我们做部分签名校验的工作
        vm = emulator.createDalvikVM(new File("unidbg-android\\src\\test\\java\\com\\mfw\\mafengwo.apk"));
        // 加载目标SO
        DalvikModule dm = vm.loadLibrary(new File("unidbg-android\\src\\test\\java\\com\\mfw\\libmfw.so"), true); // 加载so到虚拟内存
        //获取本SO模块的句柄,后续需要用它
        module = dm.getModule();
        vm.setJni(this); // 设置JNI
        vm.setVerbose(true); // 打印日志
        dm.callJNI_OnLoad(emulator); // 调用JNI OnLoad
    }


    public static void main(String[] args) {
        roadbook test = new roadbook();
        System.out.println(test.xPreAuthencode());
    }
    public String xPreAuthencode(){
        List<Object> list = new ArrayList<>(10);
        list.add(vm.getJNIEnv());
        list.add(0);
        DvmObject<?> context = vm.resolveClass("android/content/Context").newObject(null);
        list.add(vm.addGlobalObject(context));
        list.add(vm.addLocalObject(new StringObject(vm,"GET&https%3A%2F%2Fmapi.mafengwo.cn%2Frest%2Fapp%2Fv2%2Fmdd%2Fposition%2F104.068237_30.537864&app_code%3Dcom.mfw.roadbook%26app_ver%3D9.3.7%26app_version_code%3D734%26brand%3DXiaomi%26channel_id%3DMFW%26dev_ver%3DD1907.0%26device_id%3D4C%253A49%253AE3%253ACA%253A75%253A35%26device_type%3Dandroid%26hardware_model%3DMI%25206%26has_notch%3D0%26mfwsdk_ver%3D20140507%26o_lat%3D30.537864%26o_lng%3D104.068237%26oauth_consumer_key%3D5%26oauth_nonce%3D0b4bc80a-6496-4e96-82f9-b67d289759d1%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1682412429%26oauth_token%3D0_0969044fd4edf59957f4a39bce9200c6%26oauth_version%3D1.0%26open_udid%3D4C%253A49%253AE3%253ACA%253A75%253A35%26patch_ver%3D3.0%26screen_height%3D1920%26screen_scale%3D2.88%26screen_width%3D1080%26sys_ver%3D9%26time_offset%3D480%26x_auth_mode%3Dclient_auth")));
        list.add(vm.addLocalObject(new StringObject(vm,"com.mfw.roadbook")));
        Number number =  module.callFunction(emulator,0x2e301,list.toArray());
        String result = vm.getObject(number.intValue()).getValue().toString();
        return result;
    }
}

然后执行,结果一致

 就很轻松加愉快

知识点总结

第四部分没啥技术知识点,都是老套路

app安全之安卓native层安全分析(八):unidbg补前置环境+IO重定向 SO逆向入门实战教程七:main_unidbg 重定向_白龙~的博客-优快云博客还是那句,我会借鉴龙哥的文章,以一个初学者的角度,加上自己的理解,把内容丰富一下,尽量做到不在龙哥的基础上画蛇添足。1.找不到该native方法引入的哪个so文件时,用hook_RegisterNative脚本分析2.执行结果发现不对返回空指针时,很大可能是逻辑问题,需要结合jnitrace分析3.报dirfd=-100,就是读取文件错误,需要指导程序到正确的路径4.补文件读取有两个方法。 阅读详情

相关推荐

龙哥unidbg基础入门

龙哥unidbg入门系列

kreas的博客 1万+

APP逆向 day24unidbg上

unidbg是一个Java开源项目,可以帮助我们去模拟一个安卓或IOS设备,用于去执行so文件中的算法,从而不需要再去逆向他内部的算法它是一个基于 unicorn 的逆向工具,可以直接调用Android和iOS中的 so 文件允许您模拟 Android native library 和 实验性的 iOS 模拟而在什么时候使用unidbg呢?

一起进步 7387

Unidbg实战:Android Native层签名算法逆向与模拟执行

在移动安全与逆向工程领域,Native层加密算法分析是核心技术挑战之一。其原理在于Android应用将核心逻辑编译为so动态库,通过JNI接口与Java层交互,以提升代码安全性和执行效率。这项技术的工程价值在于能够有效对抗动态调试和静态反编译,保护关键业务逻辑如API签名、数据加密等。在实际应用场景中,逆向工程师常需分析网络协议、实现自动化脚本或进行安全审计。针对此类需求,Unidbg模拟执行框架提供了一种高效解决方案,它允许在PC端虚拟环境中直接运行so库代码,绕过了反调试检测和环境依赖问题。本文以某州A

weixin_34379433的博客 423

Unidbg:全面解析与实战操作手册

Unidbg 是一个基于 Java 的跨平台逆向工具框架,专注于对原生库(如.so 文件和.dll 文件)的模拟分析。它支持多种 CPU 架构,包括 ARM、ARM64、x86 和 x86 - 64 等,这使得它能够广泛应用于 Android 和 iOS 应用的逆向工程中。通过模拟 CPU 环境、内存管理以及系统函数调用等关键组件,Unidbg 能够在 Java 虚拟机(JVM)上精准地执行原生代码,为深入探究应用的内部逻辑和安全机制提供了可能。

m0_57836225的博客 3442

unidbg集成xHook实现Android Native层动态分析与Hook

在Android安全研究与逆向工程领域,动态库(.so文件)的Hook技术是核心分析手段,用于拦截和修改函数行为以理解或干预程序逻辑。其原理通常基于动态链接机制,通过修改函数指针(如PLT/GOT表)实现调用重定向。这项技术的价值在于能够在不修改源码的情况下,动态监控、调试和改变程序执行流,广泛应用于加密算法分析、协议逆向、漏洞挖掘及风控对抗等场景。其中,unidbg作为模拟执行工具,提供了脱离真实设备的沙盒环境,而xHook作为高效的PLT Hook库,专注于拦截动态库间的函数调用。两者的结合,使得在模拟

weixin_34375251的博客 365

unidbg教程 模拟测试起点app中的so函数

文章摘要: 本文介绍了使用Unidbg框架模拟执行Android native加密库libttEncrypt.so的过程。通过创建32位模拟器实例,加载目标so库并调用JNI_OnLoad函数,实现对加密方法的分析。文章详细展示了如何查找符号表、Hook关键函数(如ss_encrypt)、监控参数传递等逆向分析技术,并比较了HookZz、Dobby和xHook三种Hook工具的使用方法。该案例为分析Android native层加密算法提供了完整的技术实现路径,包括内存数据提取、函数调用跟踪和参数监控等关键

hhtt19820919的博客 1481

app安全之安卓native层安全分析(一):frida 与unidbg

unidbg 是一个基于 unicorn 的安全分析工具,可以实现黑盒调用安卓和 iOS 中的 so 文件unidbg是凯神写的一个开源的java项目静态注册(又叫静态绑定),就是,so的方法名直接export导出表里,且命名格式为【java_app包名_方法名】,比如动态注册(又叫动态绑定)就是export到处表里没有的就是动态注册。那么这里我们的目标方法就是动态注册的了,那咋办,看看JNI_load方法:!按下【tab】键,会由上面的汇编代码反编译为c代码:!

m0_61869253的博客 1549

移动安全逆向利器:unidbg无源码Native代码模拟执行实战指南

在移动安全与逆向工程领域,动态链接库(SO文件)中的核心算法逆向是常见挑战。传统静态分析与动态Hook工具在面对混淆、反调试的Native代码时往往效率低下。unidbg作为一种创新的解决方案,其核心原理是构建一个无设备、无源码的Native代码解释执行沙箱,能够在Java或Python进程中直接加载并模拟执行SO文件中的函数,同时模拟Android/iOS的JNI接口与系统环境。这项技术的核心价值在于实现了对加密、签名等关键算法的黑盒式分析与调用,极大提升了逆向工程效率。在应用场景上,unidbg特别适用

weixin_33670713的博客 421

app安全之安卓native层安全分析(三):ida使用+unidbg补环境

SO入门实战教程三:V2-Sign_unidbg context_白龙~的博客-优快云博客还是那句,我会借鉴龙哥的文章,以一个初学者的角度,加上自己的理解,把内容丰富一下,尽量做到不在龙哥的基础上画蛇添足,哈哈。1.看so的调用逻辑,如果有loadlibrary的同时有调用某个方法,unidbg模拟执行的时候也要先调用这个方法2.如果加载so文件的时候,给定的第二个参数是false,加上so文件有字符串加密和混淆的话就会乱码,所以这里最好给为true,ida里,shift+F7,可以看。

m0_61869253的博客 2523

Android逆向实战:Unidbg模拟执行与so层sign算法解析

本文详细介绍了在Android逆向工程中,如何利用Unidbg工具模拟执行so层原生代码,以解析复杂的sign签名算法。通过实战案例,从环境搭建、样本分析到代码编写,逐步演示了如何绕过反调试、高效复现算法逻辑,并结合动态Hook与静态分析,最终定位并验证了MD5加盐的签名生成过程。

weixin_28607671的博客 1022

使用unidbg模拟执行逆向分析PDD应用Native层anti机制实战

在移动安全与逆向工程领域,分析加固应用的Native层逻辑是常见挑战。其核心原理在于通过模拟执行技术,在隔离的虚拟环境中运行目标代码,从而绕过传统动态调试面临的反调试检测。这项技术的核心价值在于能够高效、可控地分析黑盒般的加密算法、协议生成及环境检测逻辑,广泛应用于设备指纹生成、请求签名验证等风控场景。本文以PDD应用的anti机制为具体案例,详细阐述了如何利用unidbg框架,通过Hook关键系统调用、处理JNI交互及对抗代码自校验等策略,成功模拟执行其核心Native函数,为理解此类高防护应用的内部逻辑

weixin_28607671的博客 346

app安全之安卓native层安全分析(五):unidbg黑盒调用

SO逆向入门实战教程五:qxs_白龙~的博客-优快云博客还是那句,我会借鉴龙哥的文章,以一个初学者的角度,加上自己的理解,把内容丰富一下,尽量做到不在龙哥的基础上画蛇添足,哈哈。本篇和上一篇感觉的挺简单的,所以没有啥总结的。

app安全逆向、移动开发、tls/ja3、爬虫、反爬 1383

Windows server Database 2025 安装 i225/i226 网卡驱动

Windows server Database 2025 安装 i225/i226 网卡驱动 windows这比坏得很,intel消费级网卡不准在服务器系统上安装。你要说他是异构不支持?他就纯粹恶心人。 之前已经安装过一次,但是今天database预览版一更新,又给我把网卡驱动杀了,气死,写一篇教程。 到这里就完成了,总之还是想辱骂windows,提供便捷的同时又人为制造困难,多少有点(隔壁linux内核直接自带全家桶了就一省心) 并且近年Intel的新U安装显卡驱动和普通声卡驱动都不会出声

低温热源的博客 1万+

app安全之安卓native层安全分析(六):frida调试跟栈+unidbg补环境大动作

SO逆向入门实战教程六:s_白龙~的博客-优快云博客还是那句,我会借鉴龙哥的文章,以一个初学者的角度,加上自己的理解,把内容丰富一下,尽量做到不在龙哥的基础上画蛇添足,哈哈。1.treemap需要注意下,在unidbg里需要继承map,abstractmap2.varArg.getObjectArg(0)可以获取该方法的参数,0,指第一个,1指第二个。

app安全逆向、移动开发、tls/ja3、爬虫、反爬 9597

PnP 单目相机位姿估计(二):solvePnP利用二维码求解相机世界坐标

前言 原理简介 输入参数准备 1 objectPoints特征点世界坐标 2 imagePoints特征点在摄像头下的像素点坐标 3cameraMatrixdistCoeffs内参矩阵和畸变矩阵 相机世界坐标的求解 1求世界坐标中的点在相机坐标系下的坐标 2求相机在世界坐标中的坐标 3效果求解相机在世界坐标系下的坐标点 4求解代码1.前言  很多时候,当我们利用单目相机获取图像时,往往只能获取图像中

cocoaqin的博客 5万+

B站李沐讲论文笔记AlexNet

B站李沐讲论文笔记AlexNet

夏知识不进脑子薇的博客 789

app安全之安卓native层安全分析(二):unidbg+ida使用+过签名校验

SO入门实战教程二:calculateS_so _白龙~的博客-优快云博客还是那句,我会借鉴龙哥的文章,以一个初学者的角度,加上自己的理解,把内容丰富一下,尽量做到不在龙哥的基础上画蛇添足,哈哈。1.ida,按y修改JNIEnv,IDA 7.5之前,JNIEnv需要导入jni.h,7.5之后不需要导入jni.h文件2.ida,按g 输入地址跳转3.ida,按x,查看交叉引用4.ida,optional->generel,把这个改成4,可以查看架构模式,arm架构是固定4位,thumb架构是混合的。

app安全逆向、移动开发、tls/ja3、爬虫、反爬 3633

淘晶驰串口屏自定义协议实战:5分钟搞定苹果时钟通信(附完整代码)

本文详细介绍了如何使用淘晶驰串口屏自定义通信协议快速实现苹果风格时钟的通信功能。通过精简的协议设计和完整的代码示例,开发者可以在5分钟内完成从硬件连接到软件实现的整个过程,适用于嵌入式开发中的高效通信需求。

weixin_29184371的博客 323

unidbg逆向分析实战:移动端Native算法模拟与Hook技术详解

在移动安全与逆向工程领域,动态分析技术是理解核心算法逻辑的关键。传统调试工具如Frida虽功能强大,但常面临反调试、环境依赖等挑战。unidbg作为一种创新的沙盒模拟方案,通过构建虚拟CPU与操作系统环境,实现了对Android so与iOS Mach-O文件的指令级模拟执行。其核心价值在于无需真实设备或Root权限,即可在PC端完整复现算法执行流程,尤其适用于签名算法、加密协议等关键逻辑的提取与分析。本文聚焦unidbg的实战应用,深入解析其JNI桥接、系统调用模拟等核心机制,并通过Hook技术、内存操作

weixin_34228387的博客 338

【Arduino 动手做】构建一个迷你 Las Vegas RGB LED 球体

《Arduino迷你拉斯维加斯球体项目:15岁少年的创意挑战》 15岁的Ben通过本项目展示了如何利用Arduino平台制作一个经济实惠的迷你拉斯维加斯球体夜灯。该项目涉及LED选择(采用WS2812B可编程灯带)、电子元件配置(含Arduino Nano微控制器和红外遥控)以及3D建模设计(100毫米直径球体)。项目难点包括LED布局优化、供电方案设计和3D打印外壳制作。Ben详细记录了从背景研究、电路设计到最终实现的完整过程,特别强调了分辨率与成本的平衡,以及如何通过白色扩散器改善视觉效果。这个项目不仅

雕爷学编程 1024

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

weixin_42412049的博客 1015

unidbg 实战:逆向某汽车类App请求加密全流程解析

本文详细解析了使用unidbg模拟执行技术逆向分析某汽车类App请求加密的全流程。从准备工作、加密函数定位到unidbg环境搭建与配置,再到补环境技巧和加密算法复现,提供了完整的实战指南。特别分享了unidbg在模拟执行Android原生代码时的关键技巧和常见问题解决方案,帮助开发者高效完成逆向工程任务。

weixin_27330481的博客 1027

飞牛fnNAS搭建web版微信

摘要:本文介绍了一种通过Docker在飞牛NAS上部署微信客户端的方法,实现24小时同步微信聊天记录。具体步骤包括:1)激活飞牛NAS的Docker功能并配置镜像加速源;2)创建专用文件夹并下载docker-wechat镜像;3)设置容器参数并部署微信客户端;4)通过局域网或ZeroTier内网穿透实现远程访问。相比传统Windows/Linux方案,该方法资源占用更低,适合需要长期保存微信聊天记录的用户。

dgnankai的专栏 3333
上一篇: app安全之安卓native层安全分析(三):ida使用+unidbg补环境
下一篇: 2023安卓&web网络协议
geekbyte.
博客等级 码龄11年 308粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值