-
-
[原创]某网络摄像头软件去广告
-
发表于: 9小时前 174
-
本文仅用于软件逆向分析与技术经验分享,旨在探讨移动应用的实现原理及相关技术。文中涉及的应用名称、关键参数、接口信息、代码及其他敏感内容均已进行脱敏或适当处理。
本文内容仅供学习、研究和技术交流使用,请勿将相关技术用于侵犯他人合法权益、破坏软件正常运行或其他违法违规行为,由此产生的任何后果与本文作者无关。
如涉及相关软件的合法权益,请联系作者进行处理。
目标应用: 一款网络摄像头工具,家里人经常用来查看摄像头,但是软件中塞了一大堆牛皮癣广告
广告行为: 开屏广告,热点区域广告,摇一摇跳转,关闭按钮不方便点击且容易误触广告,各种坑老陷阱
软件中的广告还会区别对待新老用户:

首先定位广告来源,反编译出来的代码没有混淆,直接搜索关键字就可以定位到开屏广告的位置

这里向上追一下调用关系,查到是从 AndroidManifest.xml 中的 LauncherActivity 开始的,那广告入口就是这里


接下来就分析下广告展示逻辑并跳过它

可以看到这里有广告开关,看一下怎么切换到免广告

这是 AdControl.sFreeAd 控制的新用户免广告,再看一下另一个条件

看起来是个软件广告总开关,往后追了一下,这里是个开发者的后门控制开关

那就直接选择从这里入手去广告,先看一下 smali

直接让 906 行的条件判断进入 sThirdAdType = 0; 的代码块即可, 所以在 905 行插入一行 const/4 p0, 0x1 把 p0 寄存器强制改为 true,效果如下

这样就可以达到目的了
接下来重新打包软件并签名,所以要先处理一下签名校验问题,通过反编译的代码可以看到这里有个检验的逻辑

在每次 activity 的 onCreate 中触发 appVerification 方法,这里也是有开关控制的,而且是编译期常量

所以这里还是继续改 smali

这里把 sput-boolean v0, Lcom/macrovideo/sdk/GlobalConfiguration;->sIsSignatureVerification:Z 的 v0 寄存器改为 v1 即可

把 sIsCheckRoot 也一起改为 false 了
然后尝试打包签名并运行,但是应用启动后闪退了