本文介绍: 从2012年开始,移动互联网进入快速发展阶段,Android App开发热潮的兴起,也推动了Android平台软件保护技术的发展。为何做加固保护核心代码防止营销作弊的手段防止代码被篡改 …本文简单总结了一下Android加固背景和发展历史,也介绍了一些目前常见的脱壳工具。对于so加密的情况,目前也有许多方法应对,比如ida动态调试dump内存中的so,GG模拟器dump内存frida dump sounidbg等等。

Android软件加固概述

从2012年开始,移动互联网进入快速发展阶段,Android App开发热潮的兴起,也推动了Android平台软件保护技术的发展。

  • 为何做加固
  1. 保护核心代码
  2. 防止营销作弊的手段
  3. 防止代码被篡改 …

加固代际

根据不同的理解,现在加固代际基本可以按照五代或者三代去区分。

第一代:动态加载

Apk没有完整原始的Dex需要运行动态加载内存

原理

file

优劣
特点

file
Dex字符串加密 资源加密 对抗反编译 对抗调试 Dex动态加载 so加密

第二代:函数抽取类

原理

主要分为两个步骤指令抽取和指令还原

file

file

优劣
特点

file

除一代有的特点外 内存中无完整、连续的Dex so代码混淆膨胀

第三代:VMP、Dex2C类

原理

file

再比如更改关键方法的方法体

file

无论哪种方法其实都是为了能让壳函数代替原函数去执行 当执行该函数的指令时,解析出指令的OpCode,通过一个巨大的switch case找到处理对应OpCode的函数,然后执行

file

简单讲就是壳将原本的指令进行一次封装,将原本的指令转换为另一种表现形式

优劣
特点

file

除一、二代全部特点外 so代码虚拟化 对抗之前所有的脱壳方法

so加密

section加密
函数加密
  • 原理
    解析so,根据方法名找到指定的方法,将方法进行加密。加载so时,获取指定方法的地址,通过解密方法将指定方法解密。
特点

file

file

由于原本的指令已经被加密成其他的字节,IDA等静态分析工具中会出现大段无法识别的代码

厂商特征

除此外还有很多大佬们可以自行总结

某梆

lib/libDexHelper.so、lib/libDexHelper-x86.so、

某加密

assets/ijiami.ajmassets/ijiami.datassets/ijm_lib/libexec.so、assets/ijm_lib/libexecmain.so

某企鹅

lib/libshellsuper.2019.so、lib/libshella-4.1.0.29.so

数字

assets/libjiagu.so、assets/libjiagu_x86.so

某迦

lib/libxloader.so

assets/libvdogassets/libvdog64、assets/libvdog-x86

某付盾

lib/libegis.so、lib/libegis-x86.so

脱壳工具

FRIDA-DEXDump

原理

通过Frida在内存中搜索dexn035,因为Dex的头部都会存在一个dexn035的模数,所以通过在内存中搜索dexn035可以搜索到Dex文件。对于一些Dex它们被抹去了头部信息,对于这样的情况,FRIDA-DEXDump也提供了对应的方法,通过遍历当前进程中所有可以读的内存段,通过判断这个段的大小和Dex文件中一些关键区域关系可以判断是否一个Dex。

使用

在FRIDA-DEXDumpGitHub中下载码到本地或者通过pip3 install frida-dexdump 安装

file

用法就是首先打开,我们需要脱壳的软件,然后执行python main.py -d程序执行开始检索内存中的Dex

file

检索到后会保存在SavePath对应的目录下

也可以通过python main.py -h查看它的其他使用方法

file

最终得到它脱出来的Dex,可以看下它脱壳效果

file

Youpk

原理

从ClassLinker遍历所有DexFile对象,在虚拟机中Dex文件都用DexFile对象表示,并Dump出所有Dex文件。此时只是整体Dump,Dex中的方法还未还原。遍历DexFile中的ClassDef结构,获取到所有Class,主动调用Class中的所有的方法,让程序强制switch解释器执行,在解释器添加Hook代码,当方法执行时自动保存CodeItem。根据保存的CodeItem和Dump下来的Dex进行合并,还原Dex中被抽取的指令。

使用

首先下载刷机包和还原工具,目前仅支持pixel 1手机

file

解压相关镜像fastboot flash xxx /Download/xxx.img依次刷入

file

配置待脱壳的App包名adb shell "echo com.xxx >> /data/local/tmp/unpacker.config"

启动Apk等待脱壳,每隔10秒将自动重新脱壳(已完全dump的dex将被忽略), 当日志打印unpack end时脱壳完成

dump文件路径为/data/data/包名/unpacker使用adb命令将文件pull

file

使用dexfixer.jar修复Dex,java -jar dexfixer.jar /path/unpacker /path/output

最后我们对比一下还原前后的代码

还原前

file

还原后

file

总结

本文简单总结了一下Android加固的背景和发展历史,也介绍了一些目前常见的脱壳工具。对于so加密的情况,目前也有许多方法应对,比如ida动态调试dump内存中的so,GG模拟器dump内存,frida dump so,unidbg等等。对于混淆的so,也有jnitraceunidbg,还有hluwa大佬的大作obpo等工具辅助我们分析。除此以外还有还有一些优秀的脱壳工具如Fart等,我也没有再做介绍了。总之感谢这些大佬们的努力和开源,没有你们就没有白嫖的我们,哈哈…

原文地址:https://blog.csdn.net/u010671061/article/details/134454805

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_27322.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注