
背景
目标应用: 一款网络摄像头工具,家里人经常用来查看摄像头,但是软件中塞了一大堆牛皮癣广告。
广告行为: 开屏广告,热点区域广告,摇一摇跳转,关闭按钮不方便点击且容易误触广告,各种坑老陷阱。
软件中的广告还会区别对待新老用户:

实战
定位广告来源
首先定位广告来源,反编译出来的代码没有混淆,直接搜索关键字就可以定位到开屏广告的位置。
这里向上追一下调用关系,查到是从 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 了,然后尝试打包签名并运行,但是应用启动后闪退了。
用 logcat 查看下闪退的代码位置 adb logcat -c && adb logcat -s AndroidRuntime:E
---------beginningofcrash08-10 17:45:51.946 15265 15281 E AndroidRuntime: FATAL EXCEPTION:Thread-208-10 17:45:51.946 15265 15281 E AndroidRuntime: Process:com.***.***,PID:1526508-10 17:45:51.946 15265 15281 E AndroidRuntime: java.lang.RuntimeException:entryclasses6.dexistamper08-10 17:45:51.946 15265 15281 E AndroidRuntime:atcom.security.shell.V5App$31.v(NativeMethod)08-10 17:45:51.946 15265 15281 E AndroidRuntime:atcom.security.shell.V5App$1.e(UnknownSource:11)08-10 17:45:51.946 15265 15281 E AndroidRuntime:atcom.security.shell.V5App$31.v(NativeMethod)08-10 17:45:51.946 15265 15281 E AndroidRuntime:atcom.security.shell.V5App$1.run(UnknownSource:8)08-10 17:45:51.946 15265 15281 E AndroidRuntime:atjava.lang.Thread.run(Thread.java:1563)搜了下关键字 com.security.shell.V5App, 软件采用的是顶象加固,接下来准备进行脱壳,但是通过反编译的代码分析发现 dex 代码并没有用壳加固,所以直接改掉 AndroidManifest.xml 中的 application 配置。
这里的 appComponentFactory 也要一起改掉:
然后重新打包,签名,安装,软件启动成功,广告也正常关闭,ok

总结
总体来说整个过程还是比较顺利的,先定位广告来源,分析展示逻辑并 nop 掉,过签名校验,替换加固代码入口,重打包。因为整个操作都是在 Java 层,而且应用本身就有关闭广告的逻辑,所以基本上是没有什么难度的,最终也是成功实现了去广告的效果。(没有经过混淆的代码看起来真的是太舒服了)
本文仅用于软件逆向分析与技术经验分享,旨在探讨移动应用的实现原理及相关技术。
文中涉及的应用名称、关键参数、接口信息、代码及其他敏感内容均已进行脱敏或适当处理。本文内容仅供学习、研究和技术交流使用,请勿将相关技术用于侵犯他人合法权益、破坏软件正常运行或其他违法违规行为,由此产生的任何后果与本文作者无关。
如涉及相关软件的合法权益,请联系作者进行处理。

看雪ID:xtyuns
https://bbs.kanxue.com/user-home-899246.htm

# 往期推荐
从 r0capture 到 eCapture:Hermes Agent 自动抓包在真实任务里的价值
Kali 下 Android Studio 无法输入中文的问题排查与解决


球分享

球点赞

球在看

点击阅读原文查看更多
夜雨聆风