守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 1152|回复: 0

[Android平台安全] android逆向分析:如何去广告

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51723
    钢镚
    1422

    开源英雄守望者

    发表于 2015-1-19 10:25:57 | 显示全部楼层 |阅读模式

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

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

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

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

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


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

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

    [/url]显然在屏幕下面有百度联盟的广告。很多广告一点击就会后台自动下载。在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打开发现此程序源码结构如下:

    [url=http://shadowkong.com/wp-content/uploads/2014/01/baike003.jpg]可以清晰的看到百度广告联盟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,会显示如下流程结构图:

    [/url]


    一个清晰的try循环结构。

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

    定位代码位置方法:

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

    我本机的是:001CEB88

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

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

    如图:

    [url=http://shadowkong.com/wp-content/uploads/2014/01/baike005.jpg]把前两字节 71 10 修改为 0E 00.

    为什么修改为0E 00?

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

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

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

    [/url]

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

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

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





    本文来自:[url]http://shadowkong.com/archives/1533

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-9-24 16:56 , Processed in 0.046342 second(s), 36 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表