android逆向分析:如何去广告

把逆向丢了有一段时间了,总觉得有些东西应该坚持研究下去。最近一年在做移动项目的时候一直都想把整个android底层了解清楚。

直到最近有点时间空余下来。一段时间后发现android的芯片ARM的ARM汇编和x86的16,32位汇编其实原理是相通的,只是可能在语法 在硬件结构上会导致有差别。(虽然这篇文章并用不到这种东西),而相比于android的Dalvik虚拟机代码,Dalvik机器码更便于阅读。只要好好记住Dalvik的一些规则便可。

然后我们从简单的逆向开始吧。这篇我会拿一个有广告的android应用来试手,当然原理本身非常简单,当然并没有针对的意思,下面是一个简单的使用逆向技术而修改程序的过程:

使用到的工具:IDA,C32ASM,JD-gui,Notepat++,apktool,android签名工具。

需要做手术的应用:某事百科。

可能比较多的人知道这款应用,这款应用拥有很大的阅读量和装机量,所以这款应用的广告非常走俏。(我后来发现它接了8家左右的广告商。)

我们可以看看有广告的时候的截图:

显然在屏幕下面有百度联盟的广告。很多广告一点击就会后台自动下载。在wifi环境下肯定没什么 但是在GPRS或者其他算流量的环境下就显得很拙计了。

回归问题:

1.获取有用的信息

就目前我们看到的界面和点击不同的广告查看程序运行情况和打开eclipse查看log能获得到的信息是,

A.广告显示在屏幕下方(x,y坐标应该会有一个范围)

B.调用webkit,经验来说这个广告框应该是一个view。

C.广告类型 有的点击下载 有的点击跳转。

D.从广告角标看 肯定有百度移动广告联盟。

这些信息有什么用?当然有用,例如:

知道A 肯定就能定位搜索了,

知道B就可以大概知道调用流程,

知道C就大概可以猜测如何调用,(android打开网页,android后台下载 等原理),

知道D就连广告相关源码库的都知道,百度广告联盟的SDK是对外开放下载的。也就是说某事百科接入了百度广告联盟。而我们能轻而易举的获取百度广告SDK,并且获取他的调用流程 这点很重要。知道这点可以直接定位这款应用的启动广告位置了。

2.查看反编译代码

A.这里使用的工具是JD-gui。使用JD-gui打开发现此程序源码结构如下:

可以清晰的看到百度广告联盟SDK源码。

到这里我们非常确认这个程序接入了百度广告,为了了解百度广告的调用方法

我们直接去百度官网下载SDK和DEMO看个究竟:http://munion.baidu.com/about.htm#download

把SDK下载到本地后查看demo。在demo源码中可以看到调用百度的样板代码,

然后你会发现果然是一个View。这里就可以知道逆向在很多时候实际的开发经验是最重要的。

在JD-gui中查看其他代码 从类的命名上看 很轻易的能看到一个叫做AdViewAdRegistry的类。

虽然光看名字不能确定这个类有什么实际作用,

但是看类的名字应该是:广告视图注册。

猜测应该就是这款软件广告显示的核心类了。光猜没有用,我们打开看看会发现,

在这个类里面异常嵌套了8个类,从这个8个类名字很容易发现百度就在里面。我们先把这个类改了 看看是否能去掉广告。

3.定位了关键点后修改原流程

A.这里使用的是IDA定位代码位置。

用IDA打开解压出来的dex文件。在export的地方搜索AdViewAdRegistry,会显示如下流程结构图:

 

一个清晰的try循环结构。

我们直接把这个结构修改了,在一进入就return掉。

定位代码位置方法:

使用IDA鼠标停留到代码入口,然后切换到二进制视图。会显示一个地址,

我本机的是:001CEB88

B.使用C32ASM打开classes.dex文件。

二进制方式打开后,找到0x001CEB88。

如图:

把前两字节 71 10 修改为 0E 00.

为什么修改为0E 00?

我们知道return的机器码是:0E

所以 0E 00 的意思 就是 return;

然后保存文件,把dex文件修复后重新放回apk中,然后使用android工具签名,安装打开后发现广告已经去掉了。

如此遍实现了android程序去广告的目标,其实这个程序去广告本身非常简单,只是这个流程,从拿到程序 到 修改 这个过程在这里写出来。

这个过程就是逆向工程的一般流程了。

白盒分析-反编译分析-定位关键代码-修改文件-修复文件-运行

-EOF-

《android逆向分析:如何去广告》有3个想法

  1. 抱歉我并没有做过谷歌内购,不过网上应该有很多分享,遇到什么问题随时可以留言讨论.@鱼鱼

  2. 学习一下,以前修改apk都是通过资源文件的,能做的太有限了,还经常出错。
    大神居然也看糗事百科,可否把去掉广告之后的apk分享一下?

发表评论

邮箱地址不会被公开。 必填项已用*标注