APP去广告简单分析:
工具:
Android killer 1.3
DDMS (版本未知)
夜神模拟器
在游戏登录和注册页面,我们可以看到登录界面中被别人插播了广告,本文的目的就是将其去掉。
思路分析:
1.如果该广告是读取资源中的图片加载到对话框(或者其他控件)的话,我们只需要替换一张新的图片进去,重新打包签名即可。
2.如果不是加载的本地资源,那么就是从网络传输过来的一个图片,然后加载
过程:
拖到android killer进行反编译:
在资源文件中一番查找过后,在res/drawable-hdpi-v4 文件夹中查看到跟log一样的图片
尝试第一种方法,新建一个空白的图片在资源管理器里进行替换:
使用android killer重打包:
将apk拖到模拟器进行安装,接着运行:(注意:安装apk前需要卸载原有的apk,如不卸载原有的apk,该包名已存在,不能覆盖安装)
Log还存在,说明这个log应该是通过网络传输进行动态替换的,既然是动态替换,那么首先要确定的是该图片是加载在什么控件上面的,这样才能够准确的找到加载的图片的函数;
这个时候,我们就可以借助DDMS中的 Dump View Hierarchy for UI Automator(以下简称Dump UI) 功能去得到布局的属性,如下图: 在虚拟机打开改程序的登录界面,使用ddms点击dumpUI 获取到布局属性(如下图),得到图片是设置在imageView上面的,并且资源id为iv_logo ,
接着到android killer 进行搜索,搜索到两处引用了该id的地方:
双击到关键代码处,使用jd-jui查看源码:
查看源码关键代码分析出handleMessage函数大概功能为:
由外部传消息进来,进行判断并执行:
消息1:设置本地资源文件中的图片为背景(drawable/ct)
消息0:获取一个网络的图片
消息(其他):设置paramAnonymousMessage.obj为背景
大概加载的过程就是,先获取网络图片,然后getInternetPicture函数再发送(其他)消息(case没有定义2,所以2为其他消息)到handleMessage函数设置背景
getInternetPicture函数:
发送网络请求,获取图片资源;
通过发送消息的方法设置控件背景(广告图片)
查看另一点关键点,其中代码跟与上面基本一致,可判断为注册页面的加载代码,这里不再做重复性的解释。
getInternetPicture函数:
分析至此,我们已经大概明白了广告图片的一个加载流程了,接下来把广告去掉
思路:修改smali代码将getInternetPicture和函数直接RET,获取不到网络图片,这样加载的就是我们本地的“ct”图片为背景了
LoginView处添加smali代码:
RegisterView处添加RET代码
使用android killer重打包:
拖到模拟器中运行确认结果:
登录界面:
注册界面:
Ok,测试成功,广告成功被干掉了!!
笔者还有点想说的是:在中间使用Dumu UI工具查看到布局信息的时候,其实我们还可以在布局XML文件中修改该控件的大小,以达到隐藏的作用,不过那样子后面的控件位置就会发生问题,如果没有这个方面的要求,修改XML文件更加神速