0x00 软件中的广告

什么是广告?

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

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

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

广告来源

  1. push推送
  2. 第三方SDK

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

广告商与盈利模式

针对Android平台

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

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

盈利模式

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

0x01 去除广告思路

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

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

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

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

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

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

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

0x02 实际案例

准备:

  • 二维码扫描apk
  • Android killer
  • JEB
  • 手机或者模拟器

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

打开界面如下:

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

用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的结果太多,懒得看;这时候还有什么办法呢?

提供几个思路:

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

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

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

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

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

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

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

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

同样搜索关键字AppUpgrade

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

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

结:

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

引申下几点:

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

Android反编译实战-去广告相关推荐

  1. android 反编译 jadx,jadx gui下载 jadx(Android反编译gui工具) v0.6.1 官方版 下载-脚本之家...

    jadx是一款Android反编译gui工具,它支持apk.dex.jar.class.zip.aar等文件.jadx操作方便,反编译后的代码可读性高,同时还拥有较完善的gui界面,除去混淆部分的代码 ...

  2. Android反编译工具的使用-Android Killer

    今天百度搜索"Android反编译"搜索出来的结果大多数都是比较传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比较方便操作的Android ...

  3. Android 反编译整理

    Android 反编译需要用到以下几个工具: Apktool: 这个工具的作用是: It is a tool for reverse engineering 3rd party, closed, bi ...

  4. Android 反编译初探-基础篇

    前言 本文目标: 工具:介绍反编译需要用到的工具 原理:反编译基本原理 实践:替换一个未混淆&未加固apk的启动页面 工具 1.Android Studio 版本:Android Studio ...

  5. Android反编译工具Android Killer

    转载于:http://www.cnblogs.com/common1140/p/5198460.html 今天百度搜索"Android反编译"搜索出来的结果大多数都是比较传统的教程 ...

  6. Android 反编译获取class代码

    转载自:      http://blog.csdn.NET/vipzjyno1/article/details/21039349/ 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开 ...

  7. 微信小程序“反编译”实战(一):解包

    本实践教程将一步步告诉你如何"反编译"获得其它小程序的源代码,包括"解包"和"源码还原"两篇,主要参考了看雪论坛.V2EX.GitHub 等 ...

  8. Android反编译软件(附图详细教程)

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...

  9. 微信小程序反编译得到的是html,微信小程序“反编译”实战(一):解包

    本实践教程将一步步告诉你如何"反编译"获得其它小程序的源代码,包括"解包"和"源码还原"两篇,主要参考了看雪论坛.V2EX.GitHub 等 ...

  10. Android反编译odex然后重新打包

    #Android反编译odex然后重新打包 最近不知道怎么回事,突然把我那刷了氧OS的root了,然后就开始好奇起来氢OS所带有的那些本地化的东西,比如通话录音就是典型的一个之一.其中也做了很多的尝试 ...

最新文章

  1. leetcode算法题--二叉搜索树的第k大节点
  2. 读书笔记之费曼讲义第一册
  3. 一句 Task.Result 就死锁, 这代码还怎么写?
  4. CAP 2.3版本发布,支持 MongoDB
  5. pytorch中切换虚拟环境
  6. java解析excel文件_1.3.1 python解析excel格式文件
  7. 使用jackson对Java对象与JSON字符串相互转换的一些总结
  8. matlab IGBT设置占空比,IGBT的驱动参数说明和计算公式
  9. python如何获取javascript动态产生的数据
  10. this 自引用指针
  11. 变分模态分解(VMD)运算步骤及源码解读
  12. 中文科技核心期刊目录 计算机,中国科技核心期刊目录(2019版)”(“中国科技论文统计源期刊”)...
  13. ZigBee组网实验:多终端节点向协调器发送数据amp;协调器给终端节点发送数据
  14. hive —— 分区表
  15. win7 设置 快速启动栏
  16. JVM:Java内存区域和Java内存模型
  17. 判断用户是否已关注公众号
  18. 每个人都逃脱不了「认知三原色」
  19. name '__file__' is not defined
  20. 码刀客-pandas中将一张表中数据拆分成多个sheet_name

热门文章

  1. ttl备份机顶盒固件_电信盒子华丽变身全网通盒子,电视免费看,备份固件方法详解...
  2. vc6.0处理wps文字
  3. Latex学习笔记 (8) 字体样式之衬线字体与无衬线体字体
  4. 微信小程序全国城市搜索(可进行城市中文拼音首字母搜索)
  5. IOS 本地图片加载
  6. python两台电脑文件传输_两台电脑怎么互相连接传送文件?
  7. 全网最全极限学习机(ELM)及其变种的开源代码分享
  8. java认证,ocjp认证,jdk1.8,全流程介绍
  9. Maven的安装与配置(详细版)
  10. go技术文章精选(2019)