├── 目录.jpeg ├── Hook1.jpeg ├── Hook2.jpeg ├── Hook3.jpeg ├── Hook4.jpeg ├── Hook5.jpeg ├── Hook6.jpeg ├── pp助手.jpeg ├── 分析1.jpeg ├── 分析2.jpeg ├── 创建工程.jpeg ├── Reveal1.jpeg ├── Reveal2.jpeg ├── Reveal3.jpeg ├── BundleID.jpeg ├── class-dump1.jpeg ├── class-dump2.jpeg └── README.md /目录.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/目录.jpeg -------------------------------------------------------------------------------- /Hook1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/Hook1.jpeg -------------------------------------------------------------------------------- /Hook2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/Hook2.jpeg -------------------------------------------------------------------------------- /Hook3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/Hook3.jpeg -------------------------------------------------------------------------------- /Hook4.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/Hook4.jpeg -------------------------------------------------------------------------------- /Hook5.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/Hook5.jpeg -------------------------------------------------------------------------------- /Hook6.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/Hook6.jpeg -------------------------------------------------------------------------------- /pp助手.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/pp助手.jpeg -------------------------------------------------------------------------------- /分析1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/分析1.jpeg -------------------------------------------------------------------------------- /分析2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/分析2.jpeg -------------------------------------------------------------------------------- /创建工程.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/创建工程.jpeg -------------------------------------------------------------------------------- /Reveal1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/Reveal1.jpeg -------------------------------------------------------------------------------- /Reveal2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/Reveal2.jpeg -------------------------------------------------------------------------------- /Reveal3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/Reveal3.jpeg -------------------------------------------------------------------------------- /BundleID.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/BundleID.jpeg -------------------------------------------------------------------------------- /class-dump1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/class-dump1.jpeg -------------------------------------------------------------------------------- /class-dump2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangsCalvin/ReverseDocument/HEAD/class-dump2.jpeg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Reverse Document 2 | [![](https://travis-ci.org/Alamofire/Alamofire.svg?branch=master)](http://www.yangziyao.top) 3 | [![GitHub issue author](https://img.shields.io/github/issues/detail/u/badges/shields/979.svg)](https://weibo.com/5905837515/profile?topnav=1&wvr=6) 4 | [![MIT Licence](https://badges.frapsoft.com/os/mit/mit.svg?v=103)](https://opensource.org/licenses/mit-license.php) 5 | [![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/CodyCalvin/WebCrawler) 6 | 7 | 逆向工程的目的 8 | ----- 9 | 1. 分析竞品的最新研究或者产品原型(包括所用的技术,所使用的框架) 10 | 11 | 2. 有助于进一步的认识iOS从而提升自己/学习目的。 12 | 13 | 3. 破解应用的使用权限 14 | 15 | 4. 识别竞品潜在的侵权行为 16 | 17 | 逆向工程的分析工具 18 | ------ 19 | 20 | * 进行iOS逆向工程的一个关键就是工具的使用,工欲善其事,必先利其器。 21 | 22 | 23 | |工具分类| 工具名称  | 24 | | -----|:---------:| 25 | |越狱工具| [盘古越狱](http://www.pangu.io) | 26 | |查看文件工具| [PP助手](https://pro.25pp.com),[iExplorer](https://iexplorer.en.softonic.com),[iFunbox](http://www.i-funbox.com/zh-cn_index.html),[iTool](https://www.itools.cn)| 27 | |砸壳工具| [dumpdecrypted](https://github.com/stefanesser/dumpdecrypted),[Clutch](https://github.com/KJCracks/Clutch)| 28 | |查看头文件工具| [class-dump](https://github.com/nygard/class-dump)| 29 | |反汇编工具| [Hopper](https://www.hopperapp.com),[IDA Pro](https://www.hex-rays.com)| 30 | |调试器| [HCycript](http://iphonedevwiki.net/index.php/Cycript_Tricks "插件Cydia安装"),[gdb](http://www.gnu.org/software/gdb/ "插件Cydia安装")| 31 | |UI分析工具| [Reveal](https://revealapp.com)| 32 | |网络分析工具| [Charles](https://www.charlesproxy.com)| 33 | 34 | 1.准备阶段 35 | ------- 36 | 37 | 先上 iOS 逆向的三板斧,这是每次要逆向破解前都需要做的步骤。如果你不了解iOS逆向的话你可以参考一下文章[iOS逆向工程准备工作](https://www.jianshu.com/p/0cb76f7203b3)或者阅读[iOS应用逆向工程](https://book.douban.com/subject/25826902/)书籍当然也有PDF版[iOS应用逆向工程pdf版](http://www.cocoachina.com/bbs/read.php?tid-1677433.html) 38 | 39 | 首先,请确保你的手机已经越狱,同时已经安装好 theos 开发环境,当然如果你做的`Tweak`比较简单的话那么你可以使用[MokeyDev](https://github.com/AloneMonkey/MonkeyDev)来开发调试。 40 | 41 | 2.砸壳 42 | ------- 43 | 44 | 如果是从 AppStore 上面下载的 App,都要先进行砸壳,否则是没办法进行下一步的。如果你懒得做这一步,就直接去其它助手类应该上面进行下载,那些都是砸过壳的,可以直接使用。 45 | 46 | 砸壳可以使用的工具有两种: 47 | 48 | [dumpdecrypted](https://github.com/stefanesser/dumpdecrypted),使用方法请参考[dumpdecrypted砸壳](http://www.swiftyper.com/2016/05/02/iOS-reverse-step-by-step-part-1-class-dump/) 49 | 50 | [Clutch](https://github.com/KJCracks/Clutch),使用方法请参考[Clutch砸壳](http://www.swiftyper.com/2016/12/26/wechat-redenvelop-tweak-for-non-jailbroken-iphone/) 51 | 52 | 大多数App可以直接在PP助手在这里,我们这里以逆向陌陌为例就直接用PP助手下载陌陌越狱版省去砸壳步骤.具体流程请看下图 53 | ![](./pp助手.jpeg) 54 | 55 | 3.创建工程 56 | ------- 57 | 58 | 59 | 这里我们没有越狱手机那么我们首先要配置好[MokeyDev](https://github.com/AloneMonkey/MonkeyDev)然后我们打开`Xcode`创建一个新的工程我们选择`MokeyApp` 60 | 61 | ![](./创建工程.jpeg) 62 | 63 | ![](./BundleID.jpeg) 64 | 65 | 此时我们打开项目文件把我们下载的越狱版陌陌ipa安装包放到项目下的`TargetApp`目录下 66 | 67 | ![](./目录.jpeg) 68 | 69 | 此时我们运行项目就可以看到陌陌啦 注意:只能用真机模拟器无法运行. 70 | 71 | 4.思路 72 | ------- 73 | 74 | hook一个APP最难的不是代码,往往是分析出合适的切入点。 75 | 76 | 比如我们想抓取陌陌关注里边的视频列表那我们就可以先从界面切入分析. 77 | 78 | 这时我们就用到了UI页面分析神器[Reveal](https://revealapp.com)运行项目然后把手机页面调至我们想分析的页面然后打开[Reveal](https://revealapp.com) 79 | 80 | ![](./Reveal1.jpeg) 81 | ![](./Reveal2.jpeg) 82 | 83 | 打开之后我们会看到陌陌的视图的层次结构左边部分是陌陌的结构中间是视图我们找到想要分析的界面点击此界面然后看下图 84 | ----- 85 | ![](./Reveal3.jpeg) 86 | 我们看到右侧的视图Class项确定了这个视图是属于哪个类的,下面我们就需要把陌陌的头文件导出来找到对象的Class然后进行分析Hook. 87 | 88 | 5.导出.h文件 89 | 导出头文件这里我们就要用到[class-dump](https://github.com/nygard/class-dump)如果没配置的话可以参考[Class-dump配置](http://blog.csdn.net/wm9028/article/details/52021061)此时们可以在桌面创建一个文件夹(命名随意)然后打开`ITerm(终端)`输入以下命名行 90 | 91 | ```java 92 | class-dump -H 陌陌.app文件的路径 -o 生成头文件存放的路径 93 | ``` 94 | 95 | ![](./class-dump1.jpeg) 96 | 97 | 然后敲击回车运行等待完成即可此时头文件已全部导出 98 | 99 | ![](./class-dump2.jpeg) 100 | 101 | 5.分析 102 | ------ 103 | 104 | * 此时打开我们刚才导出的头文件找到我们之前分析到的`MDMainMomentViewController.h`文件 105 | 106 | ![](./分析1.jpeg) 107 | 108 | ![](./分析2.jpeg) 109 | 这正是我们要切入的那个点,下边我们就开始编写Tweak进行分析。 110 | 111 | 6.开始Hook 112 | ------ 113 | 114 | * 我们已经找到了切入点,下边我们就要Hook此方法然后通过oc语言的Rtuntime特性进行下断点分析。 115 | 116 | 我们使用`MonkeyDev`使用的是[CaptainHook](https://github.com/rpetrich/CaptainHook)语法,如果你不太了解[CaptainHook](https://github.com/rpetrich/CaptainHook)语法的话你可以参考[CaptainHook语法](https://www.cnblogs.com/lkislam/p/4781011.html)文章. 117 | 118 | 然后我们打开工程开始编写代码进行函数替换编写好的代码如下图会正向开发的下边代码都能看懂. 119 | 120 | ![](./Hook2.jpeg) 121 | 122 | 然后我们运行代码打开手机等待项目运行起来打开我们视频推荐列表然后下来一下然后App请求数据自然会走`startRequest`函数我们已经Hook了然后 123 | 会停到我们下断点的地方这时候我们就开始下一步的分析. 124 | 125 | ![](./Hook3.jpeg) 126 | 127 | 从Log栏中我们可以发现视频模型的类型是`MDMomentItem *`类型的那么我们就从我们导出的陌陌头文件中找到此文件把他拖入到项目中然后引用他就可以了。 128 | 129 | ![](./Hook4.jpeg) 130 | 131 | 我们把存储数据的List数组遍历然后把视频的信息全部打印出了当然你也可以把数据发送到后台存储到服务器当中或者连接电脑直接储存到电脑上也是可以的。 132 | 然后我们再次运行项目查看Log栏的打印,随便找个视频地址然后打开嗯不错完美Beautiful这不就正是我们想要的结果. 133 | 134 | ![](./Hook5.jpeg) 135 | 136 | ![](./Hook6.jpeg) 137 | 138 | 你还可以参考别人的文章[初探iOS逆向工程+微信小牛试刀](http://blog.csdn.net/AirSars001/article/details/55189773),[移动App入侵与逆向破解技术-iOS篇](https://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653577384&idx=1&sn=b44a9c9651bf09c5bea7e0337031c53c&scene=0#wechat_redirect)等等. 139 | 如果你想更深入的了解逆向那么你还要学习ARM汇编语言等。 140 | 141 | 7.总结 142 | ------ 143 | 洋洋洒洒写了这么多,其实真正的步骤是很简单的,只是我比较啰嗦,想把每个步骤都尽量讲得详细一点。 144 | 145 | 如果还有不清楚的地方,可以直接留言提问,或者直接到我的Github上提issue。 146 | 147 | 当然,我也是新手,刚开始学习逆向,可能有些地方理解不准确或有错误,欢迎批评指证。 148 | 149 | 再多啰嗦一句,这里讲的都是很浅很浅的东西,可以说跟逆向只能搭上一丢丢的边,如果你对逆向特别有兴趣的话,强烈 150 | 151 | 推荐去看下这本书[iOS应用逆向工程](https://www.amazon.cn/gp/product/B00VFDVY7E/ref=as_li_tf_tl?ie=UTF8&camp=536&creative=3200&creativeASIN=B00VFDVY7E&linkCode=as2&tag=buginux-23)。 152 | --------------------------------------------------------------------------------