刚入门ios逆向, 正好朋友叫我帮忙破一款app, 在这里记录下自己的破解思路与过程
app名称 : 追书神器
app版本号 : 2.26.6.3
用到工具 : paros(抓包), Hopper Disassembler(反汇编), Flex 2
目的 : 免费观看收费的章节
为了效率, 我直接在PP助手下载的越狱版, 这样就不用砸壳了
思路1 :
如果只是在APP端进行了判断收费/免费章节, 那么我只需要找到判断的地方,改掉就行
验证过程 :
随便添加一本收费的小说(庶女有毒), 用抓包工具分析 收费/免费章节有什么区别
这本小说从65章开始就是收费章节了, 那我们就看下64章与65章在服务器返回的数据中有什么区别
打开paros开始抓包
点开64章
抓到包
http://chapter2.zhuishushenqi.com/chapter/http%3A%2F%2Fvip.zhuishushenqi.com%2Fchapter%2F573d94ce880329c92aa63e58%3Fcv%3D1472718941196?k=60ce854a1615d080&t=1478953225
返回以下数据
再点开收费章节65章
抓到包
http://chapter2.zhuishushenqi.com/chapter/http%3A%2F%2Fvip.zhuishushenqi.com%2Fchapter%2F573d94ce880329c92aa63e59%3Fcv%3D1478240721878?k=8f2f4c749fb37bdd&t=1478953387
返回数据
可以看到, 收费章节的包里有个属性isVip等于true, 而且内容已加密, 那么这种改本地判断的思路行不通, 或者说难度比较大
思路2
刚刚抓包时发现个有意思的地方, 有的书是可以换源的, 除了追书神器自己的源, 换其他源看书都是不收费的, 那我们可不可以让所有的书都能换源呢
验证过程:
抓包看这些源的列表是怎么来的
找一本能换源的书(极品家丁后传), 点击阅读
抓到包
http://api.zhuishushenqi.com/atoc?view=summary&book=5667c9a44aa8cc2b1d721f5a
返回数据
再找一本不能换源的小说,还是用之前那本(庶女有毒)
抓到包
http://api.zhuishushenqi.com/btoc?view=summary&book=510f6d8b59762e945300002f
返回数据
对比发现, 2本书请求的地址是不同的, 能换源的请求的是http://api.zhuishushenqi.com/atoc....
不能换源的书请求的是http://api.zhuishushenqi.com/btoc....
一个是atoc 一个是btoc
返回的内容也不同, 不能换源的书返回的只有 zhuishuvip 的源
那如果把不能换源的请求改成 atoc会是什么情况呢, 测试一下
直接浏览器打开http://api.zhuishushenqi.com/atoc?view=summary&book=510f6d8b59762e945300002f
返回数据
ok 到这里, 可以说这条思路完全能行得通的
下面就是如何能让所有的书都访问的是atoc而不是btoc了
逆向
把app丢到hopper disassembler里分析
直接搜索字符串: atoc
在右边的看到引用它的地址双击
继续看右边引用它的地址
双击来到可以清楚的看到, 这个地方有好几个判断用来区分应该访问atoc还是btoc0000000100270170 cbz w22,0x100270194
这个地方有个跳转
这句话的意思就是说:当w22等于false的时候, 跳转到0x100270194
也就是跳到了btoc, 这个应该就是我们要找的关键点了
看到这里,第一个念头就是就是,既然如此不让x22等于false就行啦
0000000100270164 mov x22,x0
看上面的代码w22来自x0, x0是allowPirateWithBookId方法的返回值, 那么用Flex修改这个方法的返回值为true,再次打开app看看是否破解成功
再次打开app
发现还是不能换源, 但是抓包发现现在已经是在访问atoc了, 那说明这个地方只是判断请求的地址, 是否能换源是在其他地方判断的, 那我们跟进去allowPirateWithBookId方法看看里面是怎么实现的
在allowPirateWithBookId方法里面, 发现了2个可疑的方法
@selector(bookAllowPirateResource:)
@selector(bookAllowPirateReading:)
通过动态调试对比能换源的与不能换源的小说访问这个2个方法的返回值, 发现能换源的时候
bookAllowPirateResource 返回的是true
bookAllowPirateReading 返回的是false
把这2个方法添加进Flex里面验证下
设置bookAllowPirateResource 返回 true
bookAllowPirateReading返回 false
再次打开app
ok 破解成功到了这里, 追书神器所有的书都已经能换源
直接用Flex就能完成破解工作
或者制作插件hook住bookAllowPirateResource, bookAllowPirateReading的返回值即可