鶸看完小黄书,找了一个某教育app练手的经历

看完了作者的小黄书,就赶紧找了某教育类app练手,目的是免费看视频教程。分享一下鶸的心路历程,忙活了几天了,山穷水尽又峰回路转,最终还是山穷水尽了。

首先当然是用cycript找到需要处理的指定页面的的控制器,view里面是个tableview视频的目录列表,要看哪一个就点击,自然就很容易的找到了代理方法didSelectRowAtIndexPath,然后使用IDA定位到对应的方法分析,由于汇编不熟的原因,在很多跳转的地方,都是使用的lldb来一步一步的跟踪调试对应的跳转。

废了九牛二虎之力摸清楚了大概的程序执行的过程,通过点击的section从数据源中获取到对应model,对比了一下model,发现了一个isFree字段,免费的是0,付费的是1,然后自信满满的开始编写tweak,把数据源里面的isFree字段全部置为0,打包运行,发现没什么卵用,还是弹出了未购买课程的提示,这就很纠结了,私以为是注入没有成功,然后经过一番努力,确定注入成功了,就意识到还有下一层的判断,于是继续开搞.

最终定位到的是通过课程id用户信息的相关参数,调用了相应的接口查询了数据,然后在这个地方懵逼了,程序不知道执行到哪里了.联想到平时的请求也是这样,异步请求,block回调,但是没有调试这个的经验啊,感觉走到尽头了.

突然灵光一闪,从弹出框入手,通过lr寄存器,找到弹出框返回的函数的地址,果然,通过这种方法找到了请求数据的地址,打断点调试,成功的获取到了返回数据,查看返回数据,发现购买过的返回了正常的视频url,但是没有购买的没有返回,通过charls抓包工具进一步的确认了这个结果.凉凉,没法搞了…于是又想着去逆向一下购买的流程,还是使用cycript找到对应的按钮的点击事件,lldb开搞,通过ida分析逻辑,使用register writer来修改寄存器的值,一步一步的按照预期走,但是到了最后一步输入支付密码的时候,还是提示了余额不足,最终的余额判断还是放在了服务器,该app逆向最终结果----卒。。。。

没辙了,不知道咋搞了
溜了溜了。。。。

1 个赞

你这排版…

发现开头空格打了四个,文字就有那个滚动条,去掉了,弄了下

你这个逆向的过程其实已经完成了啊,最后发现关键逻辑由服务器判断,得出了结论,就可以了

狗神说得对 你不应该跑 你hook 网络请求回调 然后 改 服务器返回数据 就可以了

:rofl::rofl: 没有付费的,视频的url没有返回

这个app 叫什么名字 我有空 研究一下

51CTO学院

其实刚开始的时候你就应该做足功课,先别着急逆向,而是从网络抓包入手,比如通过charles修改请求或者返回参数,或者开通一个月的会员,对比一下网络请求的差异性,最后发现能搞了你在去逆向。。。不过这都是经验之谈了,最重要的还是有这么一个经历。加油~

charles 能修改请求参数吗

可以的,下个断点然后编辑请求或者返回就可以了