在番看付费美女直播,不想花钱,我这样做了!

点击“开发者技术前线”,选择“星标?”

在看|星标|留言,  真爱


原文链接:https://www.jianshu.com/p/51dcc24900ba

前言

在一个夜黑风高的晚上,我的基友突然给我发了一个叫“xx社区”的app,这是什么玩意?找了一张可以上墙的图

640?wx_fmt=png

我凑,是个美女直播软件,迫不及待的我,一阵点点点,发现最亮点的功能是第二个tab页,是类似抖音的短视频,找了一张正经的图,抖音都没这么正经吧。。。

640?wx_fmt=png

我去,做的效果跟抖音一毛一样,上下滑动切换视频,聊这个,那我可不困了,在滑动了差不多20个视频之后,出现了这个

640?wx_fmt=png

卧槽,这能忍,作为一个Android开发攻城狮,充值是不可能充值的。太晚了,打算明天再破解它的收费功能。于是,第二天很早就起床打开电脑,这篇文章就开始了…

反编译

将apk发送到电脑,然后打开jadx-gui传送门,直接选择这个apk,打开,发现源码是这个样子的

640?wx_fmt=png

熟悉逆向的朋友们肯定猜到了,这个apk使用了腾讯加固,所以反编译出来只有腾讯加固的几个类,看不到目标源码。那怎么办?
既然加固了,第一步就是要给它脱壳

脱壳(需要xposed支持)

FDex2

通过Hook ClassLoader的loadClass方法,反射调用getDex方法取得Dex(com.android.dex.Dex类对象),在将里面的dex写出。

下载安装,在xposedinstaller中勾选模块并重启,然后打开FDex2选择xx社区,然后重启xx社区,即可在对应目录找到dex文件的踪影

分析代码

上一步通过FDex2,成功脱壳

640?wx_fmt=png

拿到三个dex,依次用jadx-gui打开,根据包名,可以找到对应Activity的位置

640?wx_fmt=png

如何得到Activity名称,这个可以用无障碍,也可以直接过滤日志,比如,打开界面,然后日志过滤“start|activity” start u0

 
 

com.one.tomato.ui.StartUpActivity 就是主页了,主页一共有5个tab,每个tab应该对应一个fragment,我们要先找到第二个tab对应的fragment

640?wx_fmt=png

看到点击事件,通过命名方式可以猜到这个是底部tab的点击事件,点一下应该会切换显示fragment

640?wx_fmt=png

果然不出我所料,第二个tab是PapaTabFragment,搜索一下

640?wx_fmt=png

打开看看

640?wx_fmt=png

虽然代码被混淆了,但是可以猜到这里是初始化的方法,有头像和收藏图标的点击事件,当然,这个不是重点,哈哈,我们还是要先分析一下什么时候触发这个弹窗,弹窗的条件是播放次数到达到一个值,根据这个条件,快速浏览一下PapaTabFragment这个类,代码不多,只有1千行多一点

640?wx_fmt=png

发现疑点,LookTimes是观看时间,VideoPlayCountUtils是播放次数。

VideoPlayCountUtils 是一个单例,所以看b和c方法

640?wx_fmt=png

“video_play_count” 这么明显的字眼,播放次数,这个次数是从PreferencesUtil中获取的,也就是存在sp中

640?wx_fmt=png

PreferencesUtil 中的e方法,如果登录信息不为空,就返回信息中的id,空就返回0,所以第一次打开才会是0,可以观看,之后这个LoginInfo不为空了,开始统计观看次数了。

so,让它总是返回0?

上代码

Xposed模块开发基础就不说了,默认你已经会了,不会自己去查一下,Xposed基础不是本文的重点。

//播放数总返回0,无限制观看

 
 

然后其实会发现一个问题,class not found,找了很久,最后才反应过来,因为apk经过加固,必须要用壳的ClassLoader来加载类,因为真正的代码是腾讯加固程序启动后它去加载真正的dex文件的。

640?wx_fmt=png

这里我们可以hook TxAppEntry 的 attachBaseContext 方法

 
 

然后安装试了一下,卧槽,真的无限制观看了,我是V8了?

640?wx_fmt=gif

确实成功了,效果图就不发了,大家可以动手试试。

另外,跳过首页广告和打开日志的hook点我也很快找到了

 
 

不是很难找,这里就留给大家自己去实践学习了。

注意:不管xx社区后期是否停止服务(你懂的),本文只是技术分享。

虽然破解了短视频模块播放次数限制之后,发现播放经常弹出“参数错误”的toast,这TM能忍,继续干。然后看到“我的”界面的次数没有被hook

640?wx_fmt=png

说明没有hook彻底,如果应用中其它地方用了这里的 0/30 做判断,那么有可能还会被限制,请继续看:

640?wx_fmt=png

首先,打开 MineTabFragment 这个类,这个上一章已经分析过了,”我的“ 那个tab对应 MineTabFragment,然后寻寻觅觅,起初没找到免费观看次数是哪个textview,然后翻到最上面,发现导包的地方有个 import com.one.tomato.utils.VideoPlayCountUtils,顾名思义,就是获取播放次数的类,然后就发现了上图这个调用的地方

 
 

看下 VideoPlayCountUtils.a()

640?wx_fmt=png

VideoPlayCountUtils 是一个单例,所以我们直接看 b 方法

640?wx_fmt=png

和 c 方法

640?wx_fmt=png

看到 video_play_count 没,都是跟播放次数有关,盘它就对了

 
 

先打印两个值看看,build and install 重启xx社区,看log

640?wx_fmt=png

28/30,对应就是剩余播放次数和总的可以播放次数。
上面的原图是29,因为中间手抖播放了一次,所以剩下28,没毛病。。。

改返回值啦,很简单了,最终代码如下

重新打开xx社区

640?wx_fmt=png

可播放了总次数都是1000,怎么播都不变了.美滋滋!

关注本微信公众号,在后台回复关键字:666,可以获取一份程序员大礼包!

---END---

选择”开发者技术前线 “星标?,内容一触即达。点击原文更多惊喜!

开发者技术前线 汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。


历史推荐


逆袭FLutter? Facebook 发布全新跨平台引擎 Hermes!

字节跳动 CEO 张一鸣炮轰 HR , “按这要求我自己都进不来!”

每天劝你辞职的同事,反而是公司待最久的

640?

点个在看,解锁更多惊喜!


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值