Android反编译实战 您所在的位置:网站首页 去除安卓软件广告的方法 Android反编译实战

Android反编译实战

2024-06-30 17:58| 来源: 网络整理| 查看: 265

0x00 软件中的广告 什么是广告?

任何与软件本身无关的内容都属于广告;

广告的表现形式很多,有的时候是一个界面(activity),有的时候是局部在上方或下方的一个区域视图(view),有的时候可能是工具条(toolbar),也可能是一个对话框(dialog)里出现广告内容。

但是看到的并不一定是表现出来的;有时候看到的区域视图、对话框、工具条都有可能是一个activity。

广告来源

push推送第三方SDK

广告常见的就是push推送广告,这也就要求了在配置清单xml 中,需要声明必要的service 和receiver,同时还应要求有pushid。推送广告内容基本都是来源于广告服务商的服务器。另一方面,注入的第三方SDK,只需要添加个人注册的id,便可以实现盈利,同样广告内容来源于广告服务商。

广告商与盈利模式

针对Android平台

国内常见广告商:友盟、腾讯、有米、百度等

国外常见广告商:Facebook、Admob等

盈利模式

商家投放广告->广告商平台->开发者编写应用嵌入广告商提供的SDK->用户点击、用户消费->商家获益->广告商平台获益->开发者获益

 

0x01 去除广告思路

广告去除的基本原理与思想

上述已经说明,无论怎样形式、怎样来源的广告,在本地一定需要一个容器去当作广告内容的载体,如果可以把容器去除掉,那么就完成了去广告。

广告的容器就是一些界面、视图等,以往课程已经说过,对于页面,即可以利用静态的布局,也可以在代码中动态生成。

根据上述理论知识,思路就可以分为以下两个方向:

对于简单的静态布局编写的广告界面,我们可以直接从配置清单xml文件,或相应的布局xml文件入手;对于复杂的,也就是已经形成了第三方SDK的,可能配置清单xml文件难以处理,或即使处理了相关的xml文件依然存在广告,或采用动态编写和检测,广告页面循环出现等等问题,我们采用从代码逻辑上入手。

根据思路进行的操作大概如下:

通过删除配置清单Androidmainfest. xml文件关于广告界面的相关声明,来去除广告页面。广告在代码中往往出现较早,一般会在入口点的oncreate()方法处注入,我们分析代码逻辑,让广告页面不出现,或删除动态生成广告页面的代码。另外,任何拥有广告的软件,一定会有自己的广告消失方法,找到后进行自行调用。同理,如果采用了动态代码生成广告页面,在拥有创建相应页面视图的方法同时,一定会有关闭、隐藏广告页面的方法,找到方法,然后在创建时就调用,这就可以做到,刚刚创建就进行关闭和隐藏由于广告以push广告为主,如果删除对应的pushid,那么特别对于第三方广告商的广告,是无法识别该广告的推广者或推广内容是什么,那么就不会给广告拓展:因为推送广告内容基本都是从网络获取的,如果截断了这条路,如把获取广告的IP地址改为127.0.0.1,那么本地没有广告内容,也就不会有广告。

 

0x02 实际案例 准备: 二维码扫描apkAndroid killerJEB手机或者模拟器

去广告目标:一个自己常用的工具:“二维码扫描”;

打开界面如下:

 

每次打开都有广告,很烦;

 

用Burpsuite抓包查看广告来源(这时候会遇到各种抓不到的情况,应对的方法也很多,我这个目标是个简单的应用,直接用Burpsuite就抓到了)

打开应用抓到五个数据包,查看这几个数据包发现广告来自第二个;

重放第二个数据包,

 

分析数据包,查看链接,确定为广告的来源;

http://pgdt.gtimg.cn/gdt/0/DAAUZSFAKAAPAABgBa10d4DzY5_9VS.jpg/0?ck=896de5f38d9a9f831bee6a75c669297e

 

在Android killer中搜索mi.gdt.qq.com、gdt_mview.fcg;即使分开单个关键词搜索也一无所获;但是可以看到返回来的数据为json格式,并不是h5的广告也不直接是图片,应用还需要对json数据进行处理,这里转换思路寻找处理的函数,将处理的结果修改为return空值,这样就不会返回广告了。

继续在Android kill中搜索关键字getAd,Ad,结果如下,看了下getAd的结果,也没有什么发现;Ad的结果太多,懒得看;这时候还有什么办法呢?

 

提供几个思路:

分析数据包的相关参数;查看logcat日志;继续硬着头皮分析代码的执行流程;(静态分析、动态调试)

回到数据包那里,继续看其他参数,发现一个posid,猜测此id的作用是通过此id访问广告,从而统计并结算收益,搜索8060013973605191,结果如下:

 

 

分析代码,这里如果看不懂smali的话,可以借助JEB来分析,可以查看谁调用了a(),同样的,如果查看logcat日志,当广告出现,点击广告或者跳过广告等操作是也是可以定位到这里。

此时,尝试删掉posid的值,再访问看会出现什么结果,

这样返回来的数据就没有可以访问的广告链接,这样就没有广告了;

 

说干就干,修改、保存、编译、签名、安装、打开,

真的没有广告了,但是还有一个升级提示,也很烦;

 

其实这个升级的查询就在应用打开时的第五个数据包中,

 

同样搜索关键字AppUpgrade;

 

相同操作,打包完后就ok了。

再次打开广告没了,升级提示也没有了,舒服.

 

结:

简单介绍了下Android去广告的思路和一个简单案例,当然因为此次目标的APP相对简单,不存在混淆、加壳、反调试等加固手段,然后这篇文章也是APP对抗最原始和最早的方法,思路不仅适用与去广告,也是早期黑灰产的常用手段,如内购、破解、恶意脚本等。

引申下几点:

灰产会怎么利用?(批量修改,将广告改为自己的,从中获利)如果应用对完整性做了验证,重打包后自动退出或者不能正常使用,还有什么方式去广告?(同样的分析方式绕过验证,或者利用Xposed,HOOK对应需要修改的值,前提是需要ROOT权限和会Xposed插件开发)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有