APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

本文为看雪论坛精华文章

看雪论坛作者ID:GitRoy


此样本是年初本人拿到官网去加固,回来没有直接dump就直接分析了,可能是我的demo代码太少了,就一句log。分析了几天,发现这个样本没抽取,简单记录一下。文章中若有出错的地方,请大佬们指正,由于是没抽取的版本,可能有些校验之类的没有调试到。





对样本进行简单分析


APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart
Java层 先定位Application:

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


so层看一下:


APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


调试了一段时间,发现和upx特征很相似,所以也按upx的通用方法进行脱壳,下面是修复so的方法。





so脱壳与修复


获取解压缩后的segment数据


断点:0xA38F0(mprotect)

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart
进行dump被压缩的segment,第一个就是起始地址,第二个参数为被压缩的segment原大小。根据原大小和起始地址,可以dump出解压后的内容,然后本地进行修复。


本地修复


修复流程基本是固定的,主要就是把解压缩后的内容,填充回去,这边篇幅原因,修复之前已经写过了,就直接已资源的形式放到文章末尾了。关于最后函数的真实地址,可以直接断点linker执行init的时机(脚本里面有),F7后面就是原来so init函数的真实地址,可以选择性的修复回去。
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

修复后

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart





搭建一个调试环境


1、我这里大概开2个IDA,一个用来打开修复后的so记录日志,另一个用来动态调试。


2、由于修复后的so没办法直接运行,所以只能直接动态调试原包,每次定位init_array。


3、快速定位上一次调试的地址。


4、对ITE指令做一些特殊的处理。


idapython也会在文章末尾给出。注:目前脚本中的偏移地址都是根据Android6.0.1来的。





init_array


init_array在修复后so的偏移sub_E4E8。


经过一段时间分析,没发现特别重要的,主要是做了一些初始化,比如libc中相关函数的初始化。


APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart





JNI_ONLOAD


简介


UPX修复好之后,JNI_ONLOAD已经暴露出来了,看一下代码执行流程图。

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

比较明显,加了不是很复杂的ollvm,IDA 7.5 F5后可以看到大致代码的逻辑,就是很多控制流平坦化,调试的时候比较耗时间。


字符串基本都是加密的,不过到时候用我的idb,已经都标注好了。

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


第一阶段


这个阶段主要是做初始化,例如初始化一些后面常用libc函数的地址,初始化一些后面会用到的私有目录、sdcard目录等等......,和一些兼容性的处理(根据不同的机型,不同的Android版本号)。
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


第二阶段


第二阶段是比较重要的一个阶段,主要做了一些动态注册Java层函数,与dex的初始化(包括拷贝assets,以及load到内存),hook一些系统函数的操作,下面详细介绍一下这个流程. 主要偏移从0x1EA1C开始。


注册Java层的native函数


注册基本都在sub_126BC函数中:


APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


注册函数详情:
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart
有个单独注册的函数

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


操作assets目录下的资源


定位偏移0x1F1F0
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


上面进行一系列校验后,下面就开始走copy流程了。


APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

文件本地落地
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart
执行好后,可以看到私有目录多了文件。
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


Hook一些函数


Hook API实现在pECFD6C6E0567ABA6034040D903F38908这个函数中

主要对libc、libart进行了hook。


例如:sub_33B08函数中libart下的hook:3art15DexFileVerifier6Verify、3art7DexFile10OpenMemory等。
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

sub_392E8函数中主要是libc相关的hook: write、read、mmap、munmap等。

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


加载dex


定位函数sub_15928
先构造path
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

JNI调用java层加载dex

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

java层的实现
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

加载后可以看到,dex已经到内存中了。
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart
其实后面还有一些流程,但是一看没有抽取,发现自己这个版本不太对劲,瞬间没有动力分析下去了。





脱壳


由于没抽取,所以脱壳还是比较简单,这里说一句,本身用来加载的dex的落地文件是不规则的,个人猜测是通过fread和fwrite进行解密的,但是没去验证。


执行完sub_15928之后,对maps下classes.jar的地址进行dump就可以了。

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart





一些检测


sub_17218:签名校验

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

sub_18DF4:Hook Android日志

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

sub_49794:检测FART

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart



APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

[2023年春季班]看雪安卓高级研修班   开启报名


课程大纲(不定期更新)

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart
  • 上述列出的两大计划、各八大专题及其包含的二十四个细目;
  • 专属班主任,敦促学习、鼓励士气;良好的抱团学习的氛围;

  • 可以参加《安卓高级研修班》线下班,鼓励线下交流,与大佬谈笑风生;

  • 注意2W班和3W班是完全独立噢,没有交集;

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

本课程适合有一定基础的初、中级安卓逆向研究员,迫切希望提高自身能力、学习能力强,升职加薪意愿强烈、学习意愿强烈。
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart
*以上为总体服务计划,具体课程时间(段)安排以最终合同约定的课程表为准。


高研网课
就业班
强化班
月薪三万计划
16999元
8599元
月薪两万计划
11199元
5599元
就业班注意事项:
  1. 就业班附带包就业服务(须达到合同规定的毕业标准),签合同保证就业及薪资,达不到退全款;

  2. 就业班有入学考核,缴费成功后进入考核流程,考核不通过退全款;

  3. 考核流程会包括简历筛选、班主任和老师(电话)面试等环节;


强化班注意事项:
  1. 强化班仅去除包就业服务,并且无入学考核,其余与就业班完全相同;

  2. 就业班与强化班一起授课,合计35人一个班,教学上不做任何区分。


金融风险注意事项:
  1. 《安卓高级研修班》全系列无任何金融计划,纯预付;无任何金融套路。

  2. 网络课程为虚拟商品,购买之前可以观看下述试看内容,购买成功之后不接受退款。


分类
链接
报名二维码
试看地址

网课月薪三万计划

https://www.kanxue.com/book-brief-84.htm

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

网课月薪两万计划

https://www.kanxue.com/book-brief-83.htm
APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

课程顾问微信:r0ysue(备注“安卓高研网课”)

 
渴望知识和力量的你还在等什么,赶紧报名加入我们吧! 

免责条款

  • 以上所有宣传稿件内容均不作为服务承诺,最终以实际签订培训合同为准。

  • 课程大纲与细目会根据教学反馈不断优化、调整与更新,实际授课可能与宣传主题略有不同;


高研班优秀学员作品展示:

# 十一月

《使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用》
《Frida分析违法应用Native层算法》
《Frida实战:一次违法应用的破解尝试》
《使用unidbg破解孤挺花字符串混淆并修复so》
《破解某抢票软件的VPN抓包》
《从SSL库的内存漫游开发dump自定义客户端证书的通杀脚本》

# 十月

《dexvmp后的算法逆向分析和还原》

《使用unicorn对ollvm字符串进行解密》

《Frida追踪定Socket接口自吐游戏APK的服务器IP和地址》

 Frida hook Java/Native与init_array 自吐最终方案 


# 九月

《macOS安装调试llvm入门》

《fart的理解和分析过程》

《使用ollvm自定义简单的字符串加密》

《使用ida trace来还原ollvm混淆的非标准算法》


# 八月

ollvm算法还原案例分享

使用Frida打印Java类函数调用关系

# 七月

一个易上手的函数抽取样本还原

一个自定义classloader的函数抽取壳样本

利用Xposed对ollvm后的so中flag爆破

使用Frida分析动态注册jni函数绑定流程

frida跟踪应用中所有运行在解释模式的java函数


# 六月

举杯邀Frida,对影成三题

从三道题目入手入门frida

单纯使用Frida书写类抽取脱壳工具的一些心路历程和实践

某聊天app的音视频通话逆向


# 五月

记一次so文件动态解密

使用Frida简单实现函数粒度脱壳

初试IDA&FRIDA联合调试简单ollvm保护的加密函数源码

ollvm算法还原案例分享

# 四月

java函数转Native化的一些实践

某抽取壳的原理简析

frida辅助脱壳

一款最简单的关于动态注册的APP分析

# 三月

ollvm后的算法还原案例分享

ollvm CrackMe算法分析

ART下Hook系统函数修改内存中指定方法的运行指令逻辑案例分享

某类抽取加固APP的脱壳与修复




APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


看雪ID:GitRoy

https://bbs.kanxue.com/user-home-762912.htm

*本文由看雪论坛 GitRoy 原创,转载请注明来自看雪社区

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

# 往期推荐

1.CVE-2022-21882提权漏洞学习笔记

2.wibu证书 - 初探

3.win10 1909逆向之APIC中断和实验

4.EMET下EAF机制分析以及模拟实现

5.sql注入学习分享

6.V8 Array.prototype.concat函数出现过的issues和他们的POC们


APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart


APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

球分享

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

球点赞

APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

球在看


APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

点击“阅读原文”,了解更多!

原文始发于微信公众号(看雪学苑):APP加固分析之内存dump修复so、JNIOnload、动态注册、libc hook、文件读写、检测Fart

相关文章

暂无评论

暂无评论...