文章目录
- 前言
- 名词释义
- APK结构
- 加固手段
- 逆向
- dex文件
- resources.arsc
- React Native
- 主要逆向工具
- Hook工具
- Xposed
- Frida
- SubstrateCydia
- 加固平台
- TODO
- 文档链接
- 参考文献
前言
加固与逆向是安卓攻防的两个方面。搞安卓研发时间长了就不可避免走到这一步。既要研究别人的实现,又要保护好自己的东西。个人认为,逆向仅仅用于技术研究,不得窃取别人隐私和商业数据。
名词释义
- java:编写好的程序源代码
- class:.java文件通过javac 编译后的字节码文件,jvm直接运行的文件
- jar:Java Archive,java二进制归档文件,多个.class文件打包的文件
- aar:Android Archive,Android二进制归档文件,由jar和Android资源文件
- dex:将.class优化打包后的文件,dalvik虚拟机则是.dex可执行文件
- smali:Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器。类似于汇编代码。
- apk:Android application package,包含.dex、resource文件资源、assets原生文件资源、应用证书签名、AndroidManifest等组成
APK结构
- assets文件夹:原始资源文件夹,对应着Android工程的assets文件夹,一般用于存放原始的图片、txt、css等资源文件。
- lib:存放应用需要的引用第三方SDK的so库。比如一些底层实现的图片处理、音视频处理、数据加密的库等。而该文件夹下有时会多一个层级,这是根据不同CPU 型号而划分的,如 ARM,ARM-v7a,x86等。
- META-INF:保存apk签名信息,保证apk的完整性和安全性。
- res:资源文件夹,其中的资源文件包括了布局(layout),常量值(values),颜色值(colors),尺寸值(dimens),字符串(strings),自定义样式(styles)等。
- AndroidManifest.xml文件:全局配置文件,里面包含了版本信息、activity、broadcasts等基本配置。不过这里的是二进制的xml文件,无法直接查看,需要反编译后才能查看。
- classes.dex文件:这是安卓代码的核心部分,,dex是在Dalvik虚拟机上可以执行的文件。这里有classes.dex 4个文件,说明工程的方法数较多,进行了dex拆分。如果apk的方法数超过了65535,会生成多个dex文件,反编译的话需要对这多个dex文件均进行转换Jar包处理。
- resources.arsc文件:记录资源文件和资源id的映射关系。
加固手段
传统App加固技术,前后经历了四代技术变更,保护级别每一代都有所提升,但其固有的安全缺陷和兼容性问题始终未能得到解决。而新一代加固技术—虚机源码保护,适用代码类型更广泛,App保护级别更高,兼容性更强,堪称未来级别的保护方案。
逆向
dex文件
逆向的主体是java/kotlin代码和javascript代码。
resources.arsc
resources.arsc是Android编译后生成的产物,主要是用来建立资源映射关系,为了清晰地理解其中的映射逻辑,有必要剖析resources.arsc的结构。
React Native
index.android.bundle 文件是由 React Native 应用程序在 Android 平台上生成的一种二进制文件。它包含了应用程序的 JavaScript 代码和资源文件。
反编译 index.android.bundle 文件可以使用工具如 “react-native-bundle-decoder” 或 “bundler-decoder”。这些工具可以将二进制文件转换成可读的 JavaScript 代码。
但是经过JS引擎Hermes处理过的index.android.bundle就得靠别的工具了。采用hbctool即可解密。
hbctool disasm index.android.bundle .
还有个工具:https://github/P1sec/hermes-dec
hbc-decompiler assets/index.android.bundle /tmp/my_output_file.js
不过反编译出来的js文件可读性比较差。
主要逆向工具
- 逆向工具汇总
- Shell
- dex2jar
- Dextra: Dalvik和ART相关的文件格式查看工具,随着Android Internals book一起发行的
- 010Edtor: 二进制文件解析工具,支持很多文件格式模版脚本,很强大
- LIEF: 简化ELF文件分析的辅助脚本,其实还有很多功能,读者可以慢慢发掘
- jadx: APK反编译工具,很强大
- IDAPro: 老牌的分析神器,反汇编专业工具,支持APK分析,Native代码分析以及动态调试
- apktool :反编译apk,重构。
- dex2jar :反编译apk,解压 classes.dex 文件
- JD-GUI :将class文件反编译成java源代码
- AndroidKiller : 可视化、全自动的反编译、编译、签名;支持批量编译APK。
- AndroidCrackTool: mac反编译工具
- GDA:第一款国产交互式反编译器
- jadx:反编译利器,支持命令行和图形界面
- autosign:签名工具
- Unidbg :java Hook 框架
- 抓包分析:Charles
基本过程:Charles,jadx,python+frida,r0capture
Hook工具
三大hook工具:Frida,Xposed,SubstrateCydia
Xposed
优点:在编写Java层hook插件的时候非常好用,这一点完全优越于Frida和SubstrateCydia,因为他也是Android项目,可以直接编写Java代码调用各类api进行操作。而且可以安装到手机上直接使用。
缺点:配置安装环境繁琐,兼容性差,在Hook底层的时候就很无助了。
Frida
优点:在上面我们可以看到他的优点在于配置环境很简单,操作也很便捷,对于破解者开发阶段非常好用。支持Java层和Native层hook操作,在Native层hook如果是非基本类型的话操作有点麻烦。
缺点:因为他只适用于破解者在开发阶段,也就是他没法像Xposed用于实践生产中,比如我写一个微信外挂用Frida写肯定不行的,因为他无法在手机端运行。也就是破解者用的比较多。
SubstrateCydia
优点:可以运行在手机端,和Xposed类似可以用于实践生产中。支持Java层和Native层的hook操作,但是Java层hook不怎么常用,用的比较多的是Native层hook操作,因为他也是Android工程可以引用系统api,操作更为方便。
缺点:和Xposed一样安装配置环境繁琐,兼容性差。
以上这三个工具可以说是现在用的最多的hook工具了,总结一句话就是写Java层Hook还是Xposed方便,写Native层Hook还是Cydia了,而对于破解者开发那还是Frida最靠谱了。但是不管怎么样,写外挂最难的也是最重要的不是写代码而是寻找hook点,也就是逆向分析app找到那个地方,然后写hook代码实现插件功能。
加固平台
- 阿里聚安全 链接:jaq.alibaba/
- 腾讯云应用乐固 链接:www.qcloud/product/cr
- 360加固保 链接:jiagu.360/
- 梆梆加固 链接:dev.bangcle/
- 爱加密 链接:safe.ijiami/
开发APP从一门开始www.yimenapp
其它:
APP打包:https://www.yimenapp/more.html
EXE打包:https://www.yimenapp/exe.html
商城APP:https://www.yimenapp/shop.html
IOS免签打包:https://www.yimenapp/iosmianqian.html
APP上架:https://www.yimenapp/iosup.html
APP软著申请:https://www.yimenapp/softpage.html
SSL申请:https://www.yimenapp/ssl.html
Discuz APP:https://www.yimenapp/discuz.html
教程汇总:https://www.yimenapp/jiaocheng.html
目前360加固大概3000元一月,年付大概18000的样子;
其他平台比如邦邦,网易加固等价格一般7200一年;
腾讯乐固目前还有免费版,开发者可以去腾讯加固使用一下免费版;
对比:
- 体积(体积小的为优):360 > 腾讯 > 爱加密 > 阿里 > 梆梆
- 兼容性: 阿里 > 腾讯 > 360 = 梆梆 > 爱加密
- 启动速度(时间短为优): 阿里 > 爱加密 > 360 = 梆梆 > 腾讯
- 漏洞: 腾讯 > 爱加密 > 360 > 梆梆 > 阿里
TODO
混淆和安全加固
安卓应用是Java开发的,java容易被反编译的特性。
动态加载
加密
文档链接
- Android App加固原理与技术历程
- resources.arsc结构分析
- resources.arsc解析工具
- 顶象加固平台
- 常见的加固平台
参考文献
https://github/zyq8709/DexHunter
https://link.springer/chapter/10.1007/978-3-319-26362-5_17
https://github/CheckPointSW/android_unpacker
https://github/rednaga/DexHook
https://github/strazzere/android-unpacker
https://developer.android/reference/android/app/Application.html
https://developer.android/reference/android/content/
ContextWrapper.html#attachBaseContext(android.content.Context)
https://docs.oracle/cd/E19683-01/816-1386/6m7qcobks/index.html
https://android.googlesource/platform/bionic/+/android-4.2_r1/linker/README.TXT
https://lief.quarkslab/
http://www.sohu/a/167000502_354899
http://www.gabriel.urdhr.fr/2015/09/28/elf-file-format/
http://newandroidbook/tools/dextra.html
文章目录
- 前言
- 名词释义
- APK结构
- 加固手段
- 逆向
- dex文件
- resources.arsc
- React Native
- 主要逆向工具
- Hook工具
- Xposed
- Frida
- SubstrateCydia
- 加固平台
- TODO
- 文档链接
- 参考文献
前言
加固与逆向是安卓攻防的两个方面。搞安卓研发时间长了就不可避免走到这一步。既要研究别人的实现,又要保护好自己的东西。个人认为,逆向仅仅用于技术研究,不得窃取别人隐私和商业数据。
名词释义
- java:编写好的程序源代码
- class:.java文件通过javac 编译后的字节码文件,jvm直接运行的文件
- jar:Java Archive,java二进制归档文件,多个.class文件打包的文件
- aar:Android Archive,Android二进制归档文件,由jar和Android资源文件
- dex:将.class优化打包后的文件,dalvik虚拟机则是.dex可执行文件
- smali:Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器。类似于汇编代码。
- apk:Android application package,包含.dex、resource文件资源、assets原生文件资源、应用证书签名、AndroidManifest等组成
APK结构
- assets文件夹:原始资源文件夹,对应着Android工程的assets文件夹,一般用于存放原始的图片、txt、css等资源文件。
- lib:存放应用需要的引用第三方SDK的so库。比如一些底层实现的图片处理、音视频处理、数据加密的库等。而该文件夹下有时会多一个层级,这是根据不同CPU 型号而划分的,如 ARM,ARM-v7a,x86等。
- META-INF:保存apk签名信息,保证apk的完整性和安全性。
- res:资源文件夹,其中的资源文件包括了布局(layout),常量值(values),颜色值(colors),尺寸值(dimens),字符串(strings),自定义样式(styles)等。
- AndroidManifest.xml文件:全局配置文件,里面包含了版本信息、activity、broadcasts等基本配置。不过这里的是二进制的xml文件,无法直接查看,需要反编译后才能查看。
- classes.dex文件:这是安卓代码的核心部分,,dex是在Dalvik虚拟机上可以执行的文件。这里有classes.dex 4个文件,说明工程的方法数较多,进行了dex拆分。如果apk的方法数超过了65535,会生成多个dex文件,反编译的话需要对这多个dex文件均进行转换Jar包处理。
- resources.arsc文件:记录资源文件和资源id的映射关系。
加固手段
传统App加固技术,前后经历了四代技术变更,保护级别每一代都有所提升,但其固有的安全缺陷和兼容性问题始终未能得到解决。而新一代加固技术—虚机源码保护,适用代码类型更广泛,App保护级别更高,兼容性更强,堪称未来级别的保护方案。
逆向
dex文件
逆向的主体是java/kotlin代码和javascript代码。
resources.arsc
resources.arsc是Android编译后生成的产物,主要是用来建立资源映射关系,为了清晰地理解其中的映射逻辑,有必要剖析resources.arsc的结构。
React Native
index.android.bundle 文件是由 React Native 应用程序在 Android 平台上生成的一种二进制文件。它包含了应用程序的 JavaScript 代码和资源文件。
反编译 index.android.bundle 文件可以使用工具如 “react-native-bundle-decoder” 或 “bundler-decoder”。这些工具可以将二进制文件转换成可读的 JavaScript 代码。
但是经过JS引擎Hermes处理过的index.android.bundle就得靠别的工具了。采用hbctool即可解密。
hbctool disasm index.android.bundle .
还有个工具:https://github/P1sec/hermes-dec
hbc-decompiler assets/index.android.bundle /tmp/my_output_file.js
不过反编译出来的js文件可读性比较差。
主要逆向工具
- 逆向工具汇总
- Shell
- dex2jar
- Dextra: Dalvik和ART相关的文件格式查看工具,随着Android Internals book一起发行的
- 010Edtor: 二进制文件解析工具,支持很多文件格式模版脚本,很强大
- LIEF: 简化ELF文件分析的辅助脚本,其实还有很多功能,读者可以慢慢发掘
- jadx: APK反编译工具,很强大
- IDAPro: 老牌的分析神器,反汇编专业工具,支持APK分析,Native代码分析以及动态调试
- apktool :反编译apk,重构。
- dex2jar :反编译apk,解压 classes.dex 文件
- JD-GUI :将class文件反编译成java源代码
- AndroidKiller : 可视化、全自动的反编译、编译、签名;支持批量编译APK。
- AndroidCrackTool: mac反编译工具
- GDA:第一款国产交互式反编译器
- jadx:反编译利器,支持命令行和图形界面
- autosign:签名工具
- Unidbg :java Hook 框架
- 抓包分析:Charles
基本过程:Charles,jadx,python+frida,r0capture
Hook工具
三大hook工具:Frida,Xposed,SubstrateCydia
Xposed
优点:在编写Java层hook插件的时候非常好用,这一点完全优越于Frida和SubstrateCydia,因为他也是Android项目,可以直接编写Java代码调用各类api进行操作。而且可以安装到手机上直接使用。
缺点:配置安装环境繁琐,兼容性差,在Hook底层的时候就很无助了。
Frida
优点:在上面我们可以看到他的优点在于配置环境很简单,操作也很便捷,对于破解者开发阶段非常好用。支持Java层和Native层hook操作,在Native层hook如果是非基本类型的话操作有点麻烦。
缺点:因为他只适用于破解者在开发阶段,也就是他没法像Xposed用于实践生产中,比如我写一个微信外挂用Frida写肯定不行的,因为他无法在手机端运行。也就是破解者用的比较多。
SubstrateCydia
优点:可以运行在手机端,和Xposed类似可以用于实践生产中。支持Java层和Native层的hook操作,但是Java层hook不怎么常用,用的比较多的是Native层hook操作,因为他也是Android工程可以引用系统api,操作更为方便。
缺点:和Xposed一样安装配置环境繁琐,兼容性差。
以上这三个工具可以说是现在用的最多的hook工具了,总结一句话就是写Java层Hook还是Xposed方便,写Native层Hook还是Cydia了,而对于破解者开发那还是Frida最靠谱了。但是不管怎么样,写外挂最难的也是最重要的不是写代码而是寻找hook点,也就是逆向分析app找到那个地方,然后写hook代码实现插件功能。
加固平台
- 阿里聚安全 链接:jaq.alibaba/
- 腾讯云应用乐固 链接:www.qcloud/product/cr
- 360加固保 链接:jiagu.360/
- 梆梆加固 链接:dev.bangcle/
- 爱加密 链接:safe.ijiami/
开发APP从一门开始www.yimenapp
其它:
APP打包:https://www.yimenapp/more.html
EXE打包:https://www.yimenapp/exe.html
商城APP:https://www.yimenapp/shop.html
IOS免签打包:https://www.yimenapp/iosmianqian.html
APP上架:https://www.yimenapp/iosup.html
APP软著申请:https://www.yimenapp/softpage.html
SSL申请:https://www.yimenapp/ssl.html
Discuz APP:https://www.yimenapp/discuz.html
教程汇总:https://www.yimenapp/jiaocheng.html
目前360加固大概3000元一月,年付大概18000的样子;
其他平台比如邦邦,网易加固等价格一般7200一年;
腾讯乐固目前还有免费版,开发者可以去腾讯加固使用一下免费版;
对比:
- 体积(体积小的为优):360 > 腾讯 > 爱加密 > 阿里 > 梆梆
- 兼容性: 阿里 > 腾讯 > 360 = 梆梆 > 爱加密
- 启动速度(时间短为优): 阿里 > 爱加密 > 360 = 梆梆 > 腾讯
- 漏洞: 腾讯 > 爱加密 > 360 > 梆梆 > 阿里
TODO
混淆和安全加固
安卓应用是Java开发的,java容易被反编译的特性。
动态加载
加密
文档链接
- Android App加固原理与技术历程
- resources.arsc结构分析
- resources.arsc解析工具
- 顶象加固平台
- 常见的加固平台
参考文献
https://github/zyq8709/DexHunter
https://link.springer/chapter/10.1007/978-3-319-26362-5_17
https://github/CheckPointSW/android_unpacker
https://github/rednaga/DexHook
https://github/strazzere/android-unpacker
https://developer.android/reference/android/app/Application.html
https://developer.android/reference/android/content/
ContextWrapper.html#attachBaseContext(android.content.Context)
https://docs.oracle/cd/E19683-01/816-1386/6m7qcobks/index.html
https://android.googlesource/platform/bionic/+/android-4.2_r1/linker/README.TXT
https://lief.quarkslab/
http://www.sohu/a/167000502_354899
http://www.gabriel.urdhr.fr/2015/09/28/elf-file-format/
http://newandroidbook/tools/dextra.html