【新手教程】安卓 穿山甲广告(字节跳动)、腾讯广告和百度广告 通用去除教程

查看 130|回复 10
作者:芽衣   
本教程只适合新手,专业逆向请直接删类


i_f25.png (4.8 KB, 下载次数: 0)
下载附件
2020-7-5 20:45 上传


趁着周末还有点时间,发个去广告的教程吧,好像本论坛并没有专门的帖子讲这个方面的内容。我接触安卓逆向时间不长,最多5个月的时间,所以我自己只能写新手教程,不太适合老手/专业工程师看。接触安卓之前倒是玩过upx脱壳什么的,winrar去广告解除锁定什么的我还会,难一点的就不懂了。
穿山甲广告和腾讯广告的去除方法都是个人的经验之谈,因为有些是根据DDMS或者app运行、崩溃记录得出来的结论,你问我为什么要这么搜,我只能说是手机告诉我的这么搜的。当然方法不一定好,如果你有更好的方法欢迎交流。



1 (1).jpg (175.99 KB, 下载次数: 0)
下载附件
2020-7-5 20:53 上传

"



1 (2).jpg (40.43 KB, 下载次数: 0)
下载附件
2020-7-5 20:53 上传

"



1.png (393.7 KB, 下载次数: 0)
下载附件
2020-7-9 15:31 上传

"

现在教程开始,小白新手建议使用MT管理器进行操作,我现在用的是电脑,反编译工具为ApkToolAid,smali编辑器为自带功能,或者使用Notepad++。软件如果是加固的请自行解决,本帖使用的app均已经过处理。
如果是混淆的app请自行解密!


1.png (41.63 KB, 下载次数: 0)
下载附件
2020-7-5 20:58 上传

首先是企鹅广告。

一、腾讯广告修改之去权限:AndroidManifest.xml
方法一针对多数情况下的开屏广告、内置横幅广告。
现在以某款热门软件为例,首先打开apk压缩包,把assets\gdt_plugin下的gdtadv2.jar文件删掉,少数app删掉这个文件以后就没有广告了,但是大多数还是有的。
接着打开AndroidManifest文件,搜索【
qq.e
】,把相关的权限删掉即可,此时80%的app将无法显示广告。


1.png (64.42 KB, 下载次数: 0)
下载附件
2020-7-5 21:15 上传

如图,com.qq.e.comm.DownloadService和com.qq.e.ads开头的都要删掉。
当然你也可以查看app启动顺序,改一下启动界面,看看app是否正常进入。相关教程:https://www.52pojie.cn/thread-1210314-1-1.html、https://www.52pojie.cn/thread-1156372-1-1.html
二、修改dex去腾讯广告
当方法一不适用时,可以使用本方法。比如有权限检查,删掉腾讯广告权限以后出现卡屏白屏、闪退的情况。
方法二针对开屏广告和内置横幅广告。
首先根据权限路径去找
LandscapeADActivity
文件和
PortraitADActivity
文件,删掉图中红框代码。


1.png (89.16 KB, 下载次数: 0)
下载附件
2020-7-5 21:26 上传

让他直接return-void即可。除了这两个文件,ADActivity等都是可以删掉的,即使不禁用、删除权限也是可以达到去广告的目的。
三、修改方法名去腾讯广告
当以上2种方法都无法干掉腾讯广告时,可以尝试第三种方法。比如牛皮癣类型广告,多数置于浏览页内,比如漫画浏览、小说浏览,下滑列表等。
方法三针对顽固横幅广告。
反编译后搜索代码【
.method public loadAD
】,MT管理器上搜索方法名loadAD,凡是方法代码中包含return-void的,都把它放到第一行,不让他继续往下走。有多少个就改多少个,也不多。


1.png (65.38 KB, 下载次数: 0)
下载附件
2020-7-5 21:42 上传

如上图,改成:
[ol]
  • .method public loadAD()V
  •     .locals 1
  •     return-void
  • .end method[/ol]复制代码这种app我是见过的,非常顽固的广告,但是也非常少见。去掉后还有广告空白位置,这时候还需要修改布局文件,现在不讨论这个,用uiautomatorviewer抓一下即可获得布局ID。
    "

    接着是穿山甲广告。

    穿山甲广告在权限里面是com.bytedance开头的,但是删掉没用任何作用,广告也去不掉,好像都没有任何影响……姑且先删掉好了
    穿山甲广告还是比较简单的,首先搜索字符串【
    穿山甲管理员
    】,转换为Unicode是【\u7a7f\u5c71\u7532\u7ba1\u7406\u5458】,MT管理器可以直接搜字符串。如果有字符串加密了需要解密才能搜索。


    1.png (51.07 KB, 下载次数: 0)
    下载附件
    2020-7-5 21:55 上传

    如图,选择只有1个结果的那个文件。打开看看会有什么内容。
    定位到【a(Lcom/bytedance/sdk/openadsdk/a/b;)Z】这个方法。


    1.png (113.92 KB, 下载次数: 0)
    下载附件
    2020-7-5 22:00 上传

    完整的字符串是【
    广告请求开关已关闭,请联系穿山甲管理员
    】,关键代码如下:
    [ol]
  • .method private a(Lcom/bytedance/sdk/openadsdk/a/b;)Z
  •     .locals 2
  •     .line 265
  •     invoke-static {}, Lcom/bytedance/sdk/openadsdk/core/h/j;->a()Z
  •     move-result v0【取值】
  •     if-nez v0, :cond_1【进行判断】
  •     if-eqz p1, :cond_0
  •     const/16 v0, 0x3e8【10进制为1000,不知道这个是干嘛的】
  •     const-string v1, "\u5e7f\u544a\u8bf7\u6c42\u5f00\u5173\u5df2\u5173\u95ed,\u8bf7\u8054\u7cfb\u7a7f\u5c71\u7532\u7ba1\u7406\u5458"
  •     .line 267
  •     invoke-interface {p1, v0, v1}, Lcom/bytedance/sdk/openadsdk/a/b;->onError(ILjava/lang/String;)V
  •     :cond_0
  •     const/4 p1, 0x1【赋值为1时,广告请求开关已关闭】
  •     return p1
  •     :cond_1
  •     const/4 p1, 0x0【赋值为0时,广告请求开关已打开】
  •     return p1
  • .end method[/ol]复制代码如下图,可以查看一下调用,有一堆的结果。if-eqz vA, :cond_*的意思是:如果vA等于0则跳转到:cond_*。所以一旦p1返回的值是0,那么那一堆广告就开始运行了。


    1.png (113.55 KB, 下载次数: 0)
    下载附件
    2020-7-5 22:09 上传

    回到穿山甲管理员的开关,改法如图,删掉红框部分即可。


    1.png (43.56 KB, 下载次数: 0)
    下载附件
    2020-7-5 22:14 上传

    改成:
    [ol]
  • .method private a(Lcom/bytedance/sdk/openadsdk/a/b;)Z
  •     .locals 2
  •     const/16 v0, 0x3e8
  •     const-string v1, "\u5e7f\u544a\u8bf7\u6c42\u5f00\u5173\u5df2\u5173\u95ed,\u8bf7\u8054\u7cfb\u7a7f\u5c71\u7532\u7ba1\u7406\u5458"
  •     invoke-interface {p1, v0, v1}, Lcom/bytedance/sdk/openadsdk/a/b;->onError(ILjava/lang/String;)V
  •     const/4 p1, 0x1
  •     return p1
  • .end method[/ol]复制代码
    此时99%的app已经无法显示穿山甲广告了。
    最后是百度广告

    同qq,先把bdxadsdk.jar删掉,AndroidManifest不用理。样品app为某款天气app,有很多的百度广告和新闻。
    反编译后搜索文件夹【
    com/baidu/mobads/openad
    】的方法名【
    addEventListener
    】,电脑上搜索【
    .method public addEventListener
    】即可。根据DDMS的运行记录来看,完整的方法名是addEventListener(Ljava/lang/String;Lcom/baidu/mobads/openad/interfaces/event/IOAdEventListener;)V,当然不用搜那么长。


    1.png (167.79 KB, 下载次数: 0)
    下载附件
    2020-7-9 15:56 上传

    根据搜索结果打开com/baidu/mobads/openad/c/c这个文件,找到addEventListener这个方法名,直接让他结束即可。当然下面还有一个dispatchEvent和removeEventListener,都是可以直接让他结束掉的,不影响app运行。


    1.png (56.92 KB, 下载次数: 0)
    下载附件
    2020-7-9 16:06 上传

    改成:
    [ol]
  • .method public addEventListener(Ljava/lang/String;Lcom/baidu/mobads/openad/interfaces/event/IOAdEventListener;)V
  •     .locals 2
  •     return-void
  • .end method
  • .method public dispatchEvent(Lcom/baidu/mobads/openad/interfaces/event/IOAdEvent;)V
  •     .locals 4
  •     return-void
  • .end method[/ol]复制代码
    如果还弹出广告这时候应该考虑是app自身的推广广告了,和三大广告商无关。本帖置顶楼层有其它方案,不过“查找重写方法”我估计没几个人知道怎么弄,那个是MT管理器的功能。
    "

    最后是删除/禁用权限引起的app崩溃、卡死问题。

    特别教程一:强删AndroidManifest.xml下的qq广告权限
    现在以软件“活照片”为例进行分析,注意:通用教程只分析qq广告的文件,并不是针对软件定制方法。因为涉及到DDMS的使用和日志分析,过程很麻烦。所以我简化教程直接说结果,适合大部分app。
    该app禁用qq广告权限以后会导致卡屏,但是他不会崩溃。问题根源来自com/huanshi/talkingphoto/LaunchActivity下的fetchSplashAD方法,但是现在我不改那里,当前目的是要把权限删掉而且可以进入app。
    先去下个原版,反编译后搜索com\qq\e路径下的字符串【
    Exception While check SDK Env
    】,qq广告自带的权限检测,80%的app都会调用此处。只有一个结果,定位到【.method public static a(Landroid/content/Context;)Z】。


    1.png (119.56 KB, 下载次数: 0)
    下载附件
    2020-7-6 11:09 上传



    1.png (121.09 KB, 下载次数: 0)
    下载附件
    2020-7-6 11:13 上传

    java代码如上图,可以发现图中的get
    ADActivity
    Name、get
    PortraitADActivity
    Name等就是对应AndroidManifest里面的com.qq.e.ads.ADActivity、com.qq.e.ads.PortraitADActivity等权限。所以直接让该方法返回1即可绕过权限检查。改成:
    [ol]
  • .method public static a(Landroid/content/Context;)Z
  •     .locals 4
  •     const/4 v0, 0x1
  •     return v0
  • .end method[/ol]复制代码
    然后你怎么改AndroidManifest都不会出现卡屏现象了。
    因为该软件属于顽固广告,需要用到方法3去除qq开屏广告。
    特别教程二:强删AndroidManifest.xml下的其它权限
    其它权限比如定位、电话等敏感问题。部分app禁用/删除、拒绝以后会卡死闪退。不找样品app了,本来想找个流氓软件,貌似不好寻找,直接文字描述好了。
    比如某款app,删除了定位权限后FC,代码搜索【
    _LOCATION
    】,结果可能有android.permission.ACCESS_BACKGROUND_LOCATION、android.permission.ACCESS_COARSE_LOCATION等,这些都是定位权限。所在方法直接return-void即可,目的就是不给他检查必要权限。建议用MT管理器进行操作,MT管理器反编译时会有权限说明,一目了然。
    如果还是闪退,这时候需要考虑签名校验问题了。

    广告, 下载次数

  • shaguadou   

    穿山甲还可以搜索字符串:banner广告解析失败,跳转的方法赋值0或空即可
    还有一个百度广告,搜索字符串:URLLoader.Load.Complete,找到getTpye方法,查找重写方法,赋值0或空即可
    xiuquan523   

    各种痔太形象了
    notpasser   


    417788939 发表于 2020-7-6 07:33
    有没有权限检测到app提供?我问了几个人要么没遇到要么忘记了

    我好像遇到过,我找找
    小可爱圆圆   

    感谢分享
    撒呀嘎   

    干货满满
    caleb110   

    感谢分享
    qq354197863   

    感谢分享,这个很好.头次知道穿山甲和三斜杠
    cullenlin123   

    学习啦,多谢分享
    xiuquan523   

    感谢🙏
    您需要登录后才可以回帖 登录 | 立即注册