趁着周末还有点时间,发个去广告的教程吧,好像本论坛并没有专门的帖子讲这个方面的内容。我接触安卓逆向时间不长,最多5个月的时间,所以我自己只能写新手教程,不太适合老手/专业工程师看。接触安卓之前倒是玩过upx脱壳什么的,winrar去广告解除锁定什么的我还会,难一点的就不懂了。
穿山甲广告和腾讯广告的去除方法都是个人的经验之谈,因为有些是根据DDMS或者app运行、崩溃记录得出来的结论,你问我为什么要这么搜,我只能说是手机告诉我的这么搜的。当然方法不一定好,如果你有更好的方法欢迎交流。
首先是企鹅广告。
一、腾讯广告修改之去权限:AndroidManifest.xml方法一针对多数情况下的开屏广告、内置横幅广告。
现在以某款热门软件为例,首先打开apk压缩包,把assets\gdt_plugin下的gdtadv2.jar文件删掉,少数app删掉这个文件以后就没有广告了,但是大多数还是有的。接着打开AndroidManifest文件,搜索【qq.e】,把相关的权限删掉即可,此时80%的app将无法显示广告。
如图,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文件,删掉图中红框代码。
让他直接return-void即可。除了这两个文件,ADActivity等都是可以删掉的,即使不禁用、删除权限也是可以达到去广告的目的。
三、修改方法名去腾讯广告
当以上2种方法都无法干掉腾讯广告时,可以尝试第三种方法。比如牛皮癣类型广告,多数置于浏览页内,比如漫画浏览、小说浏览,下滑列表等。
方法三针对顽固横幅广告。反编译后搜索代码【.method public loadAD】,MT管理器上搜索方法名loadAD,凡是方法代码中包含return-void的,都把它放到第一行,不让他继续往下走。有多少个就改多少个,也不多。
如上图,改成:
- .method public loadAD()V
- .locals 1
- return-void
- .end method
这种app我是见过的,非常顽固的广告,但是也非常少见。去掉后还有广告空白位置,这时候还需要修改布局文件,现在不讨论这个,用uiautomatorviewer抓一下即可获得布局ID。
接着是穿山甲广告。
穿山甲广告在权限里面是com.bytedance开头的,但是删掉没用任何作用,广告也去不掉,好像都没有任何影响……姑且先删掉好了
穿山甲广告还是比较简单的,首先搜索字符串【穿山甲管理员】,转换为Uniode是【\u7a7f\u5c71\u7532\u7ba1\u7406\u5458】,MT管理器可以直接搜字符串。如果有字符串加密了需要解密才能搜索。
如图,选择只有1个结果的那个文件。打开看看会有什么内容。
定位到【a(Lcom/bytedance/sdk/openadsdk/a/b;)Z】这个方法。完整的字符串是【广告请求开关已关闭,请联系穿山甲管理员】,关键代码如下:
- .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
如下图,可以查看一下调用,有一堆的结果。if-eqz vA, :cond_*的意思是:如果vA等于0则跳转到:cond_*。所以一旦p1返回的值是0,那么那一堆广告就开始运行了。
回到穿山甲管理员的开关,改法如图,删掉红框部分即可。
改成:
- .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
此时99%的app已经无法显示穿山甲广告了。
声明:本站所有资源均由网友分享,如有侵权内容,请在文章下方留言,本站会立即处理。