├── .gitignore ├── Makefile ├── README.md ├── README_current.json ├── book.json ├── book_current.json ├── node_modules └── src ├── README.md ├── SUMMARY.md ├── appendix ├── README.md └── reference.md ├── assets ├── favicon.ico └── img │ ├── anti_debug_aweme_svc_0x80.jpg │ ├── device_fingerprint_all_aspect.jpg │ ├── device_fingerprint_gen_process.jpg │ ├── device_fingerprint_overview.jpg │ ├── device_risk.png │ ├── ida_code_many_explict_call.jpg │ ├── ida_code_no_explict_call.jpg │ ├── ios_hopper_func_sub.jpg │ └── ios_security_belong_field.jpg ├── ios_security_overview └── README.md └── ios_security_protect ├── README.md ├── anti_crawler ├── README.md └── ssl_pinning.md ├── anti_debug.md ├── code_confuse ├── README.md ├── ios_class_guard.md └── obfuscator_llvm.md ├── code_dynamic_exec.md ├── data_encrypt.md ├── device_fingerprint.md ├── ios_sys_security.md ├── jailbreak_detect.md └── prevent_export_header.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 | # iOS安全与防护 2 | 3 | * 最新版本:`v1.1.0` 4 | * 更新时间:`20250530` 5 | 6 | ## 简介 7 | 8 | 介绍iOS安全与防护。包括iOS安全的概览,在安全领域所属的范畴;以及iOS的安全的具体防护手段,包括但不限于iOS系统本身的安全设计、代码混淆、反调试、防止逆向导出头文件、越狱检测、反爬、数据存储加密、代码动态执行、设备指纹等,反爬中涉及到SSL证书绑定。 9 | 10 | ## 源码+浏览+下载 11 | 12 | 本书的各种源码、在线浏览地址、多种格式文件下载如下: 13 | 14 | ### HonKit源码 15 | 16 | * [crifan/ios_security_protect: iOS安全与防护](https://github.com/crifan/ios_security_protect) 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 | * [iOS安全与防护 book.crifan.org](https://book.crifan.org/books/ios_security_protect/website/) 25 | * [iOS安全与防护 crifan.github.io](https://crifan.github.io/ios_security_protect/website/) 26 | 27 | ### 离线下载阅读 28 | 29 | * [iOS安全与防护 PDF](https://book.crifan.org/books/ios_security_protect/pdf/ios_security_protect.pdf) 30 | * [iOS安全与防护 ePub](https://book.crifan.org/books/ios_security_protect/epub/ios_security_protect.epub) 31 | * [iOS安全与防护 Mobi](https://book.crifan.org/books/ios_security_protect/mobi/ios_security_protect.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": "v1.1.0", 3 | "lastUpdate": "20250530", 4 | "gitRepoName": "ios_security_protect", 5 | "bookName": "iOS安全与防护", 6 | "bookDescription": "介绍iOS安全与防护。包括iOS安全的概览,在安全领域所属的范畴;以及iOS的安全的具体防护手段,包括但不限于iOS系统本身的安全设计、代码混淆、反调试、防止逆向导出头文件、越狱检测、反爬、数据存储加密、代码动态执行、设备指纹等,反爬中涉及到SSL证书绑定。" 7 | } -------------------------------------------------------------------------------- /book.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "iOS安全与防护", 3 | "description": "介绍iOS安全与防护。包括iOS安全的概览,在安全领域所属的范畴;以及iOS的安全的具体防护手段,包括但不限于iOS系统本身的安全设计、代码混淆、反调试、防止逆向导出头文件、越狱检测、反爬、数据存储加密、代码动态执行、设备指纹等,反爬中涉及到SSL证书绑定。", 4 | "pluginsConfig": { 5 | "autocover": { 6 | "title": "iOS安全与防护" 7 | }, 8 | "github-buttons": { 9 | "buttons": [ 10 | { 11 | "repo": "ios_security_protect", 12 | "user": "crifan", 13 | "type": "star", 14 | "count": true, 15 | "size": "small" 16 | }, 17 | { 18 | "user": "crifan", 19 | "type": "follow", 20 | "width": "120", 21 | "count": false, 22 | "size": "small" 23 | } 24 | ] 25 | }, 26 | "sitemap-general": { 27 | "prefix": "https://book.crifan.org/books/ios_security_protect/website/" 28 | }, 29 | "toolbar-button": { 30 | "url": "https://book.crifan.org/books/ios_security_protect/pdf/ios_security_protect.pdf", 31 | "icon": "fa-file-pdf-o", 32 | "label": "下载PDF" 33 | }, 34 | "theme-default": { 35 | "showLevel": true 36 | }, 37 | "disqus": { 38 | "shortName": "crifan" 39 | }, 40 | "prism": { 41 | "css": [ 42 | "prism-themes/themes/prism-atom-dark.css" 43 | ] 44 | }, 45 | "sharing": { 46 | "douban": false, 47 | "facebook": true, 48 | "google": false, 49 | "hatenaBookmark": false, 50 | "instapaper": false, 51 | "line": false, 52 | "linkedin": false, 53 | "messenger": false, 54 | "pocket": false, 55 | "qq": true, 56 | "qzone": false, 57 | "stumbleupon": false, 58 | "twitter": true, 59 | "viber": false, 60 | "vk": false, 61 | "weibo": true, 62 | "whatsapp": false, 63 | "all": [ 64 | "douban", 65 | "facebook", 66 | "google", 67 | "instapaper", 68 | "line", 69 | "linkedin", 70 | "messenger", 71 | "pocket", 72 | "qq", 73 | "qzone", 74 | "stumbleupon", 75 | "twitter", 76 | "viber", 77 | "vk", 78 | "weibo", 79 | "whatsapp" 80 | ] 81 | }, 82 | "tbfed-pagefooter": { 83 | "copyright": "crifan.org,使用署名4.0国际(CC BY 4.0)协议发布", 84 | "modify_label": "最后更新:", 85 | "modify_format": "YYYY-MM-DD HH:mm:ss" 86 | }, 87 | "donate": { 88 | "wechat": "https://www.crifan.org/files/res/crifan_com/crifan_wechat_pay.jpg", 89 | "alipay": "https://www.crifan.org/files/res/crifan_com/crifan_alipay_pay.jpg", 90 | "title": "", 91 | "button": "打赏", 92 | "alipayText": "支付宝打赏给Crifan", 93 | "wechatText": "微信打赏给Crifan" 94 | } 95 | }, 96 | "author": "Crifan Li ", 97 | "language": "zh-hans", 98 | "root": "./src", 99 | "links": { 100 | "sidebar": { 101 | "主页": "http://www.crifan.org" 102 | } 103 | }, 104 | "plugins": [ 105 | "theme-comscore", 106 | "anchors", 107 | "expandable-menu", 108 | "-lunr", 109 | "-search", 110 | "search-plus", 111 | "disqus", 112 | "-highlight", 113 | "prism", 114 | "prism-themes", 115 | "github-buttons", 116 | "-splitter", 117 | "splitter-nosessionbutcookie", 118 | "-sharing", 119 | "sharing-plus", 120 | "tbfed-pagefooter", 121 | "donate", 122 | "sitemap-general", 123 | "copy-code-button", 124 | "blockquote-callout", 125 | "toolbar-button" 126 | ] 127 | } -------------------------------------------------------------------------------- /book_current.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "iOS安全与防护", 3 | "description": "介绍iOS安全与防护。包括iOS安全的概览,在安全领域所属的范畴;以及iOS的安全的具体防护手段,包括但不限于iOS系统本身的安全设计、代码混淆、反调试、防止逆向导出头文件、越狱检测、反爬、数据存储加密、代码动态执行、设备指纹等,反爬中涉及到SSL证书绑定。", 4 | "pluginsConfig": { 5 | "autocover": { 6 | "title": "iOS安全与防护" 7 | }, 8 | "github-buttons": { 9 | "buttons": [ 10 | { 11 | "repo": "ios_security_protect" 12 | } 13 | ] 14 | }, 15 | "sitemap-general": { 16 | "prefix": "https://book.crifan.org/books/ios_security_protect/website/" 17 | }, 18 | "toolbar-button": { 19 | "url": "https://book.crifan.org/books/ios_security_protect/pdf/ios_security_protect.pdf" 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /node_modules: -------------------------------------------------------------------------------- 1 | ../../generated/honkit/node_modules -------------------------------------------------------------------------------- /src/README.md: -------------------------------------------------------------------------------- 1 | # iOS安全与防护 2 | 3 | * 最新版本:`v1.1.0` 4 | * 更新时间:`20250530` 5 | 6 | ## 简介 7 | 8 | 介绍iOS安全与防护。包括iOS安全的概览,在安全领域所属的范畴;以及iOS的安全的具体防护手段,包括但不限于iOS系统本身的安全设计、代码混淆、反调试、防止逆向导出头文件、越狱检测、反爬、数据存储加密、代码动态执行、设备指纹等,反爬中涉及到SSL证书绑定。 9 | 10 | ## 源码+浏览+下载 11 | 12 | 本书的各种源码、在线浏览地址、多种格式文件下载如下: 13 | 14 | ### HonKit源码 15 | 16 | * [crifan/ios_security_protect: iOS安全与防护](https://github.com/crifan/ios_security_protect) 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 | * [iOS安全与防护 book.crifan.org](https://book.crifan.org/books/ios_security_protect/website/) 25 | * [iOS安全与防护 crifan.github.io](https://crifan.github.io/ios_security_protect/website/) 26 | 27 | ### 离线下载阅读 28 | 29 | * [iOS安全与防护 PDF](https://book.crifan.org/books/ios_security_protect/pdf/ios_security_protect.pdf) 30 | * [iOS安全与防护 ePub](https://book.crifan.org/books/ios_security_protect/epub/ios_security_protect.epub) 31 | * [iOS安全与防护 Mobi](https://book.crifan.org/books/ios_security_protect/mobi/ios_security_protect.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 | # iOS安全与防护 2 | 3 | * [前言](README.md) 4 | * [iOS安全概览](ios_security_overview/README.md) 5 | * [iOS安全防护](ios_security_protect/README.md) 6 | * [iOS系统的安全设计](ios_security_protect/ios_sys_security.md) 7 | * [代码混淆](ios_security_protect/code_confuse/README.md) 8 | * [Obfuscator-LLVM](ios_security_protect/code_confuse/obfuscator_llvm.md) 9 | * [ios-class-guard](ios_security_protect/code_confuse/ios_class_guard.md) 10 | * [反调试](ios_security_protect/anti_debug.md) 11 | * [防止导出头文件](ios_security_protect/prevent_export_header.md) 12 | * [越狱检测](ios_security_protect/jailbreak_detect.md) 13 | * [反爬](ios_security_protect/anti_crawler/README.md) 14 | * [SSL证书绑定](ios_security_protect/anti_crawler/ssl_pinning.md) 15 | * [数据存储加密](ios_security_protect/data_encrypt.md) 16 | * [代码动态运行](ios_security_protect/code_dynamic_exec.md) 17 | * [设备指纹](ios_security_protect/device_fingerprint.md) 18 | * [附录](appendix/README.md) 19 | * [参考资料](appendix/reference.md) 20 | -------------------------------------------------------------------------------- /src/appendix/README.md: -------------------------------------------------------------------------------- 1 | # 附录 2 | 3 | 下面列出相关参考资料。 4 | -------------------------------------------------------------------------------- /src/appendix/reference.md: -------------------------------------------------------------------------------- 1 | # 参考资料 2 | 3 | * 【已解决】恢复iPhone7中抖音的https包的Charles抓包环境 4 | * 5 | * [Class-dump导出头文件没有属性和方法名怎么处理 - 技能讨论 - 睿论坛](https://iosre.com/t/class-dump/19355/7) 6 | * [iOS逆向攻防实战 - 掘金 (juejin.cn)](https://juejin.cn/post/7073109091320610829) 7 | * [[原创]某App去混淆-iOS安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com](https://bbs.pediy.com/thread-272839.htm) 8 | * [iOS代码混淆工具 — Hikari(支持Xcode14以下全部版本混淆)-Apibug](https://www.apibug.com/tools/1581.html) 9 | * [基于llvm的iOS代码混淆工具 -- Hikari - 简书](https://www.jianshu.com/p/982ac9e211f4) 10 | * [ios手动代码混淆函数和变量名基本原理和注意事项教程(含demo)_小手琴师的博客-CSDN博客_xcode代码混淆](https://blog.csdn.net/boildoctor/article/details/124063406) 11 | * [iOS混淆--OLLVM在iOS中的实践(逻辑混淆) - 简书](https://www.jianshu.com/p/11aa554d5e19) 12 | * [SQLCipher之攻与防 - 腾讯云开发者社区-腾讯云](https://cloud.tencent.com/developer/article/1040171) 13 | * [使用 sqlcipher 加密解密 sqlite3 数据库 - 维唯为为](https://luowei.github.io/%E6%95%B0%E6%8D%AE%E5%BA%93/sqlite-encrypt-with-sqlcipher.html) 14 | * [独家食用指南系列|Android端SQLCipher的攻与防新编 - 掘金](https://juejin.cn/post/6887824168285536263) 15 | * [数据库开源框架之sqlcipher加密数据库_51CTO博客_开源数据库](https://blog.51cto.com/u_5018054/3398276) 16 | * [浅谈设备指纹技术和应用 - 网安 (wangan.com)](https://www.wangan.com/p/7fy7fx540bcd585e) 17 | * [以攻击者角度学习顶像风控设备指纹产品 - 我是小三 - 博客园 (cnblogs.com)](https://www.cnblogs.com/2014asm/p/13548445.html) 18 | * [设备指纹 - 顶象文档中心 (dingxiang-inc.com)](https://www.dingxiang-inc.com/docs/detail/const-id) 19 | * [Apple隐私政策趋严,设备指纹路在何方?_网易易盾 (163.com)](https://dun.163.com/news/p/fcb1feeac70f488ab41dfa2d713d05c8) 20 | * [iOS设备指纹的前世今生 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/316034012) 21 | * [29 | 设备指纹:面对各种虚拟设备,如何进行对抗?_wx60cc441e1698a的技术博客_51CTO博客](https://blog.51cto.com/u_15275035/2922750) 22 | * -------------------------------------------------------------------------------- /src/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/ios_security_protect/2358540fa21b2c7dade51b5f1e6ee47b66357569/src/assets/favicon.ico -------------------------------------------------------------------------------- /src/assets/img/anti_debug_aweme_svc_0x80.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/ios_security_protect/2358540fa21b2c7dade51b5f1e6ee47b66357569/src/assets/img/anti_debug_aweme_svc_0x80.jpg -------------------------------------------------------------------------------- /src/assets/img/device_fingerprint_all_aspect.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/ios_security_protect/2358540fa21b2c7dade51b5f1e6ee47b66357569/src/assets/img/device_fingerprint_all_aspect.jpg -------------------------------------------------------------------------------- /src/assets/img/device_fingerprint_gen_process.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/ios_security_protect/2358540fa21b2c7dade51b5f1e6ee47b66357569/src/assets/img/device_fingerprint_gen_process.jpg -------------------------------------------------------------------------------- /src/assets/img/device_fingerprint_overview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/ios_security_protect/2358540fa21b2c7dade51b5f1e6ee47b66357569/src/assets/img/device_fingerprint_overview.jpg -------------------------------------------------------------------------------- /src/assets/img/device_risk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/ios_security_protect/2358540fa21b2c7dade51b5f1e6ee47b66357569/src/assets/img/device_risk.png -------------------------------------------------------------------------------- /src/assets/img/ida_code_many_explict_call.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/ios_security_protect/2358540fa21b2c7dade51b5f1e6ee47b66357569/src/assets/img/ida_code_many_explict_call.jpg -------------------------------------------------------------------------------- /src/assets/img/ida_code_no_explict_call.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/ios_security_protect/2358540fa21b2c7dade51b5f1e6ee47b66357569/src/assets/img/ida_code_no_explict_call.jpg -------------------------------------------------------------------------------- /src/assets/img/ios_hopper_func_sub.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/ios_security_protect/2358540fa21b2c7dade51b5f1e6ee47b66357569/src/assets/img/ios_hopper_func_sub.jpg -------------------------------------------------------------------------------- /src/assets/img/ios_security_belong_field.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crifan/ios_security_protect/2358540fa21b2c7dade51b5f1e6ee47b66357569/src/assets/img/ios_security_belong_field.jpg -------------------------------------------------------------------------------- /src/ios_security_overview/README.md: -------------------------------------------------------------------------------- 1 | # iOS安全概览 2 | 3 | * iOS安全 4 | * 所属范畴 5 | * 从大的信息安全范畴,属于:`信息安全` 中 `设备端` 中 `移动端` 中 `iOS安全` 6 | * ![ios_security_belong_field](../assets/img/ios_security_belong_field.jpg) 7 | * 详见:[信息安全概览 安全概览](https://book.crifan.org/books/information_security_overview/website/security_overview/) 8 | * iOS开发,从`安全`领域的`攻防`角度分: 9 | * 反方的 `攻`:`iOS逆向`=`iOS破解`=`iOS攻击` 10 | * [iOS逆向开发](https://book.crifan.org/books/ios_reverse_dev/website/) 11 | * 正方的 `防`:`iOS安全`=`iOS防护` 12 | -------------------------------------------------------------------------------- /src/ios_security_protect/README.md: -------------------------------------------------------------------------------- 1 | # iOS安全防护 2 | 3 | iOS的逆向和破解,与之相对的正向的防护,叫:`iOS安全和防护` 4 | 5 | * iOS安全防护的`手段`=防护的角度=具体涉及内容 6 | * iOS系统 7 | * 本身已有的不少安全方面的设计和防护 8 | * 防止逆向后轻易看懂代码逻辑 = 代码角度:`代码混淆` 9 | * 被反编译后,也只能看到 乱码的函数 10 | * 部分防止被破解,被猜测到核心逻辑 11 | * 反调试:用技术手段实现不让app被调试 12 | * 增加了逆向后调试的可能性或难度 13 | * [反调试和反反调试 · iOS逆向开发:动态调试](https://book.crifan.org/books/ios_re_dynamic_debug/website/anti_debug_related.html) 14 | * 防止被导出头文件 15 | * 把`ObjC`换`Swift`,以增加被破解难度? 16 | * 越狱检测:检测设备是否已越狱 17 | * 如果已越狱,则不让运行或功能受限 18 | * [iOS逆向开发:越狱检测和反越狱检测](https://book.crifan.org/books/ios_re_jb_detection/website/) 19 | * 网络传输的数据的防护 20 | * 防抓包:从抓包角度,用技术手段,防止被抓包 21 | * SSL证书的`ssl pinning`=`证书绑定` 22 | * 甚至额外做本地证书校验 23 | * iOS端的数据存储:加密,提高安全 24 | * 隐藏核心代码逻辑 25 | * 把核心逻辑和代码,变成动态下载再运行 26 | * 设备指纹 27 | * 其他 28 | * 异常检测 29 | * 重签名检测 30 | * 动态库注入检测 31 | * 钩子检测 32 | * 扫描工具 33 | * `fortify` 34 | * 侧重于代码的安全漏洞 35 | * `coverity` 36 | * 侧重于代码质量 37 | -------------------------------------------------------------------------------- /src/ios_security_protect/anti_crawler/README.md: -------------------------------------------------------------------------------- 1 | # 反爬 2 | 3 | iOS防护中,还有一部分的手段叫做:`反爬` 4 | 5 | * `反爬` 6 | * 目的: 7 | * 防止别人的爬虫爬取你的app的数据 8 | * 防止别人能用抓包工具抓包你的app,看到明文的数据 9 | * 手段 10 | * https 11 | * `SSL pinning`=`certificate pinning`=`证书绑定` 12 | * `证书校验` 13 | -------------------------------------------------------------------------------- /src/ios_security_protect/anti_crawler/ssl_pinning.md: -------------------------------------------------------------------------------- 1 | # SSL证书绑定 2 | 3 | * 背景 4 | * iOS的app,多数和服务器端通信,也是基于常见`HTTP`/`HTTPS`协议。 5 | * 而iOS逆向中往往会,用抓包工具,比如`Charles`去抓包分析你的网络请求。 6 | * 其中因为抓包可以直接看到明文数据而多数已不用`HTTP`了。 7 | * 而改用加密的`HTTPS`,而抓包`HTTPS`,一般来说无法直接看到明文数据,只能看到加密后的乱码。 8 | * 但是采用了根证书信任等手段,往往也可以抓包到`HTTPS`的明文。 9 | * 而最新的手段一般是:采用`证书绑定`=`SSL pinning`,app内部会对于SSL的证书和本地的证书做绑定和校验,使得抓包工具比如Charles的证书,无法通过验证,从而导致无法抓包到`HTTPS`的明文。 10 | * 而iOS防护的话,不希望被抓包,被看到HTTPS的明文,所以往往也会去采用:`证书绑定`=`SSL pinning` 11 | * 而证书绑定中,更高级和更严格一点的手段是:`本地证书校验`? 12 | 13 | ## 如何绕过证书绑定 14 | 15 | 详见: 16 | 17 | [绕过证书绑定 · 移动端逆向:绕过抓包限制](https://book.crifan.org/books/mobile_re_capture_bypass_limit/website/bypass_pinning/) 18 | -------------------------------------------------------------------------------- /src/ios_security_protect/anti_debug.md: -------------------------------------------------------------------------------- 1 | # 反调试 2 | 3 | TODO: 4 | 5 | * 【整理】iOS反越狱相关:反调试 反反调试 6 | * 【已解决】iOS中正向调用ptrace的PT_DENY_ATTACH防止调试 7 | * 【已解决】iOS中的caddr_t类型的定义 8 | * 【已解决】debugserver启动iOS的app抖音报错:Segmentation fault 11 9 | * 10 | * 【已解决】抖音反反调试:把二进制AwemeCore的svc 0x80指令替换成nop指令 11 | * 【已解决】Mac中用IDA实现抖音二进制AwemeCore的svc 0x80替换成nop指令 12 | 13 | --- 14 | 15 | iOS安全防护技术之一是 16 | 17 | * `反调试` 18 | * 防止你的iOS的app被别人逆向调试 19 | * 加了反调试后的效果 20 | * 现象:别人用调试工具去调试你的iOS的app,会报错退出,从而无法继续调试 21 | * 举例 22 | * `debugserver`会报错:`Segmentation fault 11` 23 | * 反调试实现手段 24 | * ptrace的PT_DENY_ATTACH 25 | * ptrace() = ptrace + PT_DENY_ATTACH 26 | * syscall() = syscall + ptrace + PT_DENY_ATTACH 27 | * inline asm=内联(ARM)汇编 = svc 0x80 + ptrace + PT_DENY_ATTACH 28 | * sysctl的getpid 29 | * 其他 30 | * SIGSTOP 31 | * task_get_exception_ports 32 | * isatty 33 | * ioctl 34 | * 详见子教程 35 | * [反调试和反反调试 · iOS逆向开发:动态调试](https://book.crifan.org/books/ios_re_dynamic_debug/website/anti_debug_related.html) 36 | 37 | ## ptrace的PT_DENY_ATTACH 38 | 39 | ### ptrace + PT_DENY_ATTACH 40 | 41 | * `ptrace(PT_DENY_ATTACH, 0, 0, 0);` 42 | 43 | 具体代码: 44 | 45 | * main.m 46 | 47 | ```c 48 | #import 49 | #import "AppDelegate.h" 50 | #import "CrifanLib.h" 51 | 52 | int main(int argc, char * argv[]) { 53 | // anti-debug 54 | iOS_antiDebug_ptrace(); 55 | 56 | NSString * appDelegateClassName; 57 | @autoreleasepool { 58 | // Setup code that might create autoreleased objects goes here. 59 | appDelegateClassName = NSStringFromClass([AppDelegate class]); 60 | } 61 | return UIApplicationMain(argc, argv, nil, appDelegateClassName); 62 | } 63 | ``` 64 | 65 | * CrifanLib.h 66 | 67 | ```c 68 | void iOS_antiDebug_ptrace(void); 69 | ``` 70 | 71 | * CrifanLib.c 72 | * https://github.com/crifan/crifanLib/blob/master/c/crifanLib.c 73 | 74 | ```c 75 | /*============================================================================== 76 | iOS Anti-Debug 77 | ==============================================================================*/ 78 | 79 | typedef int (*func_ptrace)(int request, pid_t pid, caddr_t addr, int data); 80 | 81 | #if !defined(PT_DENY_ATTACH) 82 | #define PT_DENY_ATTACH 31 83 | #endif // !defined(PT_DENY_ATTACH) 84 | 85 | void iOS_antiDebug_ptrace(void) { 86 | // ptrace(PT_DENY_ATTACH, 0, 0, 0); 87 | 88 | // void* libHandle = dlopen(0, RTLD_GLOBAL | RTLD_NOW); 89 | // // libHandle void * 0xfffffffffffffffe 90 | // if (NULL == libHandle) { 91 | // char* errStr = dlerror(); 92 | // printf("Failed to open 0, error: %s", errStr); 93 | // } else { 94 | // func_ptrace ptrace_ptr = dlsym(libHandle, "ptrace"); 95 | // if (NULL != ptrace_ptr){ 96 | // ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0); 97 | // } 98 | // dlclose(libHandle); 99 | // } 100 | 101 | func_ptrace ptrace_ptr = dlsym(RTLD_SELF, "ptrace"); 102 | // ptrace_ptr func_ptrace (libsystem_kernel.dylib`__ptrace) 0x000000018cee2df8 103 | if (NULL != ptrace_ptr){ 104 | // ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0); 105 | ptrace_ptr(PT_DENY_ATTACH, 0, NULL, 0); 106 | } 107 | } 108 | ``` 109 | 110 | ### syscall + ptrace + PT_DENY_ATTACH 111 | 112 | ```c 113 | syscall(SYS_ptrace, PT_DENY_ATTACH, 0, NULL, 0); 114 | ``` 115 | 116 | ### svc 0x80 + ptrace + PT_DENY_ATTACH 117 | 118 | * inline asm=内联(ARM)汇编 = svc 0x80 + ptrace + PT_DENY_ATTACH 119 | * 具体实现: 120 | ```nasm 121 | mov x0, #26 // ptrace = 0x1A 122 | mov x1, #31 // PT_DENY_ATTACH = 0x1F 123 | mov x2, #0 124 | mov x3, #0 125 | mov x16, #0 126 | svc #0x80 127 | ``` 128 | * 效果:编译后的iOS的app的二进制中,加了反调试的汇编代码逻辑 129 | * 举例 130 | * 抖音 131 | * ![anti_debug_aweme_svc_0x80](../assets/img/anti_debug_aweme_svc_0x80.jpg) 132 | 133 | ## sysctl的getpid 134 | 135 | 实现代码: 136 | 137 | ```c 138 | int name[4]; //里面放字节码。查询的信息 139 | name[0] = CTL_KERN; //内核查询 140 | name[1] = KERN_PROC; //查询进程 141 | name[2] = KERN_PROC_PID; //传递的参数是进程的ID 142 | name[3] = getpid(); //获取当前进程ID 143 | 144 | size_t infoSize = sizeof(struct kinfo_proc); 145 | struct kinfo_proc kernelInfoProc; //接受查询结果的结构体 146 | memset(&kernelInfoProc, 0, infoSize); 147 | 148 | sysctl(name, 4, &kernelInfoProc, &infoSize, NULL, 0); 149 | ``` 150 | -------------------------------------------------------------------------------- /src/ios_security_protect/code_confuse/README.md: -------------------------------------------------------------------------------- 1 | # 代码混淆 2 | 3 | iOS安全从代码角度,可以去做:`代码混淆` 4 | 5 | * 代码混淆 目的 6 | * 更好地保护代码,增加逆向破解难度 = 不被轻松地恶意分析破解 7 | * 代码混淆 优缺点 8 | * 优点 9 | * 无须变动项目源码 10 | * 功能灵活可选,根据需要自由组合 11 | * 缺点 12 | * 导致安装包体积增大 13 | * 混淆后的代码有会被编译优化掉的风险 14 | * 提交审核(AppStore)存在被拒的风险 15 | * 代码混淆方式=子功能模块 16 | * obf=Obfuscator 类 17 | * `bcf`=`Bogus Control Flow`=虚假块=伪控制流 18 | * `fla`=`cff`=`Control Flow Flattening`=控制流展开=控制流平坦化 19 | * `split`=基本块分割 20 | * `sub`=`Instructions Substitution`=指令膨胀=指令替换 21 | * `acd`=anti class-dump=反class-dump 22 | * `indibran`=indiret branch=基于寄存器的相对跳转,配合其他加固可以彻底破坏IDA/Hopper的伪代码(俗称F5) = 故意制造堆栈不平衡,不能F5,函数内利用寄存器跳转BR X12 23 | * `strcry`=字符串加密 24 | * `funcwra`=函数封装 25 | * 插入垃圾指令 26 | * iOS代码混淆工具 27 | * `Obfuscator-LLVM` = `ollvm` 28 | * `ios-class-guard`=`iOS Class Guard` 29 | * `Hikari` 30 | * 基于ollvm 31 | * 主页 32 | * https://github.com/HikariObfuscator/Hikari 33 | * https://github.com/HikariObfuscator/Hikari/wiki 34 | * iOS代码混淆后的效果 35 | * 导出头文件后,函数名变乱码 36 | * 比如: 37 | * `money`变成`xadsf32` 38 | * `showMoney`变成`AFAdsaf123` 39 | * iOS逆向后看到的代码中的函数,都是无名的函数 40 | * 比如: 41 | * Hopper逆向app后,有很多函数名都是:sub_xxx,就表示,该函数被混淆了 42 | * ![ios_hopper_func_sub](../../assets/img/ios_hopper_func_sub.jpg) 43 | * 对比 44 | * `YouTube`:没有代码混淆 -> IDA伪代码中能看到明文的`objc_msgSend`的函数调用 45 | * ![ida_code_many_explict_call](../../assets/img/ida_code_many_explict_call.jpg) 46 | * 都可以看到类似于: 47 | * `objc_msgSend(&OBJC_CLASS___NSNumber, "numberWithLong:", 1)` 48 | * 这种近乎原始代码的效果 49 | * `抖音`:有代码混淆 -> IDA伪代码中,完全看不到明文的`objc_msgSend`的函数调用 50 | * ![ida_code_no_explict_call](../../assets/img/ida_code_no_explict_call.jpg) 51 | * 注:其中的`jmp_objc_msgSend_xxxx(xxx, (char *)qword_xxx, xxx)`这类的调用中的`jmp_objc_msgSend_xxxx`是在逆向后,搞懂函数调用后,改名优化后的伪代码 52 | -------------------------------------------------------------------------------- /src/ios_security_protect/code_confuse/ios_class_guard.md: -------------------------------------------------------------------------------- 1 | # ios-class-guard 2 | 3 | * `ios-class-guard`=`iOS Class Guard` 4 | * Polidea/ios-class-guard: Simple Objective-C obfuscator for Mach-O executables. 5 | * https://github.com/Polidea/ios-class-guard 6 | -------------------------------------------------------------------------------- /src/ios_security_protect/code_confuse/obfuscator_llvm.md: -------------------------------------------------------------------------------- 1 | # Obfuscator-LLVM 2 | 3 | 此处介绍,可以用于iOS代码混淆的工具:`Obfuscator-LLVM` 4 | 5 | * `Obfuscator-LLVM` = `ollvm` 6 | * 是什么:基于LLVM的**代码混淆工具** 7 | * 谁开发的:瑞士伊夫尔东莱班的应用科学与艺术大学信息安全小组 8 | * 什么时候:2010年6月 9 | * 目的:增强软件代码安全 10 | * 基于LLVM的编译套件 11 | * 通过防篡改(tamper-proofing)和代码混淆(code obfuscation) 12 | * 支持语言 13 | * `C`, `C++`, `Objective-C`, `Ada`和`Fortran` 14 | * 支持架构 15 | * `x86`, `x86-64`, `PowerPC`, `PowerPC-64`, `ARM`, `Thumb`, `SPARC`, `Alpha`, `CellSPU`, `MIPS`, `MSP430`, `SystemZ`和`XCore` 16 | * 代码混淆方式 17 | * `control flow flattening`=`控制流扁平化`=`控制流平坦化` 18 | * 语法:`-mllvm -fla` 19 | * `instruction substitution`=`指令替换` 20 | * 语法:`-mllvm -sub` 21 | * `bogus control flow`=`控制流伪造`=`虚假控制流程` 22 | * 语法:`-mllvm -bcf` 23 | * 资料 24 | * GitHub 25 | * obfuscator-llvm/obfuscator 26 | * https://github.com/obfuscator-llvm/obfuscator 27 | * 文档入口 28 | * Home · obfuscator-llvm/obfuscator Wiki 29 | * https://github.com/obfuscator-llvm/obfuscator/wiki 30 | * 快速上手 31 | * obfuscator/GettingStarted.rst at llvm-4.0 · obfuscator-llvm/obfuscator 32 | * https://github.com/obfuscator-llvm/obfuscator/blob/llvm-4.0/docs/GettingStarted.rst 33 | -------------------------------------------------------------------------------- /src/ios_security_protect/code_dynamic_exec.md: -------------------------------------------------------------------------------- 1 | # 代码动态执行 2 | 3 | 把iOS的app中,核心的代码,比如核心通信逻辑、加密算法、参数生成逻辑,放到动态代码,即从服务器端动态下载要运行的代码,然后在本地运行核心逻辑,生成要的值。 4 | 5 | 此种iOS安全防护手段,一般称为:`代码动态执行` 6 | -------------------------------------------------------------------------------- /src/ios_security_protect/data_encrypt.md: -------------------------------------------------------------------------------- 1 | # 数据存储加密 2 | 3 | iOS的app的本地端,一般都会涉及到存储很多数据,其中有些可能是敏感数据。 4 | 5 | 其中一种增加iOS的app的安全的做法是:把本地保存的数据加密。 6 | 7 | * iOS端本地的数据库 8 | * 常用:SQLite 9 | * SQLite加密:增加破解难度 10 | * SQLCipher 11 | * https://github.com/sqlcipher/sqlcipher 12 | -------------------------------------------------------------------------------- /src/ios_security_protect/device_fingerprint.md: -------------------------------------------------------------------------------- 1 | # 设备指纹 2 | 3 | * `设备指纹`=`device fingerprint` 4 | * 背景 5 | * 各种非法设备和风险,希望能识别并检测出来 6 | * 模拟器、刷机改机=设备伪造、root越狱、劫持注入、自动注册、羊毛党等 7 | * ![device_risk](../assets/img/device_risk.png) 8 | * iOS设备 9 | * 唯一标识符发展历史 10 | * UDID 11 | * OpenUDID 12 | * MAC 13 | * IDFV 14 | * IDFA 15 | * 但都不够好-》可以被改机改掉,不能保证稳定和唯一 16 | * 是什么:一个唯一的标识符,字符串 17 | * 设备指纹是指可以用于唯一标识出该设备的设备特征或者独特的设备标识 18 | * 用途:设备信息唯一性、渠道流量检测、风险设备识别、通用风控策略 19 | * 概述 20 | * ![device_fingerprint_overview](../assets/img/device_fingerprint_overview.jpg) 21 | * ![device_fingerprint_all_aspect](../assets/img/device_fingerprint_all_aspect.jpg) 22 | * 生成流程 23 | * 文字 24 | * 采集信息 25 | * MAC 26 | * IMSI 27 | * IMEI 28 | * ICCID 29 | * BSSID 30 | * 等 31 | * 计算相似度 32 | * 常见算法 33 | * 简单的:欧式距离、马氏距离、联合概率分布等 34 | * 相对复杂的: MRF(马尔可夫随机场)、BP算法(置信度传播算法)等 35 | * 图 36 | * ![device_fingerprint_gen_process](../assets/img/device_fingerprint_gen_process.jpg) 37 | -------------------------------------------------------------------------------- /src/ios_security_protect/ios_sys_security.md: -------------------------------------------------------------------------------- 1 | # iOS系统安全 2 | 3 | * `iOS系统安全` = iOS操作系统级别的安全 4 | * 概述 5 | * 总体上说,`iOS`系统比`Android`系统更安全 6 | * 当然也更封闭 7 | * 当然,安全只是相对的,并没有绝对的安全 8 | * 高级黑客还是可以破解和黑你的iPhone的 9 | * 详解 10 | * 技术层面 11 | * iOS系统本身 12 | * 安全设计=安全机制 13 | * 可信启动链 14 | * 代码签名 15 | * 沙盒执行环境 16 | * 权限隔离和数据加密 17 | * 更严格的版本控制 18 | * 不能降级(安装低版本的iOS操作系统) 19 | * 该策略使得iOS设备一旦升级后,就只能停留在当前或者最新版本 20 | * 有效避免了操作系统版本碎片化问题,减少了已公开漏洞的影响范围 21 | * 严格掌控的应用市场 22 | * 杜绝向第三方应用开放高级数据访问权限,限制了iOS恶意应用的传播和能力 23 | -------------------------------------------------------------------------------- /src/ios_security_protect/jailbreak_detect.md: -------------------------------------------------------------------------------- 1 | # 越狱检测 2 | 3 | iOS设备的另外一个安全防护手段是: 4 | 5 | * `越狱检测` 6 | * 检测当前iOS设备是否已越狱 7 | * 然后施行对应策略:不允许继续运行,或者功能受限,或者只是后台记录当前设备存在风险,供后续决策提供参考 8 | * 对应技术,详见: 9 | * [iOS逆向开发:越狱检测和反越狱检测 (crifan.org)](https://book.crifan.org/books/ios_re_jb_detection/website/) 10 | -------------------------------------------------------------------------------- /src/ios_security_protect/prevent_export_header.md: -------------------------------------------------------------------------------- 1 | # 防止导出头文件 2 | 3 | iOS的ObjC的特性,使得有机会,在app运行期间,导出ObjC的类的头文件,得到众多的iOS的类的函数定义和具体属性。 4 | 5 | 而如果把iOS的`ObjC`代码,改为`Swift`代码,就可以避免被导出类的头文件,增加了破解难度。 6 | --------------------------------------------------------------------------------