从零开始实现微信抓取
本篇内容主要从实现微信抓取来讲述如何在Android平台来逆向APP。这篇文章主要面向刚接触逆向工程,同时又对逆向有迫切实际需求的同学,让其少走弯路,有迹可循;避免篇幅太长,内容过于初级,本文不会从gi的使用t,linux基本命令一一赘述。
如有表述不当或纰漏之处,欢迎指正。
背景介绍
一年前,在工作中,有做数据抓取的同学找到我问,能不能帮他们实现从客户端来抓取微信的消息,甚至是帮他们实现一些特定的功能需求。秉着乐善好施的为人基本准则,Zoe当然是一口答应,此等小事,不在话下,下周一过来拿PoC方案。
既然夸下海口,那Zoe也只能周末加班加点,来研究微信的逆向工作,还在Android的逆向在当下也算趋于成熟,有不少可用的方案和框架,再加上抓取同学的需求也只是集中在数据的获取,所以几天的时间还是足够充裕的。
由于这篇文章Zoe主要是从实际操作出发,所以不会提前介绍「Reverse Engineering」相关的知识,不过但凡涉及基础知识点的地方,Zoe都会一一点明,还忘各位同学及时补充相关知识。
确定安装包
这里很简单,我们需要确定一个版本的安装包来做为我们研究的对象,或者说是作为以后使用的主要对象。其原因是Android的资源在不同版本中是有不同的ID,大多情况下我们需要使用这些ID来确定我们要使用的资源,比如按键的点击等等。
这里,我们第一考虑的不是其对逆向工作的难易程度,而是先确认所选的安装包能不能满足业务的基本使用,以及会不会存在其他风险。比如选了一个很老的微信版本,他根本就不支持扫描二维码,那我们抓取同学的业务需求就跟本没法满足。
另外,我们还需要选择当下最新的版本,主要可避免升级提示带来的麻烦,同时最大的原因可以增加开发工作的存活有效期,越老的版本,其不能正常正常使用的风险也就越高。
这里微信以6.5.14版本为例来展开后续工作。
脱壳/解压APK
一般情况下我们的APK会被加壳,这是软件安全的一般手段,其目的就是让软件的真是执行代码不易直接被看到。这一这里是不“易”而不是不“能”,也就说,加壳并不能完全阻止其他人的恶意行为。
我们使用apktool工具讲APK解压并转换成smali代码,smali是一种JVM运行的机器码,这也将是我们之后工作的主要研究对象。
使用如下命令将APK解压,很幸运微信这个版本并没有加壳,当然了之前的版本也没有,
待上述命令执行完毕,我们得到如下结构的代码目录,
这基本等同于微信的源码了,我们的主要工作也将从此处展开。