├── .gitignore ├── Makefile ├── README.md ├── README_current.json ├── book.json ├── book_current.json ├── node_modules └── src ├── README.md ├── SUMMARY.md ├── android_background ├── README.md ├── android_framework.md ├── apk_compile_process.md └── related_info │ ├── README.md │ ├── android_vm │ ├── README.md │ ├── art.md │ └── dalvik.md │ ├── apk_file.md │ ├── dex_file.md │ └── smali.md ├── android_crack_tool └── other_assistant_tool │ ├── README.md │ └── android_debugger │ └── README.md ├── android_protect ├── README.md ├── anti_analysis │ ├── README.md │ ├── add_shell │ │ ├── README.md │ │ ├── common_harden_method.md │ │ └── why_encrypt_harden.md │ └── code_obfuscation │ │ ├── README.md │ │ ├── obfuscator_llvm.md │ │ └── proguard.md ├── anti_debug │ └── README.md └── harden_history │ ├── README.md │ └── vmp.md ├── android_reverse └── README.md ├── appendix ├── README.md └── reference.md ├── assets ├── favicon.ico └── img │ ├── android_common_harden_tech_compare.jpg │ ├── android_compile_flow.png │ ├── apk_build_process.png │ ├── apk_compile_package_process.png │ ├── junkcode_deassembly_wrong_code.png │ ├── junkcode_decompile_fail_fill_payload.png │ ├── junkcode_origin_assembly_code.png │ ├── junkcode_switch_flow.png │ ├── jvm_vs_dvm_compile.png │ ├── jvm_vs_dvm_flow.png │ ├── llvm_core_arch_flow.png │ ├── re_common_deassembly_algorithm.png │ ├── smaliviewer_demo.png │ ├── vmp_code_procedure.jpg │ ├── vmp_design_compiler_flow.png │ ├── vmp_encrypt_theory.png │ ├── vmp_parse_flow.jpg │ └── vmp_protect_flow.jpg ├── intro └── README.md └── sub_tutorial └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | output/ 3 | debug/ 4 | 5 | *.zip 6 | 7 | .DS_Store 8 | 9 | !src/**/output -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | include ../../common/honkit_makefile.mk -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 安卓应用的安全和破解 2 | 3 | * 最新版本:`v4.0.2` 4 | * 更新时间:`20241007` 5 | 6 | ## 简介 7 | 8 | 总结安卓应用的正向安装和逆向破解;先是安卓正向和逆向的概述;然后是安卓背景知识介绍,包括安卓基本框架、apk编译打包流程、以及相关知识,包括apk文件、dex文件、安卓虚拟机的Dalvik和ART,以及Smali。接着介绍安装正向的加固手段发展历史,包括VMP;以及防静态分析,包括加壳加固,为何要加壳,以及常见的加固服务提供商,和代码混淆的ProGuard和Obfuscator-LLVM,以及防动态调试。然后是安卓逆向破解,以及系列子教程。 9 | 10 | ## 源码+浏览+下载 11 | 12 | 本书的各种源码、在线浏览地址、多种格式文件下载如下: 13 | 14 | ### HonKit源码 15 | 16 | * [crifan/android_app_security_crack: 安卓应用的安全和破解](https://github.com/crifan/android_app_security_crack) 17 | 18 | #### 如何使用此HonKit源码去生成发布为电子书 19 | 20 | 详见:[crifan/honkit_template: demo how to use crifan honkit template and demo](https://github.com/crifan/honkit_template) 21 | 22 | ### 在线浏览 23 | 24 | * [安卓应用的安全和破解 book.crifan.org](https://book.crifan.org/books/android_app_security_crack/website/) 25 | * [安卓应用的安全和破解 crifan.github.io](https://crifan.github.io/android_app_security_crack/website/) 26 | 27 | ### 离线下载阅读 28 | 29 | * [安卓应用的安全和破解 PDF](https://book.crifan.org/books/android_app_security_crack/pdf/android_app_security_crack.pdf) 30 | * [安卓应用的安全和破解 ePub](https://book.crifan.org/books/android_app_security_crack/epub/android_app_security_crack.epub) 31 | * [安卓应用的安全和破解 Mobi](https://book.crifan.org/books/android_app_security_crack/mobi/android_app_security_crack.mobi) 32 | 33 | ## 版权和用途说明 34 | 35 | 此电子书教程的全部内容,如无特别说明,均为本人原创。其中部分内容参考自网络,均已备注了出处。如发现有侵权,请通过邮箱联系我 `admin 艾特 crifan.com`,我会尽快删除。谢谢合作。 36 | 37 | 各种技术类教程,仅作为学习和研究使用。请勿用于任何非法用途。如有非法用途,均与本人无关。 38 | 39 | ## 鸣谢 40 | 41 | 感谢我的老婆**陈雪**的包容理解和悉心照料,才使得我`crifan`有更多精力去专注技术专研和整理归纳出这些电子书和技术教程,特此鸣谢。 42 | 43 | ## 其他 44 | 45 | ### 作者的其他电子书 46 | 47 | 本人`crifan`还写了其他`150+`本电子书教程,感兴趣可移步至: 48 | 49 | [crifan/crifan_ebook_readme: Crifan的电子书的使用说明](https://github.com/crifan/crifan_ebook_readme) 50 | 51 | ### 关于作者 52 | 53 | 关于作者更多介绍,详见: 54 | 55 | [关于CrifanLi李茂 – 在路上](https://www.crifan.org/about/) 56 | -------------------------------------------------------------------------------- /README_current.json: -------------------------------------------------------------------------------- 1 | { 2 | "latestVersion": "v4.0.2", 3 | "lastUpdate": "20241007", 4 | "gitRepoName": "android_app_security_crack", 5 | "bookName": "安卓应用的安全和破解", 6 | "bookDescription": "总结安卓应用的正向安装和逆向破解;先是安卓正向和逆向的概述;然后是安卓背景知识介绍,包括安卓基本框架、apk编译打包流程、以及相关知识,包括apk文件、dex文件、安卓虚拟机的Dalvik和ART,以及Smali。接着介绍安装正向的加固手段发展历史,包括VMP;以及防静态分析,包括加壳加固,为何要加壳,以及常见的加固服务提供商,和代码混淆的ProGuard和Obfuscator-LLVM,以及防动态调试。然后是安卓逆向破解,以及系列子教程。" 7 | } -------------------------------------------------------------------------------- /book.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "安卓应用的安全和破解", 3 | "description": "总结安卓应用的正向安装和逆向破解;先是安卓正向和逆向的概述;然后是安卓背景知识介绍,包括安卓基本框架、apk编译打包流程、以及相关知识,包括apk文件、dex文件、安卓虚拟机的Dalvik和ART,以及Smali。接着介绍安装正向的加固手段发展历史,包括VMP;以及防静态分析,包括加壳加固,为何要加壳,以及常见的加固服务提供商,和代码混淆的ProGuard和Obfuscator-LLVM,以及防动态调试。然后是安卓逆向破解,以及系列子教程。", 4 | "pluginsConfig": { 5 | "toolbar-button": { 6 | "url": "https://book.crifan.org/books/android_app_security_crack/pdf/android_app_security_crack.pdf", 7 | "icon": "fa-file-pdf-o", 8 | "label": "下载PDF" 9 | }, 10 | "sitemap-general": { 11 | "prefix": "https://book.crifan.org/books/android_app_security_crack/website/" 12 | }, 13 | "github-buttons": { 14 | "buttons": [ 15 | { 16 | "repo": "android_app_security_crack", 17 | "user": "crifan", 18 | "type": "star", 19 | "count": true, 20 | "size": "small" 21 | }, 22 | { 23 | "user": "crifan", 24 | "type": "follow", 25 | "width": "120", 26 | "count": false, 27 | "size": "small" 28 | } 29 | ] 30 | }, 31 | "theme-default": { 32 | "showLevel": true 33 | }, 34 | "disqus": { 35 | "shortName": "crifan" 36 | }, 37 | "prism": { 38 | "css": [ 39 | "prism-themes/themes/prism-atom-dark.css" 40 | ] 41 | }, 42 | "sharing": { 43 | "douban": false, 44 | "facebook": true, 45 | "google": false, 46 | "hatenaBookmark": false, 47 | "instapaper": false, 48 | "line": false, 49 | "linkedin": false, 50 | "messenger": false, 51 | "pocket": false, 52 | "qq": true, 53 | "qzone": false, 54 | "stumbleupon": false, 55 | "twitter": true, 56 | "viber": false, 57 | "vk": false, 58 | "weibo": true, 59 | "whatsapp": false, 60 | "all": [ 61 | "douban", 62 | "facebook", 63 | "google", 64 | "instapaper", 65 | "line", 66 | "linkedin", 67 | "messenger", 68 | "pocket", 69 | "qq", 70 | "qzone", 71 | "stumbleupon", 72 | "twitter", 73 | "viber", 74 | "vk", 75 | "weibo", 76 | "whatsapp" 77 | ] 78 | }, 79 | "tbfed-pagefooter": { 80 | "copyright": "crifan.org,使用署名4.0国际(CC BY 4.0)协议发布", 81 | "modify_label": "最后更新:", 82 | "modify_format": "YYYY-MM-DD HH:mm:ss" 83 | }, 84 | "donate": { 85 | "wechat": "https://www.crifan.org/files/res/crifan_com/crifan_wechat_pay.jpg", 86 | "alipay": "https://www.crifan.org/files/res/crifan_com/crifan_alipay_pay.jpg", 87 | "title": "", 88 | "button": "打赏", 89 | "alipayText": "支付宝打赏给Crifan", 90 | "wechatText": "微信打赏给Crifan" 91 | } 92 | }, 93 | "author": "Crifan Li ", 94 | "language": "zh-hans", 95 | "root": "./src", 96 | "links": { 97 | "sidebar": { 98 | "主页": "http://www.crifan.org" 99 | } 100 | }, 101 | "plugins": [ 102 | "theme-comscore", 103 | "anchors", 104 | "expandable-menu", 105 | "-lunr", 106 | "-search", 107 | "search-plus", 108 | "disqus", 109 | "-highlight", 110 | "prism", 111 | "prism-themes", 112 | "github-buttons", 113 | "-splitter", 114 | "splitter-nosessionbutcookie", 115 | "-sharing", 116 | "sharing-plus", 117 | "tbfed-pagefooter", 118 | "donate", 119 | "sitemap-general", 120 | "copy-code-button", 121 | "blockquote-callout", 122 | "toolbar-button" 123 | ] 124 | } -------------------------------------------------------------------------------- /book_current.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "安卓应用的安全和破解", 3 | "description": "总结安卓应用的正向安装和逆向破解;先是安卓正向和逆向的概述;然后是安卓背景知识介绍,包括安卓基本框架、apk编译打包流程、以及相关知识,包括apk文件、dex文件、安卓虚拟机的Dalvik和ART,以及Smali。接着介绍安装正向的加固手段发展历史,包括VMP;以及防静态分析,包括加壳加固,为何要加壳,以及常见的加固服务提供商,和代码混淆的ProGuard和Obfuscator-LLVM,以及防动态调试。然后是安卓逆向破解,以及系列子教程。", 4 | "pluginsConfig": { 5 | "toolbar-button": { 6 | "url": "https://book.crifan.org/books/android_app_security_crack/pdf/android_app_security_crack.pdf" 7 | }, 8 | "sitemap-general": { 9 | "prefix": "https://book.crifan.org/books/android_app_security_crack/website/" 10 | }, 11 | "github-buttons": { 12 | "buttons": [ 13 | { 14 | "repo": "android_app_security_crack" 15 | } 16 | ] 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /node_modules: -------------------------------------------------------------------------------- 1 | ../../generated/honkit/node_modules -------------------------------------------------------------------------------- /src/README.md: -------------------------------------------------------------------------------- 1 | # 安卓应用的安全和破解 2 | 3 | * 最新版本:`v4.0.2` 4 | * 更新时间:`20241007` 5 | 6 | ## 简介 7 | 8 | 总结安卓应用的正向安装和逆向破解;先是安卓正向和逆向的概述;然后是安卓背景知识介绍,包括安卓基本框架、apk编译打包流程、以及相关知识,包括apk文件、dex文件、安卓虚拟机的Dalvik和ART,以及Smali。接着介绍安装正向的加固手段发展历史,包括VMP;以及防静态分析,包括加壳加固,为何要加壳,以及常见的加固服务提供商,和代码混淆的ProGuard和Obfuscator-LLVM,以及防动态调试。然后是安卓逆向破解,以及系列子教程。 9 | 10 | ## 源码+浏览+下载 11 | 12 | 本书的各种源码、在线浏览地址、多种格式文件下载如下: 13 | 14 | ### HonKit源码 15 | 16 | * [crifan/android_app_security_crack: 安卓应用的安全和破解](https://github.com/crifan/android_app_security_crack) 17 | 18 | #### 如何使用此HonKit源码去生成发布为电子书 19 | 20 | 详见:[crifan/honkit_template: demo how to use crifan honkit template and demo](https://github.com/crifan/honkit_template) 21 | 22 | ### 在线浏览 23 | 24 | * [安卓应用的安全和破解 book.crifan.org](https://book.crifan.org/books/android_app_security_crack/website/) 25 | * [安卓应用的安全和破解 crifan.github.io](https://crifan.github.io/android_app_security_crack/website/) 26 | 27 | ### 离线下载阅读 28 | 29 | * [安卓应用的安全和破解 PDF](https://book.crifan.org/books/android_app_security_crack/pdf/android_app_security_crack.pdf) 30 | * [安卓应用的安全和破解 ePub](https://book.crifan.org/books/android_app_security_crack/epub/android_app_security_crack.epub) 31 | * [安卓应用的安全和破解 Mobi](https://book.crifan.org/books/android_app_security_crack/mobi/android_app_security_crack.mobi) 32 | 33 | ## 版权和用途说明 34 | 35 | 此电子书教程的全部内容,如无特别说明,均为本人原创。其中部分内容参考自网络,均已备注了出处。如发现有侵权,请通过邮箱联系我 `admin 艾特 crifan.com`,我会尽快删除。谢谢合作。 36 | 37 | 各种技术类教程,仅作为学习和研究使用。请勿用于任何非法用途。如有非法用途,均与本人无关。 38 | 39 | ## 鸣谢 40 | 41 | 感谢我的老婆**陈雪**的包容理解和悉心照料,才使得我`crifan`有更多精力去专注技术专研和整理归纳出这些电子书和技术教程,特此鸣谢。 42 | 43 | ## 其他 44 | 45 | ### 作者的其他电子书 46 | 47 | 本人`crifan`还写了其他`150+`本电子书教程,感兴趣可移步至: 48 | 49 | [crifan/crifan_ebook_readme: Crifan的电子书的使用说明](https://github.com/crifan/crifan_ebook_readme) 50 | 51 | ### 关于作者 52 | 53 | 关于作者更多介绍,详见: 54 | 55 | [关于CrifanLi李茂 – 在路上](https://www.crifan.org/about/) 56 | -------------------------------------------------------------------------------- /src/SUMMARY.md: -------------------------------------------------------------------------------- 1 | # 安卓应用的安全和破解 2 | 3 | * [前言](README.md) 4 | * [概述](intro/README.md) 5 | * [安卓背景知识](android_background/README.md) 6 | * [安卓基本框架](android_background/android_framework.md) 7 | * [apk编译打包流程](android_background/apk_compile_process.md) 8 | * [相关知识](android_background/related_info/README.md) 9 | * [apk文件](android_background/related_info/apk_file.md) 10 | * [dex文件](android_background/related_info/dex_file.md) 11 | * [安卓虚拟机](android_background/related_info/android_vm/README.md) 12 | * [Dalvik](android_background/related_info/android_vm/dalvik.md) 13 | * [ART](android_background/related_info/android_vm/art.md) 14 | * [smali](android_background/related_info/smali.md) 15 | * [安卓正向安全](android_protect/README.md) 16 | * [加固手段发展历史](android_protect/harden_history/README.md) 17 | * [VMP](android_protect/harden_history/vmp.md) 18 | * [防静态分析](android_protect/anti_analysis/README.md) 19 | * [加壳](android_protect/anti_analysis/add_shell/README.md) 20 | * [为何要加壳](android_protect/anti_analysis/add_shell/why_encrypt_harden.md) 21 | * [常见加固服务提供商](android_protect/anti_analysis/add_shell/common_harden_method.md) 22 | * [代码混淆](android_protect/anti_analysis/code_obfuscation/README.md) 23 | * [ProGuard](android_protect/anti_analysis/code_obfuscation/proguard.md) 24 | * [Obfuscator-LLVM](android_protect/anti_analysis/code_obfuscation/obfuscator_llvm.md) 25 | * [防动态调试](android_protect/anti_debug/README.md) 26 | * [安卓逆向破解](android_reverse/README.md) 27 | * [系列子教程](sub_tutorial/README.md) 28 | * [附录](appendix/README.md) 29 | * [参考资料](appendix/reference.md) 30 | -------------------------------------------------------------------------------- /src/android_background/README.md: -------------------------------------------------------------------------------- 1 | # 安卓背景知识 2 | 3 | 在介绍安卓的安全技术和破解技术之前,需要先去了解相关的背景知识。 4 | -------------------------------------------------------------------------------- /src/android_background/android_framework.md: -------------------------------------------------------------------------------- 1 | # 安卓基本框架 2 | 3 | 为了更好的理解,安卓破解相关知识和工具,先要了解安卓的基本框架,以及每一层中都是什么东西: 4 | 5 | ## 安卓的基本架构 6 | 7 | * 内核层: 8 | * 支持多进程和多线程的Linux内核 9 | * 每个应用程序都有自己的Linux ID,并在单独的进程中运行 10 | * 具有相同ID的两个应用程序可以彼此交换数据。 11 | * 系统运行层 12 | * 主要包括一些`开源类库`以及`Android运行时环境` 13 | * 其中虚拟机(`Dalvik`、`ART`)中运行的应用程序格式为`dex`的`二进制文件` 14 | * 应用框架层 15 | * 具有Java接口的应用程序框架 16 | * 主要组成 17 | * `Java`层的`Android SDK` 18 | * `Native`层的`Android NDK` 19 | * 应用层 20 | * 预安装一些核心应用程序 21 | 22 | 后续的很多破解工具,则是针对`Dalvik`虚拟机和dex文件去破解的。 23 | -------------------------------------------------------------------------------- /src/android_background/apk_compile_process.md: -------------------------------------------------------------------------------- 1 | # apk编译打包流程 2 | 3 | ## APK打包流程 4 | 5 | `apk`打包流程图=`apk`产生过程: 6 | 7 | ![apk_build_process](../assets/img/apk_build_process.png) 8 | 9 | 和 10 | 11 | ![apk_compile_package_process](../assets/img/apk_compile_package_process.png) 12 | 13 | 和 安卓编译流程: 14 | 15 | ![android_compile_flow](../assets/img/android_compile_flow.png) 16 | 17 | 具体的解释是: 18 | 19 | * 资源处理 20 | * 这一过程中主要 21 | * 使用appt工具进行资源文件的处理 22 | * 分析AndroidManifest.xml中的资源文件 23 | * 生成R.java和resources.arsc文件 24 | * aidl工具负责处理aidl文件 25 | * 生成对应的java接口文件 26 | * 代码编译 27 | * 将上一过程中产生的R.java、java接口文件以及工程源代码一起通过Java Compiler编译成.class文件,打成Jar包 28 | * 这部分可以加入代码混淆) 29 | * 比如用`ProGuard` 30 | * 然后与第三方库的Jar包一起通过dx工具转换成.dex文件 31 | * 注:如果apk的方法数超过了65535,会生成多个dex文件 32 | * 反编译的话需要对这多个dex文件均进行转换Jar包处理 33 | * 通过apkbuilder工具将aapt生成的resources.arsc、classes.dex(可能多个)、其他的资源一块打包生成未经签名的apk文件。 34 | * 添加签名 35 | * 通过Jarsigner对生成的未签名的apk进行签名。 36 | * 再通过zipalign对签名后的apk进行对其处理,使apk中所有资源文件距离文件起始偏移为4字节的整数倍,从而在通过内存映射访问apk文件时会更快。 37 | -------------------------------------------------------------------------------- /src/android_background/related_info/README.md: -------------------------------------------------------------------------------- 1 | # 相关知识 2 | -------------------------------------------------------------------------------- /src/android_background/related_info/android_vm/README.md: -------------------------------------------------------------------------------- 1 | # 安卓虚拟机 2 | 3 | * 历史背景 4 | * Android 5 | * 代码语言:`Java` 6 | * `Java`的虚拟机是:`JVM` 7 | * Android:出于性能考虑,没用`JVM`,用了自己的虚拟机`VM` 8 | * `安卓虚拟机`=`Android虚拟机`=`Android VM` 9 | * 旧:`Android < 5.0`:`Dalvik` 10 | * 新:`Android >= 5.0`:`ART` 11 | * 资料 12 | * 官网 13 | * Android Runtime (ART) 和 Dalvik  |  Android 开源项目 14 | * https://source.android.com/devices/tech/dalvik 15 | -------------------------------------------------------------------------------- /src/android_background/related_info/android_vm/art.md: -------------------------------------------------------------------------------- 1 | # ART 2 | 3 | * `ART`=`Android RunTime` 4 | * 是什么:Android的新一代的VM虚拟机 5 | * 在`Dalvik`的基础上做了一些优化,提高了运行效率 6 | * 用于替代旧的:Dalvik 7 | * 特点 8 | * 预先编译`AOT` 9 | * 垃圾回收方面的优化 10 | * 开发和调试方面的优化 11 | * 支持采样分析器 12 | * 支持更多调试功能 13 | * 优化了异常和崩溃报告中的诊断详细信息 14 | * 对比:`Dalvik` vs `ART` 15 | * 效率对比 16 | * `Dalvik`:应用每次运行的时候,`字节码`都需要通过`即时编译器`=`JIT`=`Just In Time`转换为`机器码` 17 | * 这会拖慢应用的运行效率 18 | * `ART`:应用在第一次安装的时候,`字节码`就会**预先编译**成`机器码` 19 | * 使其成为真正的本地应用 20 | * 这个过程叫做`预编译`=`AOT`=`Ahead-Of-Time` 21 | * 所用工具是:`dex2oat` 22 | * 这样的话,应用的启动(首次)和执行都会变得更加快速 23 | * 文件类型变化:`.java` –> `.class` –> `.dex` –> `.oat` 24 | * `.oat`: optimized android runtime machine code 25 | * 效果对比 26 | * Dalvik是运行时解释dex文件 27 | * 安装比较快 28 | * 开启应用比较慢 29 | * 应用占用空间小 30 | * ART是安装时字节码预编译成机器码存储在本地,执行的时候直接就可以运行的 31 | * 安装慢 32 | * 开启应用快 33 | * 占用空间大 34 | * 类比 35 | * 就像骑自行车 36 | * Dalvik ~= 折叠自行车:每次骑之前,都要先组装/展开才能骑 37 | * 空间占用小,但启动慢 38 | * ART ~= 组装好的自行车:每次直接骑着就走了 39 | * 空间占用大,但启动快 -------------------------------------------------------------------------------- /src/android_background/related_info/android_vm/dalvik.md: -------------------------------------------------------------------------------- 1 | # Dalvik 2 | 3 | * `Dalvik` = `Dalvik VM` = `DVM` 4 | * 概述 5 | * `Dalvik`是`google`专门为`Android`操作系统设计的一个虚拟机,经过**深度的优化**。虽然Android上的程序是使用java来开发的,但是Dalvik和标准的java虚拟机JVM还是两回事 6 | * `JVM` vs `DVM` 7 | * 对比: JVM vs DVM 8 | * 执行的字节码文件不一样 9 | * `JVM`执行的是`.class`文件=`Java Bytecode` 10 | * `DVM`执行的是`.dex`文件=`Dalvik Bytecode` 11 | * 文件类型变化 12 | * `JVM`: `.java` –> `.class` –> `.jar` 13 | * `DVM`: `.java` –> `.class` –> `.dex` –> `.apk` 14 | * 运行环境不同 15 | * `DVM`:允许运行多个虚拟机实例 16 | * 每一个应用启动都运行一个单独的虚拟机,并且运行在一个独立的进程中 17 | * `JVM`:只能运行一个实例 18 | * 也就是所有应用都运行在同一个`JVM`中 19 | * 编译流程对比 20 | * ![jvm_vs_dvm_flow](../../../assets/img/jvm_vs_dvm_flow.png) 21 | * ![jvm_vs_dvm_compile](../../../assets/img/jvm_vs_dvm_compile.png) 22 | * JVM: 23 | * `基础`:基于栈帧`Stack-based` 24 | * ·文件格式·:`java字节码`=`java bytecode` 25 | * 效率:相对低 26 | * DVM: 27 | * `基础`:基于寄存器`Register-based` 28 | * `文件格式`:dex 29 | * 效率:`DVM`效率比`JVM`高 30 | * 速度更快,占用空间更少 31 | -------------------------------------------------------------------------------- /src/android_background/related_info/apk_file.md: -------------------------------------------------------------------------------- 1 | # apk文件 2 | 3 | * `apk`=`android Application PacKage`=`APK` 4 | * apk文件是什么:是安卓app的安装文件 5 | * 本质:(apk文件其实就是个)zip压缩包 6 | * 意味着 7 | * 可以用解压缩工具把apk当做zip文件一样去解压 8 | * 解压后,得到一堆安卓相关文件 9 | * 可以在`apktool`等工具破解和修改了安卓文件后,再重新用压缩文件工具或`apktool`等工具,重新打包为`apk`文件 10 | 11 | ## apk内容结构 12 | 13 | | 内容入口 | 含义解释 | 14 | | ------- | ------- | 15 | | AndroidManifest.xml | 二进制xml文件,提供设备运行应用程序所需的各种信息 | 16 | | classes.dex | 以dex格式编译的应用程序代码 | 17 | | resources.arsc | 包含预编译应用程序资源的二进制XML文件 | 18 | | res/ | 此文件夹中包含未编译到resources.arsc文件中的资源 | 19 | | assets/ | 此文件夹包含应用程序的原始资产,由AssetManager提供对这些资产文件的访问 | 20 | | META-INF/ | 它包含MANIFEST.MF文件,该文件存储有关JAR内容的元数据。APK的签名也存储在此文件夹中 | 21 | | lib/ | 该文件夹包含已编译的代码,例如本地代码库 | 22 | 23 | ## apk产生的大概过程 24 | 25 | 简述安卓apk的产生过程: 26 | 27 | * 概述:`.java`->`.class`->`.dex`->`.apk` 28 | * 详解 29 | * java源代码 30 | * `java编译器` 编译 31 | * class文件 32 | * `dx`工具转换和打包压缩 33 | * 加上 第三方的,其他的库文件 34 | * dex文件 35 | * apkbuilder打包 36 | * 加上 其他资源文件resources.arsc,其他库等 37 | * (未签名的)apk文件 38 | * jarsigner去签名 + zipalign去处理 39 | * (已签名的)apk文件 40 | * 可以用于发布和上架各种安卓应用市场 41 | * 供普通用户下载安装试用 42 | -------------------------------------------------------------------------------- /src/android_background/related_info/dex_file.md: -------------------------------------------------------------------------------- 1 | # dex文件 2 | 3 | ## 什么是dex文件 4 | 5 | 简答: 6 | 7 | * `dex` = `Dalvik EXecutable format`=`dex文件`=`dex格式` 8 | * `dex`之于`Android`,类似于`class`之于`Java` 9 | * 注:java的class文件内部是Java的字节码(Java bytecode) 10 | * `dex`=`Dalvik EXecutable` 11 | * 相关:`dex文件`=`dex字节码` 12 | * `dex`反汇编后是:`Smali代码` 13 | * 即:Android(虚拟机中的dex文件)反汇编(后的)代码:`Smali` 14 | * 文档 15 | * dex格式 16 | * Dalvik 可执行文件格式  |  Android 开源项目  |  Android Open Source Project 17 | * https://source.android.com/devices/tech/dalvik/dex-format 18 | * 字节码 19 | * Dalvik 字节码  |  Android 开源项目  |  Android Open Source Project 20 | * https://source.android.com/devices/tech/dalvik/dalvik-bytecode 21 | 22 | 详解: 23 | 24 | 安卓系统中,用`Dalvik虚拟机`(`DVM`=`Dalvik Virtual Machine`)去把`java`源码编译为`dex`可执行文件(Dalvik Executable)。 25 | 26 | 而dex文件中保存的就是:编译后了的安卓程序代码文件 27 | 28 | ## Dex文件内部格式 29 | 30 | 1. File Header 31 | 2. String Table 32 | 3. Class List 33 | 4. Field Table 34 | 5. Method Table 35 | 6. Class Definition Table 36 | 7. Field List 37 | 8. Method List 38 | 9. Code Header10. Local Variable List 39 | 40 | 41 | ## 相关工具 42 | 43 | Android自带`dexdump`:用来反编译`dex`文件 44 | -------------------------------------------------------------------------------- /src/android_background/related_info/smali.md: -------------------------------------------------------------------------------- 1 | # smali 2 | 3 | * Smali 4 | * 是什么:一种`汇编语法`/`汇编文件` 5 | * 一种语法:`Smali语法` 6 | * 来源:是`Dalvik`的`VM`的字节码,即`dex`文件中的`bytecode`=`二进制数据`,反汇编后得到的:Smali代码 7 | * 语法:一种宽松式的Jasmin/dedexer语法 8 | * 它实现了`.dex`格式所有功能(注解,调试信息,线路信息等) 9 | * 对应文件叫:`Smali文件` 10 | * 举例 11 | * java源码:`int x = 42` 12 | * Dalvik编译后的,dex中`二进制数据`=`bytecode`=`字节码`:`13 00 2A 00` 13 | * 二进制,人类很难读懂 14 | * 用`baksmali`反汇编后的,smali代码:`const/16 v0, 42` 15 | * smali代码,人类基本可读 16 | * 学习Smali的用途 17 | * 分析Apk:静态分析,不够 18 | * 需要动态分析,涉及Smali 19 | * 修改Apk逻辑:修改Smali代码,重新编译打包Apk 20 | * Android逆向基础:掌握Smali 21 | * 能阅读 smali 代码对进行 android 逆向十分重要 22 | * 官网 23 | * JesusFreke/smali: smali/baksmali 24 | * https://github.com/JesusFreke/smali 25 | * `smali`/`baksmali` 26 | * GitHub 27 | * [JesusFreke/smali: smali/baksmali](https://github.com/JesusFreke/smali) 28 | * smali/baksmali is an assembler/disassembler for the dex format used by dalvik, Android's Java VM implementation 29 | * 针对dex 30 | * `smali`:`assembler`=`汇编器` 31 | * `smali语言`=`汇编语言` 32 | * `baksmali`:`disassembler`=`反汇编器` 33 | * 安卓系统里的Java虚拟机(Dalvik)所使用的一种`.dex`格式文件的反汇编器 34 | 35 | ## Smali基本语法 36 | 37 | * 官网文档 38 | * TypesMethodsAndFields · JesusFreke/smali Wiki 39 | * https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields 40 | 41 | ### 数据类型 Types 42 | 43 | | Smali | Java | 备注 | 44 | | ----- | ----- | --- | 45 | | v | void | 只能用于返回值类型 | 46 | | Z | boolean | | 47 | | B | byte | | 48 | | S | short | | 49 | | C | char | | 50 | | I | int | | 51 | | J | long | | 52 | | F | float | | 53 | | D | double | | 54 | | `Lpackage/name;` | 对象类型 | `L`表示这是一个对象类型,`package/name`表示该对象所在的包,`;`表示对象名称的结束
`Lpackage/name/ObjectName;` 相当于`java`中的`package.name.ObjectName;`| 55 | | `[类型` | 数组 | `[I`表示一个`int`型`数组,`[Ljava/lang/String`表示一个`String`的对象`数组` | 56 | 57 | ### 寄存器 58 | 59 | * 官网文档 60 | * Registers · JesusFreke/smali Wiki 61 | * https://github.com/JesusFreke/smali/wiki/Registers 62 | 63 | * Java中变量都是存放在内存中的 64 | * Android为了提高性能,变量都是存放在寄存器中的 65 | * 寄存器为32位,可以支持任何类型 66 | 67 | * 寄存器 68 | * 类型 69 | * 本地寄存器 70 | * 用v开头数字结尾的符号来表示 71 | * 举例 72 | * v0, v1, v2 73 | * 参数寄存器 74 | * 用p开头数字结尾的符号来表示 75 | * 举例 76 | * p0,p1,p2 77 | * 注意 78 | * 在`非static`方法中,p0代指this,p1为方法的第一个参数 79 | * 在`static`方法中,p0为方法的第一个参数 80 | * 说明 81 | * 指定有多少寄存器是可用 82 | * `.registers`:指定了方法中寄存器的总数 83 | * `.locals`: 表明了方法中非参寄存器的总数,出现在方法中的第一行 84 | 85 | #### Smali代码示例 86 | 87 | ```java 88 | const/4 v0, 0x1 //把值0x1存到v0本地寄存器 89 | iput-boolean v0,p0,Lcom/aaa;->IsRegisterd:Z //把v0中的值赋给com.aaa.IsRegistered,p0代表this,相当于this.Isregistered=true 90 | ``` 91 | 92 | ### 成员变量? Fields 93 | 94 | * 格式 95 | ```bash 96 | .field public/private [static][final] varName:<类型> 97 | ``` 98 | * 指令 99 | * 获取指令 100 | * iget, sget, iget-boolean, sget-boolean, iget-object, sget-object 101 | * 操作指令 102 | * iput, sput, iput-boolean, sput-boolean, iput-object, sput-object 103 | * array的操作是aget和aput 104 | 105 | ### Smali代码示例 106 | 107 | ```java 108 | sget-object v0,Lcom/aaa;->ID:Ljava/lang/String; 109 | ``` 110 | * 获取ID这个String类型的成员变量并放到v0这个寄存器中 111 | 112 | ```java 113 | iget-object v0,p0,Lcom/aaa;->view:Lcom/aaa/view; 114 | ``` 115 | * iget-object比sget-object多一个参数p0,这个参数代表变量所在类的实例。这里p0就是this 116 | 117 | ```java 118 | const/4 v3, 0x0 119 | sput-object v3, Lcom/aaa;->timer:Lcom/aaa/timer; 120 | ``` 121 | * 相当于java代码 122 | ```java 123 | this.timer = null; 124 | ``` 125 | 126 | 127 | ```java 128 | .local v0, args:Landroid/os/Message; 129 | const/4 v1, 0x12 130 | iput v1,v0,Landroid/os/Message;->what:I 131 | ``` 132 | * 相当于java代码 133 | ```java 134 | args.what = 18; 135 | ``` 136 | * 其中args为Message的实例 137 | 138 | 139 | ### 方法/函数 Methods 140 | 141 | * 函数定义格式 142 | ```java 143 | .method public/private [static][final] methodName()<类型> 144 | .end method 145 | ``` 146 | * 函数类型 147 | * `direct method`= private方法 148 | * `virtual method` = 其余的方法 149 | * 函数调用 150 | * 格式 151 | ```java 152 | invoke-指令类型 {参数1, 参数2,...}, L类名;->方法名 153 | ``` 154 | * 包含 155 | * invoke-direct 156 | * invoke-virtual 157 | * invoke-static 158 | * invoke-super 159 | * invoke-interface 160 | * 函数返回结果 161 | * 要用指令move-result或move-result-object来保存函数返回的结果 162 | 163 | Smali代码示例: 164 | 165 | ```java 166 | .method private ifRegistered()Z 167 | .locals 2 // 本地寄存器的个数 168 | .prologue 169 | const/4 v0, 0x1 //v0赋值为1 170 | if-eqz v0, :cond_0 //判断v0是否等于0,等于0则跳到cond_0执行 171 | const/4 v1, 0x1 //符合条件分支 172 | :goto_0 //标签 173 | return v1 //返回v1的值 174 | :cond_0 //标签 175 | const/4 v1, 0x0 //cond_0分支 176 | goto :goto_0 //跳到goto_0执行 177 | .end method 178 | ``` 179 | 180 | ```java 181 | const-string v0, "NDKLIB" 182 | invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V 183 | ``` 184 | * 相当于java代码 185 | ```java 186 | System.loadLibrary("NDKLIB") 187 | ``` 188 | 189 | ```java 190 | const-string v0, "Eric" 191 | invoke-static {v0}, Lcmb/pbi;->t(Ljava/lang/String;)Ljava/lang/String; 192 | move-result-object v2 193 | ``` 194 | * 表示将方法`t`返回的`String对象`保存到`v`2中 195 | -------------------------------------------------------------------------------- /src/android_crack_tool/other_assistant_tool/README.md: -------------------------------------------------------------------------------- 1 | # 其他辅助类工具 2 | -------------------------------------------------------------------------------- /src/android_crack_tool/other_assistant_tool/android_debugger/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/android_crack_tool/other_assistant_tool/android_debugger/README.md -------------------------------------------------------------------------------- /src/android_protect/README.md: -------------------------------------------------------------------------------- 1 | # 安卓正向安全 2 | 3 | 此处主要介绍: 4 | 5 | * 安卓的 **正向**=**安全** 6 | * 防静态分析 7 | * 防砸壳:`加固` 8 | * 加固手段的发展历史 9 | * `加壳` 10 | * 防反编译 11 | * 代码混淆 12 | * `Proguard` 13 | * `Ollvm` 14 | * 防动态调试 15 | * 防调试和运行 16 | * 反调试 17 | * Root检测 18 | * 检测`Xposed`、`Frida`等 19 | * 防抓包=反抓包 20 | * `ssl pinning`=`证书绑定` 21 | 22 | ## 如何防护安卓的安全 23 | 24 | * 首要的:加强业务逻辑 25 | * api接口通讯 26 | * 全部接口都实现https 27 | * 且做`证书绑定`=`ssl pinning` 28 | * 其次:加强安全防破解技术 29 | * 代码 30 | * 代码混淆 31 | * 首选:`Obfuscator-LLVM`=`ollvm` 32 | * 其次:`ProGuard` 33 | * 其他防护 34 | * `VMP` 35 | * 给`dex`(中的核心逻辑)做VMP 36 | * 给`so`库(中的核心逻辑)做VMP 37 | * 加壳 38 | * 用第三方加壳服务或自己实现 39 | * 第三方加壳服务商 40 | * 腾讯乐固legu 41 | * 360加固保 42 | * 网易易盾 43 | * 等 44 | -------------------------------------------------------------------------------- /src/android_protect/anti_analysis/README.md: -------------------------------------------------------------------------------- 1 | # 防静态分析 2 | 3 | 此处去介绍安卓的正向安全中的: 4 | 5 | * 防静态分析 6 | * 防砸壳 7 | * 加壳 8 | * 防反编译 9 | * 代码混淆 10 | * `Proguard` 11 | * `Ollvm` 12 | -------------------------------------------------------------------------------- /src/android_protect/anti_analysis/add_shell/README.md: -------------------------------------------------------------------------------- 1 | # 加壳 2 | 3 | ## `加壳`的英文说法 4 | 5 | * `pack`=`加壳` 6 | * 加壳过程叫做:`pack` = `packing` 7 | * 加壳的动作叫做:`packer` 8 | * 其他叫法:`shelling` 9 | * `壳`=`shell` 10 | -------------------------------------------------------------------------------- /src/android_protect/anti_analysis/add_shell/common_harden_method.md: -------------------------------------------------------------------------------- 1 | # 常见加固服务提供商 2 | 3 | 市面上有很多家公司、厂家提供了免费或收费的加固方案: 4 | 5 | ## 各家加固方案的总结和对比 6 | 7 | 此处先列出: 8 | 9 | ### 总体效果对比 10 | 11 | * 体积(体积小的为优):`360 > 腾讯 > 爱加密 > 阿里 > 梆梆` 12 | * 兼容性: `阿里 > 腾讯 > 360 = 梆梆 > 爱加密` 13 | * 启动速度(时间短为优): `阿里 > 爱加密 > 360 = 梆梆 > 腾讯` 14 | * 漏洞: `腾讯 > 爱加密 > 360 > 梆梆 > 阿里` 15 | 16 | ### 实现原理对比 17 | 18 | 引用[别人](http://www.liuhaihua.cn/archives/153836.html)总结的(截至2015年)各家加固方案的技术原理,供参考: 19 | 20 | * **360**:基本上是把原始的`dex`加密存在了一个`so`中,加载之前解密 21 | * **阿里**:把一些`class_data_item`和`code_item`拆出去了,打开`dex`时会修复之间的关系。同时一些`annotation_off`是无效的的来防止静态解析 22 | * **百度**:把一些`class_data_item`拆走了,与阿里很像,同时它还会抹去`dex`文件的头部;它也会选择个别方法重新包装,达到调用前还原,调用后抹去的效果。我们可以通过对`DoInvoke` (`ART`)和`dvmMterp_invokeMethod` (`DVM`)监控来获取到相关代码 23 | * **梆梆**和**爱加密**:与360的做法很像,梆梆把一堆`read`、`write`、`mmap`等`libc`函数`hook`了,防止读取相关`dex`的区域,爱加密的字符串会变,但是只是文件名变目录不变 24 | * **腾讯**:针对于被保护的类或方法造了一个假的`class_data_item`,不包含被保护的内容。真正的`class_data_item`会在运行的时候释放并连接上去,但是`code_item`却始终存在于`dex`文件里,它用无效数据填充`annotation_off`和`debug_info_off`来实现干扰反编译 25 | 26 | ## 各家加固方案详解 27 | 28 | ### 360加固宝 29 | 30 | * 主页:http://jiagu.360.cn/ 31 | * 还有其他产品: 32 | * 针对手游的: 33 | * 360手游保 34 | * http://shouyoubao.360.cn 35 | * 针对网页的: 36 | * H5加固 37 | 38 | ### 腾讯乐固legu 39 | 40 | * 主页:http://legu.qcloud.com/ 41 | * `应用安全`=`Mobile Security`=`MS` 42 | * 功能:为用户提供移动应用(APP)全生命周期的一站式安全解决方案 43 | * 涵盖服务 44 | * 应用加固 45 | * 安全测评 46 | * 兼容性测试 47 | * 盗版监控 48 | * 崩溃监测 49 | * 安全组件 50 | * 特点 51 | * 坚固 52 | * 应用加固在不改 Android 应用源代码的情况下,将针对应用各种安全缺陷的加固保护技术集成到应用 APK,从而提升应用的整体安全水平,力保应用不被盗版侵权 53 | * 稳定 54 | * 应用安全提供的安全能力可在复杂环境下稳定运行,兼容性高、崩溃率低;不仅支持 arm、aarch64、x86、x64,还支持 android 2.0 到 android N 等几乎全系统全机型 55 | * 机制和原理分析: 56 | * 乐固做了一些反调试的东西,很多情况并不是反调试越厉害加固就越好 57 | * 乐固仍然是常规规的函数调用和返回方式,流程清晰很多 58 | * [腾讯云 移动应用安全 购买指南 产品文档](https://main.qcloudimg.com/raw/document/product/pdf/283_13769_cn.pdf) 59 | * 加壳 保护 功能 60 | * 反编译保护 61 | * DEX 反编译保护 62 | * 壳加密算法保护 63 | * AndroidManifest.xml 防篡改 64 | * DEX 文件整体加固保护 65 | * DEX 虚拟化加固(VMP) 66 | * SO 反编译保护 67 | * SO 库加壳保护 68 | * SO 库内存动态清除 69 | * SO 库与应用绑定保护 70 | * 高级 SO 混淆保护 71 | * SO 库字符串加密 72 | * 防篡改保护 73 | * APK 防篡改保护 74 | * APK 防二次打包保护 75 | * APK 签名文件校验保护 76 | * 源代码防篡改保护 77 | * DEX 文件防篡改 78 | * SO 库防篡改 79 | * 资源防篡改保护 80 | * assets 资源防篡改 81 | * res 资源防篡改 82 | * raw 资源防篡改 83 | * 配置文件防篡改 84 | * 防调试保护 85 | * 防调试保护 86 | * 防模拟器保护 87 | * 加固壳防动态调试 88 | * 防线程动态调试保护 89 | * 防进程动态调试保护 90 | * 防 JDWP 调试 91 | * 防注入保护 92 | * 防内存 dump 保护 93 | * 防内存数据读取 94 | * 防内存数据修改 95 | * 数据与资源保护 96 | * 资源防窃取保护 97 | * assets 资源防窃取 98 | * res 资源防窃取 99 | * raw 资源防窃取 100 | * SSL 证书防窃取 101 | * 本地数据保护 102 | * 本地 databases 目录数据库文件加密 103 | * 防日志泄漏 104 | * 应用防截屏/录屏 105 | 106 | ### 网易易盾 107 | 108 | * 网易易盾 109 | * 主页:[Android应用加固_APK加固_防篡改_APP加固_网易易盾](https://dun.163.com/product/android-reinforce) 110 | * 产品介绍 111 | * 防逆向 112 | * 多重指令转换VMP虚拟机保护技术,对关键代码、核心逻辑进行加密保护,避免通过IDA,Readelf等逆向工具分析获取源码 113 | * 防篡改 114 | * 对APP应用每个文件分配唯一识别指纹,替换任何一个文件会导致无法运行,防止广告病毒植入、二次打包、功能屏蔽等恶意破解 115 | * 防调试 116 | * 多重加密技术防止代码注入,防止JAVA层/C层动态调试,可有效抵挡动态调试、内存DUMP、代码注入、HOOK等恶意攻击 117 | * 数据保护 118 | * 提供安全键盘、通讯协议加密、数据存储加密、异常进程动态跟踪等功能技术,在各个环节有效阻止数据被捕获、劫持和篡改 119 | * 功能介绍 120 | * DEX安全保护 121 | * VMP虚拟机保护 122 | * Java2C保护 123 | * DEX函数抽取加密 124 | * SO库加密保护 125 | * SO代码高级加密 126 | * SO函数动态加密 127 | * 防HOOK攻击 128 | * 防脱壳 129 | * 资源文件加密 130 | * assets资源文件加密 131 | * H5文件加密 132 | * XML配置文件保护 133 | * 防调试 134 | * 防动态调试 135 | * 防内存DUMP 136 | * 防动态注入 137 | * 数据保护 138 | * 日志防泄露 139 | * 防截屏保护 140 | * 数据文件加密 141 | * 应用场景 142 | * 应用程序被破解 143 | * 核心代码被窃取 144 | * 恶意代码注入 145 | * 核心数据泄露 146 | * 安全检测未合规 147 | * 核心优势 148 | * 高安全性 149 | * 加固强度高,有效对抗多种反编译逆向工具,防止APP被破解剽窃 150 | * 高兼容性 151 | * 支持arm、x86及64位多种CPU架构,完美支持Android4.0到最新系统 152 | * 高稳定性 153 | * 积累丰富的网易内部APP服务经验,加固后性能几乎无影响 154 | * 极速便捷 155 | * 提供工具和命令行操作,编译、加壳一体化快速完成 156 | * 灵活定制 157 | * 提供多种加固项和定制加固服务,自由选取灵活定制,满足不同行业需求 158 | * 国际认证 159 | * 拥有ISO27001、CSA-STAR国际权威标准认证,安全合规双重保障 160 | 161 | ### 爱加密 162 | 163 | * http://ijiami.cn 164 | * 移动应用安全加固 165 | * 安卓:http://ijiami.cn/android 166 | * 核心技术 167 | * 防逆向 168 | * 通过DEX加花和加壳、SO文件高级混淆和加壳等技术对DEX和SO文件进行保护,防止被IDA等逆向工具分析 169 | * 防调试 170 | * 多重加密技术防止代码注入,防JAVA层/C层动态调试、防代码注入和防HOOK攻击 171 | * 页面数据防护 172 | * 应用防劫持、应用防截屏、虚拟键盘SDK产品和技术,防界面劫持插件对组件进行全方位监听 173 | * 防篡改 174 | * 在加固时提取APP内各文件的文件特征值,当文件运行时,系统解密加密文件提取特征值进行文件校验 175 | * 数据防泄漏 176 | * 使用多种加密算法,包括国际通用算法及自主研发的加密算法等,保护本地数据 177 | * 传输数据防护 178 | * 在客户端和服务器分别嵌入数据加密SDK,保证通道中传输的数据为高强度加密后的数据 179 | * 主要功能 180 | * 概述 181 | * 提升APP安全性 182 | * 源代码保护、SO库保护、DEX 文件保护、数据加密保护 183 | * 确保APP业务安全 184 | * 防盗版保护、防纂改、页面防劫持技术、防截屏技术、 环境清场、短信防劫持 185 | * 保障APP数据安全 186 | * 密钥白盒技术、APP通讯链路加密、数据本地加密技术、安全键盘 187 | * 确保APP的整体优化 188 | * APP包体大小不超过原包“±5%”、全面的兼容性测试、全面的性能测试 189 | * 功能点 190 | * 防逆向 191 | * DEX整体加密保护 192 | * DEX代码分离保护 193 | * DEX混合加密保护 194 | * DEX VMP保护 195 | * 双重VMP保护 196 | * Java2CPP 197 | * SO加壳 198 | * SO Linker 199 | * SO防调用 200 | * SO VMP 201 | * 防篡改 202 | * DEX文件防篡改 203 | * SO库文件防篡改 204 | * H5文件防篡改 205 | * 资源文件防篡改 206 | * 资源文件加密 207 | * 签名保护 208 | * 防调试 209 | * 防动态调试 210 | * 防内存代码注入 211 | * 防模拟器 212 | * 防加速器 213 | * 数据防泄漏 214 | * 防内存数据读取 215 | * 防内存数据修改 216 | * 防日志泄漏 217 | * 本地sharepferences数据加密 218 | * 本地SQLite数据加密 219 | * 页面数据防护 220 | * 防劫持 221 | * 防截屏 222 | * 安全键盘SDK 223 | * 传输数据防护 224 | * 通信协议加密SDK 225 | * 密钥白盒 226 | * 产品优势 227 | * 最新第六代高级双重VMP加密技术 228 | * 6种加密方式满足不同用户、行业的使用需求 229 | * 加密后包增量大小不超过原包“±5%” 230 | * 兼容性高达99%,实现ART全面兼容 231 | * 交付方式灵活,支持本地部署或者云部署,云部署支持私有云和公有云 232 | * 通过密钥白盒技术实现最强的加密强度 233 | * 获得上千家知名行业客户认可的移动安全技术方案 234 | * iOS:http://ijiami.cn/iosProtect 235 | * SDK:http://ijiami.cn/sdkProtection 236 | * SO库:http://ijiami.cn/soProtect 237 | * SO文件加壳保护 238 | * 对SO文件进行加壳保护,加壳后使用ida工具无法看出SO库文件的导入导出函数以及定位源码,有效防止黑客反编译,解包后看到真正源码 239 | * SO文件混淆保护 240 | * 爱加密基于移动安全领域的先进的技术和经验,针对黑客在分析阶段的攻击手段和行为进行分析,利用SO混淆编译器,可以有效的增加黑客信息搜集的难度和复杂度,防止应用被破解,降低APP安全风险 241 | 242 | ### 梆梆安全 243 | 244 | * 主页 245 | * [梆梆安全 - 移动安全领导品牌,保护智能生活,共建智慧城市!](https://www.bangcle.com) 246 | * 产品 247 | * 泰固 248 | * 移动应用安全加固 249 | * 针对目前移动应用普遍存在的破解、篡改、盗版、钓鱼欺诈、内存调试、数据窃取等各类安全风险,梆梆安全为开发者提供全面的移动应用加固加密技术和攻击防范服务 250 | * 核心加固技术 251 | * 防逆向(Anti-RE):抽取classes.dex中的所有代码,剥离敏感函数功能,混淆关键逻辑代码,整体文件深度加密加壳,防止通过apktool,dex2jar,JEB等静态工具来查看应用的Java层代码,防止通过IDA,readelf等工具对so里面的逻辑进行分析,保护native代码。 252 | * 防篡改(Anti-tamper):每个代码文件、资源文件、配置文件都会分配唯一识别指纹,替换任何一个文件,将会导致应用无法运行,存档替换、病毒广告植入、内购破解、功能屏蔽等恶意行为将无法实施。 253 | * 防调试(Anti-debug):多重加密技术防止代码注入,彻底屏蔽游戏外挂、应用辅助工具,避免钓鱼攻击、交易劫持、数据修改等调试行为。 254 | * 防窃取(Storage Encryption):支持存储数据加密,提供输入键盘保护、通讯协议加密、内存数据变换、异常进程动态跟踪等安防技术,有效防止针对应用动、静态数据的捕获、劫持和篡改。 255 | * 加固服务策略 256 | * 提供灵活多样的App加固方案 257 | * 防逆向保护 258 | * DEX文件加壳保护 259 | * DEX函数抽取加密 260 | * HTML开发框架保护 261 | * SO文件加壳保护 262 | * SO代码压缩及加密 263 | * SO库设备绑定 264 | * 源代码深度混淆 265 | * 防篡改保护 266 | * 开发者签名校验 267 | * 代码、资源文件、配置文件完整性校验 268 | * 数据透明加密及设备绑定 269 | * 配置文件、数据库文件加密 270 | * 视频、音频、图像等文件加密 271 | * 防调试保护 272 | * 防止进程/线程附加 273 | * 防止进程注入 274 | * 防HOOK攻击 275 | * 防内存Dump 276 | * App完整性保护 277 | * SO数据动态清除 278 | * 防窃取保护 279 | * 本地数据文件加密 280 | * 键盘数据加密 281 | * 通讯协议加密 282 | * 密钥白盒加密 283 | * 移动应用源代码加固 284 | * 未经混淆的源代码受到攻击后,易暴露程序中关键算法、核心业务逻辑、数据结构和模块的控制流布局等敏感内容 285 | 286 | ### 顶象安全 287 | 288 | * 主页 289 | * [顶象技术 - 金融业务安全的实践者,专注智能风控与全链路反欺诈](顶象技术 - 金融业务安全的实践者,专注智能风控与全链路反欺诈) 290 | * 功能 291 | * [Android加固保护 - 顶象技术](https://www.dingxiang-inc.com/business/stee) 292 | * 一套纵深防御体系 293 | * 分别从防逆向、防调试和防篡改等几个维度提供安全保护 294 | * 同时针对每个维度提供又进行了不同层次的划分,加固策可依据实际场景进行动态调配,安全和性能达到完美平衡。 295 | * 对APK提供DEX保护、SO保护、数据加密、资源防篡改、运行时保护等多角度全方位的保护 296 | * 核心功能 297 | * Dex加壳保护 298 | * 对dex文件整体进行加密隐藏,并进行反编译保护处理 299 | * Dex VMP保护 300 | * 将函数方法指令翻译为自定义指令集并加密存储,在运行过程中交由顶象dex虚拟机解释执行 301 | * SO加壳保护 302 | * 加密隐藏SO文件中的导入导出符号表以及常量字符串,同时对SO进行反编译保护处理 303 | * SO VMP保护 304 | * 对二进制函数指令翻译为自定义指令集并加密存储,在运行过程中交由顶象dex虚拟机解释执行 305 | * 特点与优势 306 | * 平台兼容性高 307 | * 支持ARM, ARM64, x86, x86_64, mips等多种cpu框架 308 | * 语言支持丰富 309 | * 支持包括Java,Kotlin,C/C++,Objective-C,Swift等在内的多种源码类型或混合型项目 310 | * 操作流程便捷 311 | * 把编译好的App上传并选择好加固方案即可完成整个加固流程,操作简单易懂,非技术人员也能轻松掌握 312 | * 体积增量小 313 | * 整体加固增量不会超过100kb,一般情况下是80kb 314 | * 应对风险 315 | * 程序逻辑被破解 316 | * 核心代码被窃取 317 | * API接口暴露 318 | * 恶意代码注入 319 | 320 | ### 几维安全 321 | 322 | * 主页 323 | * [几维安全 - 让万物互联更安全](https://www.kiwisec.com) 324 | * 功能 325 | * APP应用加固 326 | * 重点 327 | * 高效、专业、兼容好 328 | * 5分钟极速加密,轻松集成DEX加密、反调试、防盗版等多重安全防护 329 | * 产品简介 330 | * 移动应用安全加固是一项面向互联网企业和个人开发者的在线加密服务, 现支持安卓应用加密,用户只需提供APK包即可快速集成防静态工具分析、Dex文件保护、So文件加壳、内存保护、反调试、防二次打包等多项安全功能。 支持对金融、手游、电商、社交等多个行业的应用做加固保护,避免核心代码被反编译, 请求协议被伪造,APK包被植入恶意代码等诸多安全问题。 331 | * 功能特点 332 | * Dex文件保护 333 | * 对DEX文件进行加密保护,防止被Dex2Jar等工具逆向破解 334 | * Dex-Java2C 335 | * 将Java代码翻译为C代码,并实施Native层的代码混淆保护 336 | * SO文件加壳 337 | * 对SO文件进行整体加壳保护,防止IDA Pro等工具逆向分析 338 | * 防二次打包 339 | * 集成正版签名校验功能,运行时动态校验,防止被植入恶意代码 340 | * 内存加密 341 | * 防止内存数据被篡改或Dump,比如Dump解密后的Java代码 342 | * 反调试 343 | * 拒绝调试器对当前应用的附加操作,防止程序被恶意调试分析 344 | * 自身虚拟化保护 345 | * 专业版采用代码虚拟化技术对自身代码进行保护,防止逆向分析 346 | * 兼容性良好 347 | * 测试覆盖200+机型,兼容性达到99%,支持ART模式 348 | * 应对风险 349 | * Dex文件反编译 350 | * So文件反编译 351 | * 核心技术窃取 352 | * 通信模块破解 353 | * API接口暴露 354 | * 密钥窃取 355 | * 注入恶意代码 356 | * 伪造盗版应用 357 | * SO源码混淆保护 358 | * 重点 359 | * 基于NDK项目源码,通过安装NDK插件即可集成代码混淆、轻量虚拟化、字符串加密等多项高强度的安全保护 360 | * 产品简介 361 | * SO库源代码保护是一款离线的安全编译器工具,主要用于保护Android NDK项目中的核心代码,避免因逆向工程或破解,造成核心技术被泄漏、代码执行流程被分析等安全问题。该安全编译器和普通编译器相似,基于项目源代码可将C、C++代码编译成二进制代码,不同之处在于,安全编译器在编译的时,能够对代码进行混淆、轻量虚拟化、字符串加密等安全保护。从而避免攻击者通过IDA Pro等逆向工具反编译二进制代码,分析业务代码执行流程,进一步篡改或窃取核心技术。 362 | 363 | ### 阿里聚安全 364 | 365 | * http://jaq.alibaba.com/ 366 | * **20180801已下线** 367 | * 原理分析: 368 | * Ali 利用 SP 来储存返回地址和参数所以整个流程很混乱,基本看上去就是在各种 JUMP 369 | -------------------------------------------------------------------------------- /src/android_protect/anti_analysis/add_shell/why_encrypt_harden.md: -------------------------------------------------------------------------------- 1 | # 为何要加壳/加固 2 | 3 | * 安卓应用主要基于Java开发 4 | * 极易被破解 5 | * 造成影响 6 | * 代码或关键接口暴露 7 | * 甚至被别人加入广告,病毒等二次打包发布 8 | * 给公司和用户均带来巨大的风险 9 | * 应对破解的最便捷有效的方式 10 | * 加固=加壳 11 | * 通过加固可以在一定程度上达到反编译和防止被二次打包的效果 12 | 13 | * 其他一些原因 14 | * 处于学习目的,想要了解、分析、学习某个安卓app的内部设计和代码逻辑 15 | * 所以需要反编译和破解 16 | * 所以防止别人破解要加密和加固 17 | 18 | 但是加固也有些缺点: 19 | 20 | * 加固后对应用的影响 21 | * 体积 22 | * 变大(一些) 23 | * 启动速度 24 | * 变慢(一些) 25 | * 效率(略)降低 26 | * 兼容性 27 | * 部分方案加固后,会导致无法正常某些平台的正常运行 28 | * 使用成本 29 | * 有些加固方案需要收费 30 | * 影响部分应用市场的上架 31 | * 有部分的市场会拒绝加壳后的应用上架 32 | -------------------------------------------------------------------------------- /src/android_protect/anti_analysis/code_obfuscation/README.md: -------------------------------------------------------------------------------- 1 | # 代码混淆 2 | 3 | * `混淆`=`代码混淆`=`花指令` 4 | * 含义:把原先的代码通过变量替换(成a,b,c等)方式,使得代码不可读,很难读 5 | * 目的:增加破解人员读懂原先代码逻辑的难度 6 | 7 | 下面详细介绍安卓代码混淆的技术方案: 8 | 9 | * `ProGuard` 10 | * `Obfuscator-LLVM` 11 | 12 | ## 花指令 13 | 14 | * `加花` = `花指令` 15 | * 名称: 16 | * `花指令` 17 | * 又称: 18 | * `垃圾指令` 19 | * `指令`其实就是`字节` 20 | * =`Junk Bytes`=`JunkBytes` 21 | * `垃圾代码`=`Junk Code`=`JunkCode` 22 | * 把`花指令`加到代码中的动作:`加花` 23 | * 起源:`花指令`这个词来源于汇编语言 24 | * 含义:在真实代码中插入一些(`垃圾`的、`无用`的)`代码`/`指令`/`字节`,但又不会改变程序的原始逻辑,确保原有程序的正确执行 25 | * 目的:反汇编工具在反汇编时会出错,导致反汇编工具失效,提高破解难度 26 | * 隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法,使得程序无法很容易地反编译,即使被反编译后,也难以理解程序内容, 达到混淆视听的效果,增加破解和逆向的难度 27 | * 主要思想 28 | * 当花指令跟正常指令的开始几个字节被反汇编工具识别成一条指令的时候,才可以使得反汇编工具报错 29 | * 插入的花指令都是一些随机的但是不完整的指令 30 | * 特点 31 | * 花指令必须要满足两个条件 32 | * 在程序运行时,花指令是位于一个永远也不会被执行的路径中 33 | * 这些花指令也是合法指令的一部分,只不过它们是不完整指令而已 34 | * 实现思路 35 | * 在每个要保护的代码块之前插入无条件分支语句和花指令 36 | * ![junkcode_switch_flow](../../../assets/img/junkcode_switch_flow.png) 37 | * 实际案例 38 | * Dalvik Bytecode Obfuscation on Android中,插入fill-array-data-payload花指令,导致反编译工具失效 39 | * ![junkcode_decompile_fail_fill_payload](../../../assets/img/junkcode_decompile_fail_fill_payload.png) 40 | * 现存服务提供商 41 | * 举例 42 | * 网易易盾的:安卓dex加花保护 43 | * 相关背景 44 | * 反汇编工具常用算法 45 | * 线性扫描算法 46 | * 逻辑:依次按顺序逐个地将每一条指令反汇编成汇编指令 47 | * 结果:容易把花指令错误识别,导致反汇编出错 48 | * 举例 49 | * 指令 50 | * ![junkcode_origin_assembly_code](../../../assets/img/junkcode_origin_assembly_code.png) 51 | * 反汇编后出错 52 | * ![junkcode_deassembly_wrong_code](../../../assets/img/junkcode_deassembly_wrong_code.png) 53 | * 递归扫描算法 54 | * 逻辑:按顺序逐个反汇编指令 55 | * 如果某个地方出现了分支,就会把这个分支地址记录下来,然后对这些反汇编过程中碰到的分支进行反汇编 56 | * 结果:反汇编能力更强 57 | * 总结 58 | * 常用Android逆向工具中的反汇编算法 59 | * ![re_common_deassembly_algorithm](../../../assets/img/re_common_deassembly_algorithm.png) 60 | -------------------------------------------------------------------------------- /src/android_protect/anti_analysis/code_obfuscation/obfuscator_llvm.md: -------------------------------------------------------------------------------- 1 | # Obfuscator-LLVM 2 | 3 | * `Obfuscator-LLVM`=`ollvm` 4 | * 功能特性 5 | * `指令替换` 6 | * 参数:`-mllvm -sub` 7 | * 文档:[Instructions Substitution](https://github.com/obfuscator-llvm/obfuscator/wiki/Instructions-Substitution) 8 | * `Bogus控制流` 9 | * 参数:`-mllvm -bcf` 10 | * 文档:[Bogus Control Flow](https://github.com/obfuscator-llvm/obfuscator/wiki/Bogus-Control-Flow) 11 | * `控制流扁平化`=`控制流平坦化` 12 | * 参数:`-mllvm -fla` 13 | * 文档:[Control Flow Flattening](https://github.com/obfuscator-llvm/obfuscator/wiki/Bogus-Control-Flow) 14 | * `函数注解` 15 | * 文档:[Functions annotations](https://github.com/obfuscator-llvm/obfuscator/wiki/Bogus-Control-Flow) 16 | * 应用 17 | * 市场上一些加固厂商(比如360加固宝、梆梆加固)会使用改进的Obfuscator-LLVM对它们so文件中的一些关键函数采用Obfuscator-LLVM混淆,增加逆向的难度 18 | * 简单一点的是,用Obfuscator-LLVM混淆native代码,膨胀so并插入花指令 19 | * 文档 20 | * Github 21 | * obfuscator-llvm/obfuscator 22 | * https://github.com/obfuscator-llvm/obfuscator 23 | * Home · obfuscator-llvm/obfuscator Wiki 24 | * https://github.com/obfuscator-llvm/obfuscator/wiki 25 | * 最新版 26 | * obfuscator-llvm/obfuscator at llvm-4.0 27 | * https://github.com/obfuscator-llvm/obfuscator/tree/llvm-4.0 28 | 29 | ## 相关:llvm 30 | 31 | * `LLVM`=`Low Level Virtual Machine` 32 | * 概述:a open source toolkit for the construction of highly optimized compilers, optimizers, and runtime environments 33 | * 其下很多子项目 34 | * LLVM Core 35 | * LLVM总体架构 36 | * ![llvm_core_arch_flow](../../../assets/img/llvm_core_arch_flow.png) 37 | * [Clang](http://clang.llvm.org/) 38 | * [LLDB](http://lldb.llvm.org/) 39 | * [libc++](http://libcxx.llvm.org/) 和 [libc++ ABI](http://libcxxabi.llvm.org/) 40 | * [compiler-rt](http://compiler-rt.llvm.org/) 41 | * [MLIR](http://mlir.llvm.org/) 42 | * [OpenMP](http://openmp.llvm.org/) 43 | * [polly](http://polly.llvm.org/) 44 | * [libclc](http://libclc.llvm.org/) 45 | * [klee](http://klee.llvm.org/) 46 | * [LLD](http://lld.llvm.org/) 47 | * 官网 48 | * http://www.llvm.org/ 49 | -------------------------------------------------------------------------------- /src/android_protect/anti_analysis/code_obfuscation/proguard.md: -------------------------------------------------------------------------------- 1 | # ProGuard 2 | 3 | ## ProGuard的作用 4 | 5 | * 压缩=Shrinking 6 | * 移除未被使用的类、属性、方法等,并且会在优化动作执行之后再次执行(因为优化后可能会再次暴露一些未被使用的类和成员 7 | * 优化=Optimization 8 | * 优化字节码,并删除未使用的结构 9 | * 混淆=Obfuscation 10 | * 将类名、属性名、方法名混淆为难以读懂的字母,比如a,b,c等,增大反编译难度 11 | 12 | ## ProGuard的输出文件说明 13 | 14 | * `dump.txt`:说明 APK 中所有类文件的内部结构 15 | * `mapping.txt`:提供原始与混淆过的类、方法和字段名称之间的转换和对应关系 16 | * `seeds.txt`:列出未进行混淆的类和成员 17 | * `usage.txt`:列出从 APK 移除的代码 18 | 19 | ## 注意事项 20 | 21 | * 有些库,混淆后,导致代码不可用 22 | * 所以有些好的库,专门支持了ProGuard 23 | * 举例 24 | * `okhttp` 25 | * GitHub 26 | * https://github.com/square/okhttp 27 | * If you are using R8 or ProGuard add the options from okhttp3.pro 28 | * [R8 proguard - OkHttp](https://square.github.io/okhttp/r8_proguard/) 29 | * 有些库不够好,需要自己额外处理 30 | * 举例 31 | * PermissionGen 32 | * https://github.com/lovedise/PermissionGen 33 | * [某人](https://blog.csdn.net/dobiman/article/details/78595709):打包混淆以后就废了,需要自己加配置,避免部分模块被混淆,才勉强可用 34 | -------------------------------------------------------------------------------- /src/android_protect/anti_debug/README.md: -------------------------------------------------------------------------------- 1 | # 防动态调试 2 | 3 | 此处主要介绍安卓的正向安全中的: 4 | 5 | * 防动态调试 6 | * 防调试和运行 7 | * 反调试 8 | * Root检测 9 | * 检测`Exposed`、`Frida`等 10 | * 防抓包=反抓包 11 | * `ssl pinning`=`证书绑定` 12 | -------------------------------------------------------------------------------- /src/android_protect/harden_history/README.md: -------------------------------------------------------------------------------- 1 | # 加固手段发展历史 2 | 3 | * `加固`=`应用加固` 4 | * 含义:给原有的安卓应用,增加了保护手段,增强安全性,防止被轻易破解 5 | * 目的: 6 | * 比如 7 | * 使得别人即使反编译安卓应用得到了的jar包,也看不到原始的项目的源码 8 | * `加固`的英文说法 9 | * 自己暂时用:`harden` 10 | * 被加固了的(apk)就叫:`hardened` 11 | * 主要包括 12 | * 代码混淆 13 | * `java`层 14 | * `so`层=`native`层 15 | * `加壳` 16 | * 注:壳是一段保护软件不被非法修改或反编译的程序 17 | 18 | 下面整理安卓的加固技术的历史发展。 19 | 20 | ## 概述 21 | 22 | 常见Android的`APK`的五代加固技术比较: 23 | 24 | ![android_common_harden_tech_compare](../../assets/img/android_common_harden_tech_compare.jpg) 25 | 26 | * 加固的发展历史 27 | * 目前加固技术基本都发展到第三代 28 | * 前2代的加固技术破解难度不大,基本被淘汰 29 | * 第三代加固技术,由于各加固服务商加固原理大致相同 30 | * 第三代加固技术主要有2种方式: 31 | * 对源apk整体做一个加固,放到指定位置,运行的时候再解密动态加载 32 | * 对apk加固的破解,叫做:脱壳=去壳 33 | * == Dex Method代码动态解密 34 | * 对so进行加固,在so加载内存的时候进行解密释放 35 | * 对so的加固的破解,叫做:so库反编译 36 | * == So代码膨胀混淆 37 | 38 | ## 不同历史阶段 39 | 40 | 用人类历史发展的阶段去类比解释如下: 41 | 42 | ### 原始社会时期 43 | 44 | 主要方式:`代码混淆` 45 | 46 | ### 奴隶社会时期 47 | 48 | 主要方式: `自我校验` 49 | 50 | ### 封建社会时期 51 | 52 | 主要方式: `dex文件变形` 53 | 54 | ### 资本主义社会时期 55 | 56 | 1. Dex保护 57 | 1. 隐藏dex文件 58 | * 既然dex文件中包含了核心逻辑,那么把dex隐藏,再通过另外的方式加载起来,是不是就能达到保护dex的目的了呢?于是这成为一些第三方加固产品保护应用的方式。 59 | * 他们通过加密甚至压缩(早期是不存在压缩的,只是单纯的加密)方式把dex转换为另外一个文件。而被加固后的apk里面的dex则是那些第三方加固产品用来启动和加载隐藏dex的入口,也就是壳。 60 | * 感觉小花生v3.6.9 和 康美通 v.4.4.0就是这类? 61 | * 总之是看不到dex文件 62 | 2. 对dex文件进行变形 63 | * 这里所说的变形,不同于封建社会时期提到的变形。这种办法不隐藏dex,而是让dex保留在外面,但是当破解者去分析这个dex的时候,会发现dex里面的内容是不完整的。 64 | 3. 对dex结构进行变形 65 | * 此类方法是比较复杂的,了解dex结构的人应该很清楚,dex结构中包含DexClassDef、ClassDataItem、DexCode,这些是dalvik虚拟机运行一个dex必不可少的部分,特别是DexCode,DexCode包含了虚拟机运行的字节码指令。 66 | * 部分第三方加固产品开始尝试这种方式,他们的保护方案中可能抽取了DexCode中的部分,然后对字节码指令添加nop,或者连ClassDataItem和DexCode一同抽取,或者对上面提到的三个部分都做处理。抽取完之后,还要做修正、修复等工作,总之很烦锁。因为dex运行时有很多关于dex的校验,即使校验通过还有一些偏移问题。 67 | * Dex都被抽取修改后为什么还能运行呢?那是因为在运行之前或者运行之中对这个内存中的dex做修正。修正工作也很复杂,一般选择在运行之前做修正,这样可以减少很大的工作量,甚至可能还需要借助hook来帮忙。 68 | 2. So保护 69 | 1. 修改Elf头、节表 70 | * 相关工具: 71 | * `010 Editor` 72 | * `IDA` 73 | 2. 选择开源加壳工具 74 | * 最常用的: 75 | * UPX壳 76 | * 支持arm架构的ELF加固 77 | 3. 进程防调试、或增加调试难度 78 | * 调试一个进程首先要ptrace这个进程 79 | * 防止进程被ptrace 80 | 81 | ### 社会主义时期 82 | 83 | * 之前遗留问题 84 | 1. 隐藏dex遗留的问题 85 | * 破解办法: 86 | * 实现自定义rom 87 | * 利用Inject原理将目标进程注入,代码进行hook系统函数来达到脱壳的目的 88 | * FDex2,DumpDex感觉就是用的这个机制? 89 | 2. Dex结构变形带来的弊端 90 | * 安卓5.0新增了ART 91 | * ART可以直接将dex编译为本地指令运行 92 | * Dex结构变形遗留的问题很明显 93 | * 兼容性 94 | * ART模式下的编译问题 95 | 3. ELF简单修改遗留问题 96 | 4. UPX方面的劣势 97 | * 虽然upx是最为so加壳的首选,但是upx代码逻辑复杂,很难达到定制,特别是让它同时支持多种架构 98 | * -》基于上述原因一些第三方加固产品只是简单的利用upx加壳,并修改一些数据。不过很容易被有upx经验的人识破并脱壳 99 | * 新防护技术 100 | * llvm混淆 101 | * 效果非常好,可以实现,即使被反编译后,也很难看懂代码逻辑 102 | * `VMP` 103 | -------------------------------------------------------------------------------- /src/android_protect/harden_history/vmp.md: -------------------------------------------------------------------------------- 1 | # VMP 2 | 3 | 新出的安卓加密技术,叫做:`VMP` 4 | 5 | * `VMP` 6 | * 名称:`VMP`=`Virtual Machine Protection`=`虚拟机保护`=`虚拟软件保护技术`=`代码虚拟化` 7 | * 是什么:(安卓)代码加固领域的技术 8 | * 背景和起源 9 | * 俄罗斯的著名软件保护软件 VmProtect=虚拟机保护 10 | * 主页:[VMProtect Software Protection](https://vmpsoft.com/) 11 | * 以此为开端引起了软件保护壳领域的革命,各大软件保护壳都将虚拟机保护这一新颖的技术加入到自己的产品中 12 | * 为什么(要指令虚拟化)? 13 | * 软件保护壳的发展阶段 14 | * 第一阶段 15 | * 当壳完成解密目标代码时,它将不会再次控制程序,被保护程序的明文将在内存中展开。在此之前,壳可以调用一切系统手段来防治黑客的调试与逆向 16 | * 第二阶段 17 | * 可以实现分段式的加解密,壳运行完毕后,并不会消失而仍然会在程序运行到某个点时再次启动 18 | * 第三阶段 19 | * 其实最简单的解释是,将被保护的指令使用一套自定义的字节码(逻辑上等价)来替换掉程序中原有的指令,而字节码在执行的时候又由程序中的解释器来解释执行,自定义的字节码只有自己的解释器才能识别,也是因为这一点,基于虚拟机的保护相对其他保护而言要更加难分析 20 | * 核心原理 21 | * 代码虚拟化 = 基于`Dalvik`的解释器实现自己定义的指令 22 | * 说明 23 | * 将程序代码编译为虚拟机指令即虚拟代码(自己定义的代码集),通过虚拟CPU解释并执行的一种方式 24 | * 自定义一套虚拟机指令和对应的解释器,并将标准的指令转换成自己的指令,然后由解释器将自己的指令给对应的解释器 25 | * 举例 26 | * x86或arm体系架构的标准汇编指令(mov、add、pop等),已变成了自定义加密汇编指令(xchg、db、dq等) 27 | * 图解 28 | * ![vmp_encrypt_theory](../../assets/img/vmp_encrypt_theory.png) 29 | * 运行机制 30 | * ![vmp_code_procedure](../../assets/img/vmp_code_procedure.jpg) 31 | * 运行流程 32 | * 加固端 33 | * ![vmp_protect_flow](../../assets/img/vmp_protect_flow.jpg) 34 | * 解释器 35 | * ![vmp_parse_flow](../../assets/img/vmp_parse_flow.jpg) 36 | * 缺点 37 | * 存在一定兼容性问题 38 | * 会降低代码执行效率 39 | * 应用 40 | * 说明 41 | * 由于兼容性和效率等问题,所以VMP一般只用于关键函数 42 | * 根据保护的内容,可以分 43 | * `DEX`的`VMP` 44 | * `SO`的`VMP` 45 | * 多数VMP的实现都是:直接把`smali`翻译成`c`实现 46 | * 举例 47 | * 爱加密 48 | * 所说的第四代vmp是先提取dex中的虚拟指令集,将dex中提取指令的方法清空,并将方法修改为native方法;然后通过爱加密自定义指令替换规则,替换提取的指令并保存到其他文件中 49 | * 通付盾 50 | * 实现了自定义指令集和自定义虚拟机运行环境的动态代码保护方案 51 | * 产品 52 | * 通付盾安全虚拟机 PayegisVM 3.0 53 | * 虚拟机 54 | * 背景:VMP的核心要点是,设计一个虚拟机,实现自定义指令的功能 55 | * 包含几大模块 56 | * VM 虚拟机核心 57 | * VM 编译器 58 | * 如何设计一个编译器? 59 | * ![vmp_design_compiler_flow](../../assets/img/vmp_design_compiler_flow.png) 60 | * 编译器工作流程 61 | * 1.反汇编ARM 62 | * 2.生成中间代码 63 | * 3.处理定位 64 | * 4.生成opcode 65 | * VM 链接器 66 | * VM 各种stub 67 | * 想实现一个基于虚拟机的保护壳,涉及内容 68 | * 随机VCode与Handle的关系映射 69 | * Handle混淆与乱序 70 | * 代码变形 71 | * 重定位 72 | * 资料 73 | * 网上某个开源实现 74 | * GitHub主页 75 | * eaglx/VMPROTECT: Obfuscation method using virtual machine. 76 | * https://github.com/eaglx/VMPROTECT 77 | -------------------------------------------------------------------------------- /src/android_reverse/README.md: -------------------------------------------------------------------------------- 1 | # 安卓逆向破解 2 | 3 | 此处主要介绍安卓的逆向破解方面的内容: 4 | 5 | ## 概述 6 | 7 | * 安卓的逆向破解 8 | * 静态分析 9 | * 按文件格式类型分 10 | * 针对`apk` 11 | * 查看apk信息 12 | * `aapt` 13 | * 解包工具:输出`dex`、`so`、`smali` 14 | * `apktool` 15 | * 反编译工具 16 | * 直接apk转java 17 | * `jadx` 18 | * `JEB` 19 | * `GDA` 20 | * 针对`dex` 21 | * 各种导出dex的工具=砸壳工具=脱壳工具 22 | * `FDex2` 23 | * `DumpDex` 24 | * `DexExtractor` 25 | * 各种反编译dex的工具 26 | * dex转jar 27 | * `dex2jar` 28 | * dex转smali 29 | * `baksmali` 30 | * dex直接转java 31 | * `jadx` 32 | * `GDA` 33 | * 针对`jar` 34 | * jar转java=各种反编译工具 35 | * `Procyon` 36 | * `CFR` 37 | * `JD-GUI` 38 | * 针对`so`库文件=(往往是ARM64架构)的ELF文件 39 | * 导出静态资源 40 | * `readelf` 41 | * `objdump` 42 | * `razbin2` 43 | * 反编译代码逻辑 44 | * `IDA` 45 | * `Hopper` 46 | * `Radare2` 47 | * `Ghidra` 48 | * 涉及子领域 49 | * 反代码混淆 50 | * 动态调试 51 | * (绕过限制去)抓包 52 | * 绕过证书绑定的Exposed插件或Frida的脚本 53 | * 反root检测 54 | * 反反调试 55 | * 各种动态调试手段 56 | * 调试smali:`AS+smalidea插件` 57 | * app进程可调试 58 | * Magisk插件:`MagiskHide Props Config` 59 | * 调试Frida:`Frida` 60 | * Frida环境搭建 61 | * Magisk插件:`MagiskFrida` 62 | * 调试lldb:`LLDB` 63 | * 调试Xposed插件 64 | * `XPosed` 65 | * `EdXposed` 66 | * `LSPosed` 67 | * 模拟代码执行 68 | * `Unidbg` 69 | * `Unicorn` 70 | * 辅助调试工具 71 | * `adb` 72 | * `DDMS` 73 | * 输出 74 | * 重新打包apk 75 | * `apktool` 76 | * `keytool` 77 | * `jarsigner`或`apksigner` 78 | * `zipalign` 79 | * 用代码重写逻辑 80 | * Python代码 81 | * C/C++代码 82 | * 改机定制ROM 83 | * `AOSP源码`编译 84 | * `JNI`开发 85 | * `NDK`开发 86 | 87 | 另外: 88 | 89 | * 砸壳思路=脱壳方案 90 | * 目前多数都是基于`Hook`框架,去从安卓app中导出dex文件 91 | * 典型的hook框架 92 | * `XPosed`:从根上hook了Android Java虚拟机 93 | * `Cydia`:支持`JNI`和`java`层的hook功能 94 | * 再去从dex中转换出java代码 95 | 96 | ## 详解 97 | 98 | 具体内容,详见独立子教程: 99 | 100 | [Android逆向开发](https://book.crifan.org/books/android_reverse_dev/website/) 101 | -------------------------------------------------------------------------------- /src/appendix/README.md: -------------------------------------------------------------------------------- 1 | # 附录 2 | 3 | 下面列出相关参考资料。 -------------------------------------------------------------------------------- /src/appendix/reference.md: -------------------------------------------------------------------------------- 1 | # 参考资料 2 | 3 | * 【整理】安卓安全技术:VMP android 4 | * 【已解决】mac中安装最新版本的安卓反编译工具:Apktool 5 | * 【已解决】用Python代码实现少儿趣配音的请求参数sign的计算逻辑 6 | * 【整理】安卓安全 Smali 7 | * 【整理】安卓安全和破解相关:加花 花指令 8 | * 【整理】安卓 防护 加壳 服务商 总结 9 | * 10 | * [【已解决】mac中试用FDex2去hook导出安卓app的dex等文件](https://www.crifan.org/try_fdex2_mac_hook_export_dex_other_files_android_app) 11 | * [【已解决】从不同版本的小花生apk中反编译出包含业务逻辑代码的dex和jar包源码](https://www.crifan.org/dex_jar_package_source_code_containing_business_logic_decompiled_from_different_versions_xiaoseng_apk) 12 | * [【已解决】小花生安卓app的v3.4.8版破解后找到源码中是否包含J字段的加密逻辑](https://www.crifan.org/peanut_android_app_v3_4_8_version_cracked_find_whether_source_code_contains_j_field_encryption_logic) 13 | * [【已解决】尝试破解小花生app安卓apk希望看到api返回的json中的J的解密算法得到明文](https://www.crifan.org/try_crack_xiaofang_app_android_apk_want_see_api_return_json_j_decryption_algorithm_get_plaintext) 14 | * [【已解决】如何反混淆即还原反编译后混淆的安卓代码](https://www.crifan.org/how_decompile_deobfuscation_android_java_source) 15 | * [【记录】从反编译安卓apk得到的java源码代码中尝试找返回json中J加密的逻辑和线索](https://www.crifan.org/try_find_logic_clues_return_j_encryption_json_java_source_code_from_decompilation_android_apk) 16 | * [【已解决】小花生app中api请求返回json的C,J,M,ST的含义和如何破解解密](https://www.crifan.org/c_j_m_st_json_api_request_app_how_decrypt_meaning) 17 | * [【记录】爬取小花生app中自主阅读馆和亲子阅读馆中的有音频的绘本数据](https://www.crifan.org/crawl_xiaohuasheng_app_self_reading_parent_child_reading_has_audio_storybook_data) 18 | * [【未解决】dex2jar反编译dex后jar文件包含java代码:throw new VerifyError bad dex opcode](https://www.crifan.org/dex2jar_decompiled_dex_contains_java_code_throw_new_verifyerror_bad_dex_opcode) 19 | * [【已解决】python实现java的MessageGZIP.uncompressToString即gzip的解码](https://www.crifan.org/python_implementation_java_messagegzip_uncompresstostring_gzip_decoding) 20 | * [【已解决】Python中实现java中的Base64.decode解码加密字符串](https://www.crifan.org/python_implementation_java_base64_decode_decoding_encrypted_string) 21 | * [【已解决】从反编译小花生apk得到的包含业务逻辑代码中找到J字段解码的逻辑并用Python实现](https://www.crifan.org/decoding_logic_j_field_was_found_code_containing_business_logic_obtained_from_decompiled_xiaosang_apk_realized_python) 22 | * [【无需解决】安卓apk反编译出的smali反向破解出java原始代码](https://www.crifan.org/android_apk_decompiled_out_smali_reverse_decryption_java_original_code) 23 | * [【已解决】安卓app如何脱壳如何破解加固](https://www.crifan.org/android_app_how_peel_how_crack_reinforcement) 24 | * [【已解决】找小花生app的旧版本apk并尝试能否安装使用](https://www.crifan.org/find_old_version_xiaoseng_app_apk_try_install_use_it) 25 | * [【部分解决】尝试破解安卓apk康美通去得到java源码](https://www.crifan.org/try_crack_android_apk_commeton_get_java_source_code) 26 | * [【整理】JVM参数-Xms和-Xmx参数的含义](https://www.crifan.org/meaning_jvm_parameters_xms_xmx) 27 | * [【未解决】用ART,oat,dex2oat相关机制去破解新一代360、腾讯等安卓apk的加固](https://www.crifan.org/use_art_oat_dex2oat_related_mechanisms_crack_new_generation_360_tencent_other_android_apk_reinforcement) 28 | * [【整理】把jar包转换为java源代码的java反编译器的整理和对比](https://www.crifan.org/compilation_comparison_java_decompilers_that_convert_jar_packages_into_java_source_code) 29 | * [【已解决】用基于Procyon的Luyten反编译安卓jar包得到java源码](https://www.crifan.org/use_procyon_luyten_decompile_android_jar_package_get_java_source_code) 30 | * [【未解决】小花生中如何得到getToken的计算逻辑以便得到正确的md5值可以正常请求接口](https://www.crifan.org/how_get_calculation_logic_gettoken_so_that_correct_md5_value_can_be_obtained_request_interface_normally) 31 | * [【已解决】mac版JD-GUI查看并导出jar包的java源代码](https://www.crifan.org/jd_gui_for_mac_view_export_java_source_code_jar_package) 32 | * [【已解决】用java反编译器CFR从jar包导出java源代码](https://www.crifan.org/export_java_source_code_from_jar_package_using_java_decompiler_cfr) 33 | * [【已解决】用Procyon命令行去从jar包导出java源代码](https://www.crifan.org/use_procyon_command_line_export_java_source_code_from_jar_package) 34 | * [【记录】从安卓的apk中解压出各种项目文件](https://www.crifan.org/extract_various_project_files_from_apk) 35 | * [【已解决】用WrBug的DumpDex从app中hook导出dex文件](https://www.crifan.org/use_dumpdex_hook_dex_file_from_app) 36 | * [【已解决】mac中用dex2jar反编译dex文件导出jar包文件](https://www.crifan.org/mac_uses_dex2jar_decompile_dex_files_export_jar_package_files) 37 | * [【已解决】夜神安卓模拟器中导出文件到mac电脑](https://www.crifan.org/export_files_from_android_emulator_mac) 38 | * [【已解决】Nox夜神安卓模拟器中/mnt/shared对应Mac的共享目录在哪里](https://www.crifan.org/_mnt_shared_mnt_shared_mnt_shared) 39 | * [【基本解决】尝试破解安卓apk马蜂窝去得到java源码](http://www.crifan.org/try_crack_android_apk_mafengwo_to_get_java_sourcecode) 40 | * [【已解决】搞懂安卓app混淆和加固常见做法和相关逻辑](https://www.crifan.org/understand_common_practices_logic_android_app_obfusion_reinforcement) 41 | * 42 | * [破解某小说App(一) - 掘金](https://juejin.im/post/5c74f930518825622f13049c) 43 | * [最新乐加固脱壳详细教程(有图有真相) - Android安全 - 逆向未来技术社区 - Powered by Discuz!](https://www.pd521.com/thread-1535-1-1.html) 44 | * [Android逆向助手反编译APK - 长江某菜鸟的博客 - CSDN博客](https://blog.csdn.net/qq_33729889/article/details/65939119) 45 | * [加固保-移动应用安全资讯](http://jiagu.360.cn/1101141392.php?dtid=1101141786&did=1101262105) 46 | * [android - Is there a way to get the source code from an APK file? - Stack Overflow](https://stackoverflow.com/questions/3593420/is-there-a-way-to-get-the-source-code-from-an-apk-file/55567538#55567538) 47 | * [spriteviki/Dex2oatHunter: Automatic Unpacking Tool for Android Dex Files](https://github.com/spriteviki/Dex2oatHunter) 48 | * [Dex : Java Data Visualization](http://dexvis.net/) 49 | * [What are .dex files in Android? - Stack Overflow](https://stackoverflow.com/questions/7750448/what-are-dex-files-in-android) 50 | * [Dalvik 可执行文件格式 | Android Open Source Project](https://source.android.com/devices/tech/dalvik/dex-format.html) 51 | * [ART 和 Dalvik  |  Android Open Source Project](https://source.android.com/devices/tech/dalvik) 52 | * [压缩代码和资源  |  Android Developers](https://developer.android.com/studio/build/shrink-code) 53 | * [Android应用加固产品使用对比 - 『移动安全区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn](https://www.52pojie.cn/thread-832804-1-1.html) 54 | * [S3cuRiTy-Er1C/JebScripts: Jeb public scripts](https://github.com/S3cuRiTy-Er1C/JebScripts) 55 | * [flankerhqd/jebPlugins: Various Jeb plugins, including obfuscation restore](https://github.com/flankerhqd/jebPlugins) 56 | * [enovella/jebscripts: A set of JEB Python/Java scripts for reverse engineering Android obfuscated code](https://github.com/enovella/jebscripts) 57 | * [CalebFenton/simplify: Generic Android Deobfuscator](https://github.com/CalebFenton/simplify) 58 | * [Android 反混淆神器JEB2的使用简介 - 飞少的博客 | Jack's Blog](http://jackzhang.info/2018/08/28/Android-反混淆神器JEB2的使用简介/) 59 | * [【技术分享】Android程序反混淆利器——Simplify工具 - 安全客,安全资讯平台](https://www.anquanke.com/post/id/85388) 60 | * [[原创]JEB2反混淆神器 -『Android安全』-看雪安全论坛](https://bbs.pediy.com/thread-227046.htm) 61 | * [Android | 使用Java Deobfuscator对JEB Decompiler反混淆_ - AppScan.IO | Janus移动安全中心](https://open.appscan.io/article-908.html) 62 | * [Deobfuscating Android Triada malware – JEB Decompiler in Action](https://www.pnfsoftware.com/blog/deobfuscating-android-triada-malware/) 63 | * [ANDROID 逆向实例(八)- 乐固加固脱壳(2017.01) ~ and-rev](https://and-rev.blogspot.com/2017/05/android-201701.html) 64 | * [乐固加固脱壳实战 - faTe's Home](http://www.holdheart.com/archives/33.html) 65 | * [Android APK脱壳--腾讯乐固、360加固一键脱壳 - 知乎](https://zhuanlan.zhihu.com/p/45591754) 66 | * [Android APK脱壳--腾讯乐固、360加固一键脱壳 | 辉天神龙](https://xucanhui.com/2018/09/27/android-apk-shelling/) 67 | * [安卓逆向调试:XPosed框架](https://book.crifan.org/books/android_re_xposed_framework/website/) 68 | * [好用的安卓模拟器:夜神Nox](https://book.crifan.org/books/good_android_emulator_nox/website/) 69 | * [Android逆向入门流程 - 简书](https://www.jianshu.com/p/71fb7ccc05ff) 70 | * [swdunlop/AndBug: Android Debugging Library](https://github.com/swdunlop/AndBug) 71 | * [Android安全专项-AndBug动态调试工具 - doctorq - CSDN博客](https://blog.csdn.net/itfootball/article/details/50827470) 72 | * [androguard/androguard: Reverse engineering, Malware and goodware analysis of Android applications](https://github.com/androguard/androguard) 73 | * [Welcome to Androguard’s documentation! — Androguard 3.4.0 documentation](https://androguard.readthedocs.io/en/latest/) 74 | * [Android逆向之旅—Native层的Hook神器Cydia Substrate使用详解 | 尼古拉斯.赵四](http://www.520monkey.com/archives/1028) 75 | * [AndroidSecNotes/Android Hook 框架(Cydia篇).md at master · JnuSimba/AndroidSecNotes](https://github.com/JnuSimba/AndroidSecNotes/blob/master/Android%20调试工具/Android%20Hook%20框架(Cydia篇).md) 76 | * [看雪 - 安卓黑科技之HOOK详解](https://zhuanlan.kanxue.com/article-431.htm) 77 | * [Android逆向工程工具Dare的使用方法(Mac OS X中) - qysh123的专栏 - CSDN博客](https://blog.csdn.net/qysh123/article/details/37745505) 78 | * [Dare Homepage](http://siis.cse.psu.edu/dare/index.html) 79 | * [Dare downloads](http://siis.cse.psu.edu/dare/downloads.html) 80 | * [Google反编译新工具——Enjarify - liuweiballack的专栏 - CSDN博客](https://blog.csdn.net/liuweiballack/article/details/48321613) 81 | * [android:tools:enjarify WooYun WiKi](http://wiki.secbug.net/android_tools_enjarify.html) 82 | * [Android 逆向工具 dex2jar, enjarify 和 AXMLPrinter2 // Neurohazard](http://blkstone.github.io/2017/02/14/dex2jar-enjarify/) 83 | * [Dedexer user's manual](http://dedexer.sourceforge.net) 84 | * [dedexer - Browse Files at SourceForge.net](https://sourceforge.net/project/showfiles.php?group_id=250112) 85 | * [Dedexer:Dex文件反编译工具介绍 - amos_tl - ITeye博客](https://w26.iteye.com/blog/501553) 86 | * [2015移动安全挑战赛(阿里&看雪主办)全程回顾(3) - Group of Software Security In Progress](https://loccs.sjtu.edu.cn/gossip/blog/2015/03/06/mobisec-challenge-part-3/) 87 | * [关于Indroid的编译 · Issue #1 · romangol/InDroid](https://github.com/romangol/InDroid/issues/1) 88 | * [iSECPartners/Introspy-Android: Security profiling for blackbox Android](https://github.com/iSECPartners/Introspy-Android) 89 | * [Introspy-Android](http://isecpartners.github.io/Introspy-Android/) 90 | * [目前最全面的Android安全工具清单 - IT经理网](https://www.ctocio.com/top清单/23912.html) 91 | * [翻译Android 应用逆向工具总结-『外文翻译』-看雪安全论坛](https://bbs.pediy.com/thread-249501.htm) 92 | * [Infografía sobre el funcionamiento interno del robot de Android | SmallVille](https://nguajardo.wordpress.com/2011/04/27/infografa-sobre-el-funcionamiento-interno-del-robot-de-android/) 93 | * [intellij-community/plugins/java-decompiler/engine at master · JetBrains/intellij-community](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine) 94 | * [fesh0r/fernflower: Unofficial mirror of FernFlower Java decompiler (All pulls should be submitted upstream)](https://github.com/fesh0r/fernflower) 95 | * [《Smali Viewer 用户指南》 | AVL Team](http://blog.avlsec.com/show/%E3%80%8Asv%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97%E3%80%8B/) 96 | * [AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载](https://www.androiddevtools.cn) 97 | * [SmaliViewer.Zip](http://blog.avlyun.com/wp-content/uploads/2014/04/SmaliViewer.zip) 98 | * [Application Hardening - Mobile App Hardening | Promon](https://promon.co/security-news/application-hardening/) 99 | * [Cydia Substrate使用手册 - 简书](https://www.jianshu.com/p/ba795ff3471a) 100 | * [看雪安全论坛 18年专注——顶级软件逆向论坛](https://bbs.pediy.com) 101 | * [一张图看懂Android编译流程 - 简书](https://www.jianshu.com/p/04eabba51db0) 102 | * [原创 如何使用Xposed+JustTrustMe来突破SSL Pinning-『WEB安全』-看雪安全论坛](https://bbs.pediy.com/thread-226435.htm) 103 | * [当你写爬虫抓不到APP请求包的时候该怎么办?【中级篇】 - 知乎](https://zhuanlan.zhihu.com/p/56397466) 104 | * [tls - What is certificate pinning? - Information Security Stack Exchange](https://security.stackexchange.com/questions/29988/what-is-certificate-pinning) 105 | * [permissiongen权限管理混淆处理_dobiman的博客-CSDN博客](https://blog.csdn.net/dobiman/article/details/78595709) 106 | * [第三方免费加固横向对比 – Android – 掘金](https://juejin.im/entry/58904a22570c3500621abe9e) 107 | * [Android DEX-VMP 虚拟保护技术 | GeneBlue's Blog](https://geneblue.github.io/2019/09/13/Android%20DEX-VMP%20虚拟保护技术/) 108 | * [Android最新的VMP加固技术一般是怎么实现的? - 知乎](https://www.zhihu.com/question/51585199) 109 | * [Android Vmp加固实现流程图_zhangmiaoping23的专栏-CSDN博客_android vmp](https://blog.csdn.net/zhangmiaoping23/article/details/101059359) 110 | * [[原创]某Android DEX vmp加固逆向分析-Android安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com](https://bbs.pediy.com/thread-221270.htm) 111 | * [Study of android malicious in dynamic unpacking](https://www.slideshare.net/xtutlab/study-of-android-malicious-in-dynamic-unpacking-137998296) 112 | * [Android SO Virtualization Protection | KIWISEC](https://en.kiwisec.com/product/vm-android.html) 113 | * [eaglx/VMPROTECT: Obfuscation method using virtual machine.](https://github.com/eaglx/VMPROTECT) 114 | * [Home · obfuscator-llvm/obfuscator Wiki](https://github.com/obfuscator-llvm/obfuscator/wiki) 115 | * [Obfuscator-llvm源码分析 - 知乎](https://zhuanlan.zhihu.com/p/39479793) 116 | * [[原创]ollvm的混淆反混淆和定制修改-Android安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com](https://bbs.pediy.com/thread-217727.htm) 117 | * [技术前沿|虚拟机保护技术(VMP)的实践与体会-支付产业网](http://paynews.net/article-32805-1.html) 118 | * [【更新】讨论android加固防内存dump的技术及vmp壳的防护强度 - 看雪安全论坛](http://m.pediy.com/showthread.php?t=206293&highlight=vmp) 119 | * [[原创]dex vmp虚拟化-『Android安全』-看雪安全论坛](https://bbs.pediy.com/thread-248712.htm) 120 | * [第五代加固技术 ARM代码虚拟化保护技术](https://github.com/knownsec/KCon/blob/master/2017/%5BKCon%202017%5D0827_3_%E9%99%88%E6%84%89%E9%91%AB_%E7%AC%AC%E4%BA%94%E4%BB%A3%E5%8A%A0%E5%9B%BA%E6%8A%80%E6%9C%AFARM%20VMP%E5%8E%9F%E7%90%86%E5%AE%9E%E7%8E%B0%E4%B8%8E%E5%BA%94%E7%94%A8.pdf) 121 | * [DexHunter的原理分析和使用说明(一)_Fly20141201. 的专栏-CSDN博客_dexhunter](https://blog.csdn.net/qq1084283172/article/details/53710357) 122 | * [[原创]Android dex文件通用自动脱壳器-Android安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com](https://bbs.pediy.com/thread-203776.htm) 123 | * [从Android运行时出发,打造我们的脱壳神器-Harries Blog™](http://www.liuhaihua.cn/archives/153836.html) 124 | * [[原创]FART:ART环境下基于主动调用的自动化脱壳方案-Android安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com](https://bbs.pediy.com/thread-252630.htm) 125 | * [[原创]记录一次非常简单的so层小逆向,适合小白入门-『Android安全』-看雪安全论坛](https://bbs.pediy.com/thread-261203.htm) 126 | * [Smali 语法解析——Hello World - 掘金](https://juejin.im/post/5c093fd751882535422e4f05) 127 | * [JesusFreke/smali: smali/baksmali](https://github.com/JesusFreke/smali) 128 | * [Smali语法介绍_Java_singwhatiwanna-CSDN博客](https://blog.csdn.net/singwhatiwanna/article/details/19019547) 129 | * [Android逆向基础:Smali语法 - 简书](https://www.jianshu.com/p/9931a1e77066) 130 | * [dalvik - What is Smali Code Android - Stack Overflow](https://stackoverflow.com/questions/30837450/what-is-smali-code-android) 131 | * [Smali: Assembler for Android's VM | Medium](https://mobsecguys.medium.com/smali-assembler-for-dalvik-e37c8eed22f9) 132 | * [[Android][Security] Android 逆向之 smali | wOw的博客 (wossoneri.github.io)](http://wossoneri.github.io/2019/09/12/%5BAndroid%5D%5BSecurity%5DDecompile-smali/) 133 | * [Android Runtime (ART) 和 Dalvik  |  Android 开源项目](https://source.android.com/devices/tech/dalvik) 134 | * [Dalvik 可执行文件格式  |  Android 开源项目  |  Android Open Source Project](https://source.android.com/devices/tech/dalvik/dex-format) 135 | * [通付盾: 产品体系_应用加固(Andorid/iOS/H5/SDK)](https://www.tongfudun.com/product/nprotect) 136 | * [移动应用安全加固_移动应用APP加固_应用安全_安全市场_华为云市场-华为云](https://marketplace.huaweicloud.com/product/00301-66172-0--0) 137 | * [爱加密:深入上海互联网移动应用分析,协助构建移动安全互联-爱加密移动应用安全保护平台|app防反编译|app加壳|app防破解](https://safe.ijiami.cn/newsInfo?id=883&v=0) 138 | * [安卓dex加花保护_网易易盾](https://dun.163.com/search/5a6J5Y2TZGV45Yqg6Iqx5L-d5oqk) 139 | * [android dex加花保护_网易易盾](https://dun.163.com/search/YW5kcm9pZCBkZXjliqDoirHkv53miqQ) 140 | * [Android 代码混淆并加花 - 第四维空间testing - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园](http://www.51testing.com/html/55/67755-3720982.html) 141 | * [android打包上架之预防反编译(花指令)_移动开发_qinzhuoheng的专栏-CSDN博客](https://blog.csdn.net/qinzhuoheng/article/details/47002837) 142 | * [【技术分享】Android代码混淆技术总结(一) - 安全客,安全资讯平台](https://www.anquanke.com/post/id/85843) 143 | * [花指令 - CTF Wiki](http://dyf.ink/reverse/windows/anti-debug/junk-code/) 144 | * [纯手工混淆C/C++代码(上) - 知乎](https://zhuanlan.zhihu.com/p/38683804) 145 | * [Unicorn实战(一):去掉libcms.so的花指令 – LeadroyaL's website](https://www.leadroyal.cn/?p=957) 146 | * [【技术分享】 Android SO 高阶黑盒利用 - 安全客,安全资讯平台](https://www.anquanke.com/post/id/87119) 147 | * [FDex2 core code MainHook - Programmer Sought](https://www.programmersought.com/article/30852267489/) 148 | * [Shelling Android APK - Le Tencent solid, a reinforcement key 360 husking(Others-Community) (titanwolf.org)](https://titanwolf.org/Network/Articles/Article?AID=1726d4f3-2ba2-4141-b3ee-5ef15aacb504#gsc.tab=0) 149 | * [关于Dalvik、ART、DEX、ODEX、JIT、AOT、OAT_玛斯特・布兰迪的博客-CSDN博客](https://blog.csdn.net/Strange_Monkey/article/details/85019528) 150 | * [Android .dex、.odex、Dalvik、ART、AOT、OAT_android dex odex art_龙腾腾的博客-CSDN博客](https://blog.csdn.net/u013750244/article/details/122578710) 151 | * [安卓黑科技之HOOK详解](https://zhuanlan.kanxue.com/article-431.htm) 152 | * 153 | -------------------------------------------------------------------------------- /src/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/favicon.ico -------------------------------------------------------------------------------- /src/assets/img/android_common_harden_tech_compare.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/android_common_harden_tech_compare.jpg -------------------------------------------------------------------------------- /src/assets/img/android_compile_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/android_compile_flow.png -------------------------------------------------------------------------------- /src/assets/img/apk_build_process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/apk_build_process.png -------------------------------------------------------------------------------- /src/assets/img/apk_compile_package_process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/apk_compile_package_process.png -------------------------------------------------------------------------------- /src/assets/img/junkcode_deassembly_wrong_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/junkcode_deassembly_wrong_code.png -------------------------------------------------------------------------------- /src/assets/img/junkcode_decompile_fail_fill_payload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/junkcode_decompile_fail_fill_payload.png -------------------------------------------------------------------------------- /src/assets/img/junkcode_origin_assembly_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/junkcode_origin_assembly_code.png -------------------------------------------------------------------------------- /src/assets/img/junkcode_switch_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/junkcode_switch_flow.png -------------------------------------------------------------------------------- /src/assets/img/jvm_vs_dvm_compile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/jvm_vs_dvm_compile.png -------------------------------------------------------------------------------- /src/assets/img/jvm_vs_dvm_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/jvm_vs_dvm_flow.png -------------------------------------------------------------------------------- /src/assets/img/llvm_core_arch_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/llvm_core_arch_flow.png -------------------------------------------------------------------------------- /src/assets/img/re_common_deassembly_algorithm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/re_common_deassembly_algorithm.png -------------------------------------------------------------------------------- /src/assets/img/smaliviewer_demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/smaliviewer_demo.png -------------------------------------------------------------------------------- /src/assets/img/vmp_code_procedure.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/vmp_code_procedure.jpg -------------------------------------------------------------------------------- /src/assets/img/vmp_design_compiler_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/vmp_design_compiler_flow.png -------------------------------------------------------------------------------- /src/assets/img/vmp_encrypt_theory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/vmp_encrypt_theory.png -------------------------------------------------------------------------------- /src/assets/img/vmp_parse_flow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/vmp_parse_flow.jpg -------------------------------------------------------------------------------- /src/assets/img/vmp_protect_flow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/android_app_security_crack/c51e23ab5f678bf0d7465eb769c4bbad77b5312c/src/assets/img/vmp_protect_flow.jpg -------------------------------------------------------------------------------- /src/intro/README.md: -------------------------------------------------------------------------------- 1 | # 概述 2 | 3 | > [!Warning|title:不准把技术用于非法用途] 4 | > 警告⚠️:相关的安卓逆向破解技术仅限于技术研究使用,**不准**用于**非法目的**,否则后果自负。 5 | 6 | 先后接触过一些安卓app的逆向破解,现去整理出相关安卓app的安全和逆向相关知识。 7 | 8 | 关于安卓,大体可以分为**正向的安全**和**逆向的破解**这两大分支: 9 | 10 | * 安卓 11 | * **正向**=**安全** 12 | * 防静态分析 13 | * 防砸壳:加壳=加固 14 | * 加固手段的发展历史 15 | * 防反编译 16 | * 代码混淆 17 | * `Proguard` 18 | * `Ollvm` 19 | * 防动态调试 20 | * 防调试和运行 21 | * 反调试 22 | * Root检测 23 | * 检测`Xposed`、`Frida`等 24 | * 防抓包=反抓包 25 | * `ssl pinning`=`证书绑定` 26 | * **逆向**=**破解** 27 | * 静态分析 28 | * 按文件格式类型分 29 | * 针对`apk` 30 | * 查看apk信息 31 | * `aapt` 32 | * 解包工具:输出`dex`、`so`、`smali` 33 | * `apktool` 34 | * 反编译工具 35 | * 直接apk转java 36 | * `jadx` 37 | * `JEB` 38 | * `GDA` 39 | * 针对`dex` 40 | * 各种导出dex的工具=砸壳工具=脱壳工具 41 | * `FDex2` 42 | * `DumpDex` 43 | * `DexExtractor` 44 | * 各种反编译dex的工具 45 | * dex转jar 46 | * `dex2jar` 47 | * dex转smali 48 | * `baksmali` 49 | * dex直接转java 50 | * `jadx` 51 | * `GDA` 52 | * 针对`jar` 53 | * jar转java=各种反编译工具 54 | * `Procyon` 55 | * `CFR` 56 | * `JD-GUI` 57 | * 针对`so`库文件=(往往是ARM64架构)的ELF文件 58 | * 导出静态资源 59 | * `readelf` 60 | * `objdump` 61 | * `razbin2` 62 | * 反编译代码逻辑 63 | * `IDA` 64 | * `Hopper` 65 | * `Radare2` 66 | * `Ghidra` 67 | * 涉及子领域 68 | * 反代码混淆 69 | * 动态调试 70 | * (绕过限制去)抓包 71 | * 绕过证书绑定的Exposed插件或Frida的脚本 72 | * 反root检测 73 | * 反反调试 74 | * 各种动态调试手段 75 | * 调试smali:`AS+smalidea插件` 76 | * app进程可调试 77 | * Magisk插件:`MagiskHide Props Config` 78 | * 调试Frida:`Frida` 79 | * Frida环境搭建 80 | * Magisk插件:`MagiskFrida` 81 | * 调试lldb:`LLDB` 82 | * 调试Xposed插件 83 | * `XPosed` 84 | * `EdXposed` 85 | * `LSPosed` 86 | * 模拟代码执行 87 | * `Unidbg` 88 | * `Unicorn` 89 | * 辅助调试工具 90 | * `adb` 91 | * `DDMS` 92 | * 输出 93 | * 重新打包apk 94 | * `apktool` 95 | * `keytool` 96 | * `jarsigner`或`apksigner` 97 | * `zipalign` 98 | * 用代码重写逻辑 99 | * Python代码 100 | * C/C++代码 101 | * 改机定制ROM 102 | * `AOSP源码`编译 103 | * `JNI`开发 104 | * `NDK`开发 105 | -------------------------------------------------------------------------------- /src/sub_tutorial/README.md: -------------------------------------------------------------------------------- 1 | # 系列子教程 2 | 3 | 此处列出已完成的**Android安全和逆向**相关系列的`子教程`: 4 | 5 | * 子教程 6 | * 安卓 7 | * 正向 8 | * [Android开发总结](https://book.crifan.org/books/android_dev_summary/website/) 9 | * 逆向 10 | * [Android逆向开发](https://book.crifan.org/books/android_reverse_dev/website/) 11 | * [Android逆向:开启root](https://book.crifan.org/books/android_re_enable_root/website/) 12 | * [Android逆向:静态分析](https://book.crifan.org/books/android_re_static_analysis/website/) 13 | * [安卓反编译利器:jadx](https://book.crifan.org/books/android_re_decompile_jadx/website/) 14 | * [Android逆向:动态调试](https://book.crifan.org/books/android_re_dynamic_debug/website/) 15 | * [Android逆向:重新打包apk](https://book.crifan.org/books/android_re_repack_apk/website/) 16 | * 相关 17 | * 安卓模拟器 18 | * [好用的安卓模拟器:夜神Nox](https://book.crifan.org/books/good_android_emulator_nox/website/) 19 | * 框架 20 | * [安卓逆向调试:XPosed框架](https://book.crifan.org/books/android_re_xposed_framework/website/) 21 | * 通用 22 | * 编程语言 23 | * C 24 | * [C语言开发心得](https://book.crifan.org/books/c_lang_dev_summary/website/) 25 | * ARM 26 | * [最流行汇编语言:ARM](https://book.crifan.org/books/popular_assembly_arm/website/) 27 | * 抓包工具 28 | * [app抓包利器:Charles](https://book.crifan.org/books/app_capture_package_tool_charles/website) 29 | * 静态分析(+动态调试) 30 | * [逆向利器:IDA](https://book.crifan.org/books/reverse_tool_ida/website/) 31 | * 动态调试 32 | * [主流调试器:LLDB](https://book.crifan.org/books/popular_debugger_lldb/website/) 33 | * [逆向调试利器:Frida](https://book.crifan.org/books/reverse_debug_frida/website/) 34 | * [CPU模拟利器:Unicorn](https://book.crifan.org/books/cpu_emulator_unicorn/website/) 35 | --------------------------------------------------------------------------------