iOS 之 如何分析一个 App 的实现

逆向.jpg

初衷:

有时候看见喜欢的 app 肯定会想要对他的实现一探究竟。我给大家分享下我是如何简单分析的。希望大家一起进步。

准备的工具

  • Hopper
  • Charles
  • Reveal
  • MonkeyDev
  • pp助手
  • class-dump

目标

酷漫漫画 App(如果涉及到侵权,请及时联系作者删除)。

接下来的步骤就是默认你上面的工具都是已经安装好的。

第一步 导出头文件

  • pp助手里面越狱应用里面搜索 酷漫漫画 然后下载


    搜索应用.jpg
  • 找到 ipa,复制一份,后缀改为.zip。解压出来一个文件夹。
    终端执行以下命令得出头文件

class-dump -H 目标执行程序 -o 导出的头文件存放文件夹

漫画头文件.jpg

第二步 结合 Hopper 来分析应用引用了哪些第三方库以及分析代码逻辑

  • 打开 Hopper 扔进去 包里面的执行文件进行分析。
    分析.jpg

通过左上角搜索关键词可以知道应用到底使用了哪些第三方库。我查找到这个目标 app 使用了以下第三方。

  • 百度云推送
  • ShareSDK
  • SRWebSocket
  • IQKeyboardManager
  • YYWebImage
  • YYCache
  • JSONModel
  • SDPhotoBrowser
  • MWPhotoBrowser
  • SDWebImage
  • MBProgressHUD
  • Masonry
  • WCAlertView
  • SIAlertView
  • CustomIOS7AlertView

假如你对某个头文件中的方法实现逻辑感兴趣,可以这样做。

比如对图中圈住的方法感兴趣


头文件中的方法.jpg

可以在 Hopper 中这样分析


分析逻辑.jpg

想了解 Hopper 点击这里

第三步 使用 MonkeyDev 和 Reveal 对UI界面进行查看,还可以用代码进行 hook 调试。

  • 运行起来程序后(注入 动态库 dylib 进行调试),点击 Reveal 就可以看到界面的层级关系了。


    界面层级关系.jpg

通过左边的名字 不难分析出,这个界面是用 UIScrollView 实现的,UIScrollView 里面就是 几个view 展示的。

分析首页的时候 发现最上面的左右 两个 Button 距离左/右的距离为0 然后 Button 宽30 高33。点击响应的时候不太方便。 人手指最舒服的点击大小是 宽和高都是 44。

  • 想 hook 某些方法或者加写页面 可以在里面写代码


    hook 方法.jpg

第四步 使用Charles 进行 API 分析。

  • 抓到的时候发现这个 app 还使用的是 http 请求。
  • 没看之前有个想法就是说,想通过伪造包请求来查看收费的漫画章节(比如它的实现可能是通过 某个参数 为1或者0来判断是否允许用户观看)。

这是正常免费漫画章节的请求。


免费章节API.jpg

然后是点击收费章节的请求。


收费章节API.jpg

通过发送的参数可以分析出,是在服务器端来判断你的账户里面金额够不够观看收费章节。说明咱们之前的想法是错误的。

  • 但是到这里的时候 我还有 2 个想法。

1、正常免费章节的 api 返回的数据是这样的(部分 JSON 数据)。

"imageList": [{
            "image_id": 1,
            "comic_id": 36427,
            "image_server_id": 99,
            "chapter_id": 3267,
            "image_url": "http:\/\/s2.static.kuman.com\/\/001\/00\/39\/46\/10461\/81015a81073611fc2.jpeg!km2",
            "sync_status": 0
        }, {
            "image_id": 2,
            "comic_id": 36427,
            "image_server_id": 99,
            "chapter_id": 3267,
            "image_url": "http:\/\/s2.static.kuman.com\/\/001\/00\/39\/46\/10461\/89445a8107373294c.jpeg!km2",
            "sync_status": 0
        },

对比两个 image_url 数据 会发现

http://s2.static.kuman.com//001/00/39/46/10461/XXXXXX.jpeg!km2

在 标注 XXXXX 的地方就是他们不一样的地方,如果逆向找出生成的规则,你就能免费看所有的漫画了。需要时间不停的去验算规则。

2、就是通过伪造假的下单成功请求来使你的账户余额变多。
这个 app 使用的支付方式分别是 支付宝、微信、Apple Pay。
支付的 api 是 http://api.kuman.com/pay/recharge。
思路是先花钱通过下单成功来查看一套完整的流程,记录每个步骤的参数和返回数据,通过 Paw 之类的请求工具改变部分参数来不停的尝试。
主要就是看服务端那边对支付成功后是否进行了二次校验。如果没有的话就是可以通过一次支付成功来不停的告诉服务器支付成功,然后服务器端就会不停的给你账户加余额,这样你就可以放心的观看免费章节了。

有什么问题可以留言评论。只有大家不停的分享,才会能更快的进步。如果想逆向别人的 app。只有你正向开发达到了一定的深度,逆向起来就会感觉轻松不少。我这是大致的介绍下方法。如果想更深入的话需要你自己学习了。或者说有更好的方法也可以介绍给我。

如果想了解更多的知识,请在开发者头条里面关注我们,不定期分享关于 iOS 的文章。

加入我们 一同进步.png

你可能感兴趣的:(iOS 之 如何分析一个 App 的实现)