【散装破文】如何有效率的去除软件广告(二)
有人说需要前三节课程,由于原图已没保存,所以都是直接搬过来的。
散装系列:是以日常实用小技巧所展开的系列
上一节课已经说明了广告的实现原理,并且应该也学会了如何快速定位,但是处理广告手法并不是只有一种。appid在上节课并未演示,所以这次就通过appid处理吧。
这次演示的软件是一款家常菜谱,同样也是从gp下载。
那么开始吧。
本次广告只有一家,就是google自家的,先来看看广告吧。
然而凡接入第三方sdk都必须在AndroidMainfest.xml里进行配置,平常看到的穿山甲广告,快手广告,qq广告等等都是属于第三方广告sdk,所以查看AndroidMainfest也能对软件植入了哪家广告一目了然。
图中的AndroidMainfest里可以看见,圈圈处就是广告的appid,google的都是以ca-app-pub作为开头(具体看google广告的开发手册,上节课已讲过,这节课就不再演示。),至于标记处就是接入广告的配置。
所以只需要将ca-app-pub开头的appid删除掉即可完成移除广告。但是google会对appid进行检测,仅仅删除appid会导致闪退。至此还需要对dex部分进行修改。
在dex里搜索ca-app-pub可以得出3个结果,从下到上逐一看。
第一个是Boolean返回值,比较字符串是否匹配,这里强制让它返回0。
第二个则是返回appid字符串类型,这里直接把红线割掉的那个跳转删除,让它返回一个空白即可。
第三个是一个void,可以直接在方法入口加个return-void即可,不让代码继续往下执行。
当都完成后,就可以安装了。
==============安装中==============
啊~怎么还有广告呀?掉链子了。T.T所有广告都完整的还在,并未去除成功。
既然从AndroidMainfest里只看到一家广告,所以深信着可能是还存在其他的appid,配置里的只是个幌子。
这时选择了对整个包进行搜索,看看是不是哪里漏掉了?可是并未找到相关结果。说明resources.arsc里并没有存放着appid。
那么可以以此推断可能性,可能appid被加密了,又或者appid是通过联网动态加载。有了这些前提的假设,接下来就要再假设开发者可能存放的位置,不外是assest目录里,dex里,网络数据里。
结果从assest里看到了一个名为adConfig的文件,ad开头很明显和广告有关。Config中文意思则是配置,全称就是广告配置。
打开一看,确实经过加密了。要解密吗?不需要,只需要找出哪里调用它就好。
dex里搜索出来的结果只有一个。
它在一个void类型的方法里,那么就别让它读取了,直接在方法入口return-void即可。
经历了千辛万苦之后,总算完成了。再次安装打开。
咦,还有广告T.T 尴尬了。
其实是因为google的广告sdk在初次启动的时候会写入缓存,所以后续修改后会导致看不见效果。只要把缓存清除了重新打开就好了。
此次教学就到这里,效果如图。
第一个是Boolean返回值,比较字符串是否匹配,这里强制让它返回0。
这里为什么强制让返回false呢?看着像是匹配appid格式的函数啊 很详尽的东西,大家学起来 感谢分享
感谢分享,我虽一直很羡慕然,但一直学不会 学习中,感谢分享 感谢分享,不过没学过app开发的我看着有些吃力 最近正好在研究,学习了 那如何把缓存清除呢? 感谢分享,学习一下