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

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

前言

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

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

分析

首先,安装app,发现龙哥给的apk包已经安装不上,网上重新找了个最新版,安装后,正常打开,然后,抓个包:

ok,这个sfsecurity参数就是今天的重点了。

这个app有ajm的壳,没事,脱壳手段上,结果搞半天没脱出来,卧槽了,而且还有 frida反调试

脱壳机也不在身边,那没法,直接黑盒调用,unidbg就是干这个的。

调试

1.搭架子

运行没问题

不过这里,unidbg并没有打印出来我们要的方法和地址 

2.ida找地址

这时候就需要用ida找地址了,结果发现,这个so文件有点奇怪,搜不到,但是在导出表里看得到,这就很奇怪了,根据分析,猜测是有一定的保护,也没办法通过F5反编译 

很快就找到这里了,【0xAB2C】 ,注意,这里我用的是最新版,所以地址跟龙哥博客的地址不一样

3.黑盒调用&补环境

这里,我选用的是32位,所以得加1,因为我把apk解包,从lib\armeabi-v7a里找的这个so文件,所以他一定是32位的(根据安卓开发规范)

ok,报了个环境的错,补一补:

 ok,又有新的报错,继续补:

ok,搞定

这里,由于我是根据龙哥的博客,知道是哪个so方法,所以直接黑盒调用,也没有用objection hook,它有frida反调试(objection基于frida),那就尴尬了,所以这里没法验证hook值和主动调用值是否一致了。那就暂时这样,反正值是有了

完整代码:

package com.qxs;

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.linux.android.dvm.api.Binder;
import com.github.unidbg.linux.android.dvm.api.ServiceManager;
import com.github.unidbg.memory.Memory;

import java.io.File;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.UUID;

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

    qxs() {
        // 创建模拟器实例,进程名建议依照实际进程名填写,可以规避针对进程名的校验
        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\\qxs\\com.sfacg.apk"));
        // 加载目标SO
        DalvikModule dm = vm.loadLibrary(new File("unidbg-android\\src\\test\\java\\com\\qxs\\libsfdata.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) {
        qxs test = new qxs();
        System.out.println(test.sfsecurity());
    }
    public String sfsecurity(){
        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,"test")));
        Number number =  module.callFunction(emulator,0xAB2C+1,list.toArray());
        String result = vm.getObject(number.intValue()).getValue().toString();
        return result;
    }
    @Override
    public DvmObject<?> callStaticObjectMethodV(BaseVM vm, DvmClass dvmClass, String signature, VaList vaList) {
        switch (signature) {
            case "java/util/UUID->randomUUID()Ljava/util/UUID;":
                return dvmClass.newObject(UUID.randomUUID());
        }
        return super.callStaticObjectMethodV(vm, dvmClass, signature, vaList);
    }

    @Override
    public DvmObject<?> callObjectMethodV(BaseVM vm, DvmObject<?> dvmObject, String signature, VaList vaList) {
        switch (signature) {
            case "java/util/UUID->toString()Ljava/lang/String;":
                String uuid = dvmObject.getValue().toString();
                return new StringObject(vm, uuid);
        }
        return super.callObjectMethodV(vm, dvmObject, signature, vaList);
    }
}

知识点总结

本篇和上一篇感觉的挺简单的,所以没有啥总结的

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

相关推荐

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

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

weixin_34375251的博客 365

Unidbg调用-补环境V1

遇到 Java 的类库,可以执行返回结果;

dafan0的博客 542

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

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

weixin_33670713的博客 421

unidbg-最右之白龙分析

【代码】unidbg-最右之白龙分析。

Codeooo 博客 1万+

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

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

weixin_28607671的博客 1022

Unidbg实战:逆向汽车App加密算法,从黑盒到透明

在移动应用安全与协议分析领域,加密算法逆向是核心挑战之一。其原理在于,许多应用将核心加密逻辑编译进原生库(.so文件)以提升安全性,这导致传统的静态分析工具难以直接窥探。这项技术的价值在于,它能够绕过应用加固和动态加载机制,为安全研究、协议分析和自动化脚本开发提供可能。典型的应用场景包括分析网络请求签名、还原通信协议以及进行安全漏洞挖掘。本文聚焦于利用Unidbg框架,通过模拟执行Android原生库,实战逆向一款汽车服务类App的请求加密算法。文章详细介绍了从网络抓包、静态分析定位加密点,到搭建Unidb

anmishi2025的博客 315

Unidbg系列总结

关于Unidbg基础内容的介绍基本全面了,个人感觉这系列文章还是不错der。 后续的绝大多数文章、视频放知识星球和课程中,课程之后出,因为感觉现在能力害欠缺。知识星球现在就可以加了,知识星球主打基于Unidbg的模拟执行与算法还原。 内容主要来自三部分 现有内容的重新制作,不少人反映”可以更仔细一些“,说实话,不少文章都有前置知识和基础要求,所以系列文章会再精心的重新制作,以文章或者视频的方式和大家在知识星球再次见面 不断更新的新文章,以SO层实战为主题,每周一篇左右,质量不低于这一系列文章,我们的目标是

lilac的博客 6810

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

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

weixin_28607671的博客 346

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

这个专题是根据龙哥的unidbg博客的案例,核心部分会借鉴龙哥的unidbg,通过借鉴大佬的思路,完整的分析某个so层的加密参数各位朋友也可以直接读龙哥的博客,我只是用我的角度进一步加工一下SO入门实战教程一:OASIS_so学习路线_白龙~的博客-优快云博客unidbg 是一个基于 unicorn 的安全分析工具,可以实现黑盒调用安卓和 iOS 中的 so 文件unidbg是凯神写的一个开源的java项目。

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

实战:用Frida+Unidbg逆向分析绿洲APP的sign加密(附完整代码)

本文通过实战案例,详细讲解了如何运用Frida动态Hook与Unidbg模拟执行两大工具,逆向分析Android应用绿洲APP的sign加密算法。文章从Java层定位到SO层核心函数,解决了ARM架构兼容性问题,并最终识别出MD5加盐的签名生成逻辑,为移动端安全研究和协议分析提供了完整的方法论与代码参考。

weixin_29323049的博客 1000

逆向分析App加密算法:绕过Frida反调试与Unidbg模拟执行实战

在移动应用安全领域,加密算法与反调试技术是核心攻防点。MD5等哈希算法常用于参数签名,而Frida作为主流动态分析工具,常面临反调试检测。理解JNI调用、内存映射检测及ptrace机制,是绕过防护的基础。通过Hook关键系统函数、过滤特征字符串,可有效规避检测,为算法分析创造条件。利用Unidbg模拟执行框架,能在非安卓环境中复现Native层加密逻辑,实现算法还原与批量签名生成。本文聚焦生鲜超市App的paramsMD5算法,结合Frida反反调试与Unidbg实战,详解从对抗加固到算法模拟的完整流程。

weixin_33220360的博客 678

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

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

weixin_34228387的博客 338

安卓SO逆向实战:Unidbg补环境与魔改MD5算法解析

在移动安全与风控对抗领域,逆向分析常面临脱离真实环境执行代码的挑战,尤其是处理经过自定义修改的加密算法。理解算法原理是基础,从常见的哈希函数如MD5切入,其标准流程包括填充、分组、多轮非线性运算等。当算法被“魔改”——例如修改初始常量、调整移位规则后,静态分析便难以奏效。此时,动态模拟执行技术展现出其技术价值,它允许在受控的沙箱环境中运行和调试代码。Unidbg作为一款基于Unicorn引擎的模拟器,正是实现这一目标的核心工具,它通过“补环境”来模拟系统调用和JNI接口,解决了SO文件对安卓运行时的依赖。这

chutisun0039的博客 332

安卓APP逆向进阶:动态调试、算法还原与协议破解实战指南

在移动应用安全与数据分析领域,逆向工程是理解应用内部逻辑、分析通信协议的核心技术。其基本原理是通过静态与动态分析手段,解析应用代码与数据流,从而还原其运行机制。这项技术的核心价值在于能够穿透应用防护,实现安全评估、数据接口分析及自动化流程构建。在应用场景上,广泛服务于安全研究、数据采集、风控策略验证及自动化测试等多个领域。本文聚焦于安卓APP逆向的中高阶实战,系统讲解如何运用Frida动态调试、Unidbg模拟执行等关键技术,解决代码混淆、SSL Pinning、Native层加密等核心难题,最终实现从协议

axfcjwkbi259888707的博客 387

Frida与Unidbg实战:逆向分析移动端API签名算法

在移动应用安全与数据通信领域,API签名是保障请求合法性、防止数据篡改与重放攻击的核心安全机制。其原理通常基于哈希算法(如MD5、SHA系列)或消息认证码(HMAC),对请求参数、时间戳及密钥进行特定组合与计算,生成唯一的身份凭证。这项技术的价值在于为客户端与服务器间的通信建立了可信验证层,广泛应用于金融支付、社交网络、电商平台等涉及敏感数据交互的场景。本文聚焦于**Frida动态注入**与**Unidbg模拟执行**两大逆向工程利器的协同运用,通过一个完整案例,系统演示如何定位、分析并最终复现一个典型移动

weixin_34199335的博客 396

TikTok X-Gorgon签名算法逆向与Unidbg补环境实战解析

在移动应用安全与协议分析领域,签名算法是保障通信安全与身份验证的核心机制,其原理通常基于密码学哈希函数(如HMAC-SHA256)与特定输入参数的组合运算,以实现数据完整性和来源认证。这项技术的工程价值在于,深入理解签名生成逻辑有助于进行安全评估、风控策略研究以及合规的自动化流程开发。典型的应用场景包括移动应用通信协议分析、API接口调试与自动化测试等。本文聚焦于TikTok应用核心签名参数X-Gorgon的逆向工程,详细阐述了如何通过静态分析与动态调试定位算法逻辑,并重点介绍了使用Unidbg工具模拟执行

weixin_28622215的博客 272

逆向技巧:如何快速定位APP签名算法?以绿洲so层MD5加密为例

本文以绿洲APP为例,详细介绍了如何快速定位移动应用签名算法的逆向工程实战路径。通过从网络抓包、静态分析到动态Hook(如Frida)和SO层逆向分析,系统阐述了定位并识别加盐MD5等签名算法的核心方法,并介绍了使用Unidbg进行算法模拟执行的高效方案,为逆向工程师提供了一套可复用的分析框架。

keras9composer的博客 469

SPL06气压温度传感器SPI驱动与补偿算法详解

气压传感器与温度传感器是嵌入式环境感知系统的核心组件,其测量精度高度依赖于MEMS芯片的校准参数与非线性补偿机制。SPL06作为集成式高精度数字传感器,采用24位Σ-Δ ADC与片内补偿引擎,需结合唯一出厂校准系数(即‘芯片指纹’)进行多阶数学修正,才能将原始ADC值转化为符合计量要求的帕斯卡(Pa)与摄氏度(℃)物理量。该过程涵盖SPI通信协议解析、寄存器时序控制、大端数据拼接、二进制补码处理及浮点/定点混合运算等典型嵌入式工程实践。广泛应用于无人机高度计、智能穿戴海拔监测与IoT气象终端中。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值