初衷:
有时候看见喜欢的 app 肯定会想要对他的实现一探究竟。我给大家分享下我是如何简单分析的。希望大家一起进步。
准备的工具
- Hopper
- Charles
- Reveal
- MonkeyDev
- pp助手
- class-dump
目标
酷漫漫画 App(如果涉及到侵权,请及时联系作者删除)。
接下来的步骤就是默认你上面的工具都是已经安装好的。
第一步 导出头文件
-
pp助手里面越狱应用里面搜索 酷漫漫画 然后下载
搜索应用.jpg -
找到 ipa,复制一份,后缀改为.zip。解压出来一个文件夹。
终端执行以下命令得出头文件
漫画头文件.jpgclass-dump -H 目标执行程序 -o 导出的头文件存放文件夹
第二步 结合 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 之类的请求工具改变部分参数来不停的尝试。
主要就是看服务端那边对支付成功后是否进行了二次校验。如果没有的话就是可以通过一次支付成功来不停的告诉服务器支付成功,然后服务器端就会不停的给你账户加余额,这样你就可以放心的观看免费章节了。
网友评论