|
把逆向丢了有一段时间了,总觉得有些东西应该坚持研究下去。最近一年在做移动项目的时候一直都想把整个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 |