最近朋友推荐了一个看视频的软件,我寻思看看广告就看看广告吧,但是这个软件现在让我觉得它是个假的,因为广告点进去就跳转到别的app了。行吧,那我们来一探究竟吧。
原生无壳,非常好。


我只是想看个视频而已。而且这里的广告都好友(流)好(忙),
既然这样的话,我们就从这里的布局入手吧。
ok,紧接着我们定位页面位置和控件。


混淆一般,从这个Activity的ViewBinding得知,具体的布局文件是:activity_fareach_info,且找到了具体位置,

简单分析了一下布局层级之后,那么这个核心部分应该就是在:
其实这里就需要分出一个开发上的知识了,就是自定义View,这个控件大概率是一个自定义ViewGroup,从他的一些属性来看的话,能看出来有很多自定义属性,这里我对它没有太大兴趣哈哈,就先略过。
代码很多,我们先不着急看,先来看看方法列表有没有比较敏感的字段

看到有Ad相关的,还有Visibilty,这不就是控制显示隐藏的吗?
但是我英文不好,还是去翻译了一下。Reward是奖励的意思,那就是说 获取广告奖励的显示状态。
好这里调用是父类的同方法,继续往里看。
那么有get肯定有set,这里我们能看到它获取的是getExoPlayAdRewardLayout,
交叉引用发现只有这一个地方用了。

但是代码是这么写的:
为了代码的客观性,我给这个c重新起个名字,那就叫exoPlayAdRewardLayout吧。

前三个构造方法先pass,因为那里是初始化布局的地方。
最后一个也pass,因为我们刚才看的是最后一个方法,那么就剩下和这个b方法了,而且参数是int类型,View的setVisibility也是要的int类型的参数,这个方法可疑性极高,点进去看看。
果然,就是这里了。然后我还是给他改个名字,方便后面追代码好追。就成为了这样。
继续找交叉引用发现了只有BaseView中引用到了
继续找交叉引用,然后发现只有子类调用了

这里的交叉引用有点多,也混淆了,那么这里我们就来打印个堆栈信息看看。这里我用的是算法助手
然后往上追到了z1方法
这里代码整体看一下,假设走到y8.a.b就是显示广告控件的话,那么上面的if就是成立条件,且代码中entry.getInterval_time是什么Interval_time不就是间隔时间吗?说英语不好能学代码不假,但是成本也确实高啊。英语好的话这里就少读很多。那么这里就是三个条件必须同时成立才会看广告。那我随便搞一个条件就行了。
这里我就看o1.a.Q()不顺眼,且这个返回值类型还是int类型的,我就hook一下它好了。这里我贴一下xp的hook代码片段,但是这里我为了省事我就用算法助手了。
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!