低调(d-iao) 发表于 2023-8-28 12:58

【散装破文】如何有效率的去除软件广告(四)

本帖最后由 低调(d-iao) 于 2023-8-28 13:25 编辑

    少年破界游 制作起来耗时大,暂时没多少空闲时间处理,待时间充足了再继续。

    散装系列 去广告主要是面向新手教学,所以1,2,3章当时没有在论坛上发布,如果有需要看前三章可以到mt论坛。


    散装系列:是以日常实用小技巧所展开的系列

    前面几课讲解了如何有效的定位广告,接下来讲讲奖励广告的处理。

    在我的认知里,广告分为两种类型,一种是魔系,一种是佛系。所谓凡事都有两面性,广告也不一定全是无益的。就好比逛超市,想买瓶酸奶喝,但牌子种类繁多,这时候作为一名小白,肯定会优先选择广告里介绍的牌子。所以广告在这里就成了增加知识的作用。

    然而在软件里,所谓魔系就是属于霸道,耍横的存在,每当启动软件,就会强制出现或定时展示。不断干扰着正常的使用,想用就得看广告。

   至于佛系则是互动类,随用户自行决定是否出现,一般佛系属于奖励类广告,当用户有需要的时候就显示并换取奖励。比如看了广告可以换取免费次数,看了广告可以领取积分等等。

    由于前几节已经讲解了移除广告,这次就演示如何直接免广告领取奖励。

    一般上奖励类型称为激励广告,英文是Reward AD,至于它的奖励触发条件就得看开发者如何去编写,然后再根据开发逻辑进行处理。所以很多时候并不需要对此类型的广告做特别处理,只需要按正常移除广告即可解决。因为很多开发者都是对广告是否需要展示直接进行判断,当把广告移除后,就不会再触发激励条件,直接达成了免广告的效果。

    然而却有一小部分开发者则会通过用户是否观看了广告进行判断以实现奖励的效果,当检测不到广告的时候就不会进行奖励分配。所以对于这类激励广告,就得对它们特别关照,以符合开发者的逻辑条件,实现免广告奖励。

    本次演示软件是一款互动类小说,里面存在一种名为能量的货币,通过能量可以解锁章节和购买app内的虚拟物品。然而获取能量的方式有两种,通过钱币购买和通过激励广告获取。

    由于这是一篇教学文案,就不细说测试过程,直接总结测试结果。

    1.软件广告只允许大陆地区参与,换句话说则是,如果你所在地非大陆地区,软件全程是无广告状态,你不会在使用过程看见任何广告。

   2.大陆地区以外用户在不使用梯子的情况下是参与不到激励广告。会如图中所示。

   3.如果直接移除app内广告也将导致图中结果。

   

   所以就得随激励广告走一遍,经测试后总结如下。

    1.每次观看超过20秒既可以获取奖励。
    2.视频播放间隔5秒,方可进行下一次奖励操作。

   
   

    同样的先从axml定位广告,虽然图中可以看到很多家广告,但核心却来自liquid(栗壳广告),所以都是通过栗壳聚合控制着各家广告。

   
   

    对了,忘了说此app虽然是flutter开发,但不代表所有的flutter就得直接在so层进行破解。这一般取决于开发者如何去实现。然而对于第三方sdk,基本都会直接在java层进行,这样也就无需对so层进行分析即可进行处理。

    flutter虽然大大提升了逆向难度,将新人们拒于门外,但不意味着开发者就能将之用得其所。所以很多时候旁击也是一个突破点。就好比渗透中也有一种旁注技术,一个服务器上也许绑定了多个域名和网站,这时如果主站保护恰当,那么从服务器里其他网站着手突破服务器权限也一样可以达到最终目的。

    现在已知广告来自栗壳,通过激励广告20秒后奖励,少于20秒都无法成功获取奖励,并且只限大陆地区。

    当分析完毕后就要制定处理方案。

   1.移除所有广告
   2.免广告领取奖励
   3.解决非大陆地区用户奖励领取

   那么现在可以开始一步一步来,关于第一部分前几课已讲解过,这里不再演示,只要移除初始化即可销毁广告sdk的运作。

   

    接着要处理免广告奖励,在处理之前得先了解,软件是如何判断已观看激励广告并且是超过20秒。说明广告sdk和软件之间会有个回调,让其知道已经观看了20秒以上就发放奖励。所以这时候就要查看开发手册,了解广告回调过程,图中广告来自穿山甲,这里将查看穿山甲聚合的回调方式。

   
      
   
   现在已知道回调方式通过onRewardVerify进行奖励方法,那么可以在dex里查看具体情况了。

   

    首先图中两个来自程序包名的目录,说明最终回调将会在这里执行。

   

    看看回调代码可以发现,只是一个boolean数组判断是否已完成激励,是则成功。

   

    接下继续看看哪里调用了它,搜索结果很多,但是从分析过程已核心广告来自栗壳,所以可以直接缩小到liquid包名范围里。

   

    这里可以看到程序是通过    invoke-interface代理接口进行回调,最终都会回调到AdManager里。

   

    接着可以看到上方有个getFullAdRewardTime的时间判断,如何符合观看时长则返回1,否则返回0。

   

    那么现在就要看有多少个地方调用了getFullAdRewardTime,搜索结果一共有3处。

   

    进入到代码后可以看到,当观看时长符合条件,就会返回1(绿色标记),不符合就会返回0(红色标记)。

   

    所以只要强制把0改为1,就可以直接实现点开广告,秒关即可领取奖励,而不需要再等待20秒。


    虽然这样可以解决了观看奖励问题,但是显然不是想要的结果。继续往下可以看到一条onAdClose的代码,但一样都是通过接口回调,所以具体位置还是在AdManager里。

   
   
   

   从onAdClose代码可以看出,回调过程首先是从onRewardVerify进行判断,接着把得到的判断结果在onAdClose执行,最终会在onClose里完成奖励放送操作。

   

   当onRewardVerify赋值为1时,就会在这里进行对应的奖励发放,当为0的时候,就会清空奖励内容,不会进行发放。

   

    到这里总算完全了解了整个奖励机制,现在不仅要将广告全部移除,甚至要让奖励可以正常发放,并且还要实现全地区参与。

   首先要了解一件事,当软件无法获取到有效广告的时候,就不会再继续往下执行代码,这样当把广告sdk摧毁后,就会导致软件已无法正常获取到广告了,所以需要把获取到奖励的代码移写到能被调用的地方,这样就可以实现免广告免地区获取奖励了。

      从上面分析过程已知只需要调用onRewardVerify和onAdClose就能成功获取奖励,但是现在需要把这代码放到哪里调用呢?

   分析过程中可以知道onRewardVerify和onAdClose都在Lcom/cyclotron/android/ad/AdManager$4$1;类里,然而$1是$4的内部类,$4则是AdManager的内部类。那么就要找出哪里调用了Lcom/cyclotron/android/ad/AdManager$4;

   图中搜索结果可以知道此类在AdManager会被实例化调用,也可以理解为激励广告从这里开始执行。所以只要把这里修改成直接获得奖励 就能实现了秒刷能量。

      

    最后修改代码如下图,打包完成,即可秒领奖励(注意:10秒内只能获得一次奖励。)
   
   修改前:
      
   修改后:
      
   完成图:
      


   

   

低调(d-iao) 发表于 2023-8-28 15:43

ly19961202 发表于 2023-8-28 15:37
声明一下不是偷学的我的,知识是共通的,不属于任何个体。免广告是非常简单的,只需要细心观察一下就能准 ...

这是面向新手教学,所以才不走捷径。 因为新手基本没什么经验。

低调(d-iao) 发表于 2023-10-27 00:38

iteamo 发表于 2023-10-24 14:12
低调大神,请教一下,你倒数第二张的截图,更改好的代码,怎么还带着. line87…… 这些的呢   是直接复制 ...

你是不是看错了?根据你的描述,应该是倒数第三张。 虽然没看到哪张是符合你说的内容。所以也有可能你图片没完全加载出来

xianuo 发表于 2023-8-28 17:49

学习学习

gunanyi 发表于 2023-8-28 15:13

第一第一{:301_987:}

zjh889 发表于 2023-8-28 15:15

这东西很实用,谢谢大神!

ly19961202 发表于 2023-8-28 15:37

本帖最后由 ly19961202 于 2023-8-28 15:38 编辑


声明一下不是偷学的我的,知识是共通的,不属于任何个体。免广告是非常简单的,只需要细心观察一下就能准确的找到。
----------
你这个教程在找回调代码的时候可以更简单一点,你现在是全局搜索的那个方法,但是有的广告是没有这个方法的,这就需要你去积累经验记住各种广告sdk的抽象类的位置了。
你可以从你现在已经找到的那个类去翻一下那个抽象类定位一下,下次可以直接手动到这个位置直接找到,这样就不需要全局搜索一下出来这么多结果

ly19961202 发表于 2023-8-28 15:44

低调(d-iao) 发表于 2023-8-28 15:43
这是面向新手教学,所以才不走捷径。 因为新手基本没什么经验。

嗯,对。我给忘了是面向新手的,得让他们知道这个方法怎么来的。

asd5014969 发表于 2023-8-28 15:45

谢谢大神!

redfieldw 发表于 2023-8-28 15:54

厉害,感谢分享

Him8848 发表于 2023-8-28 16:04

支持一波
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 【散装破文】如何有效率的去除软件广告(四)