开发工具

目前常用android studio进行安卓代码开发和调试,开发好一个安卓程序后一般会在虚拟机和真机上进行功能测试。
打包后代码一般是以为apk作为后缀,英文名为Android application Package。apk文件中包含了二进制代码,资源文件,配置文件等。他可以使用解压工具进行解压。

我们以一个简单的hello程序来看看解压apk后的文件是怎么样的。

这是一个apk文件

android 逆向安全问题 什么是安卓逆向分析_android 逆向安全问题


把他后缀名修改为.zip然后进行解压。如下

android 逆向安全问题 什么是安卓逆向分析_大数据_02

下面来说明一下各个文件的用途:

  • AndoridManifest.xml
    安卓程序必要文件,他描述了应用的名字,版本,权限等文件。
  • res目录
    存放一些图片等资源文件的地方
  • META-INF目录
    存放一些应用的签名信息等,保证应用的完整性。
  • lib目录
    存放一些程序依赖的native库,一般是c++编写的so文件。跟进cpu不同存储于不同的目录。
  • resources.arsc
    存储编译好的资源,包括项目工程中的res/values目录里的xml文件,它们都被编译成二进制格式
  • classes.dex
    项目中的java类都被编译到该dex文件

安卓分析过程

首先来看下安卓打包原理。这里主要侧重于java代码的编译。
普通的java文件一般由.java后缀命名,通过java编译器编译成.class文件字节码文件,然后通过java虚拟机来进行执行,目前主流java虚拟机为hotspot. 而安卓程序一般编译成dex文件,然后运行在Dalvik虚拟机上,所以我们上面看到的文件结构是classes.dex.
因此如果需求分析别人编译好的文件一般需要通过一些工具把dex文件转换成jar文件。

常用流程
  1. 通过dex2jar工具把dex文件转换成jar文件
  2. 通过jd-gui工具把文件导进来查看源代码文件
便捷流程,jadx-gui

jadx-gui工具是个可以快速反编译安卓apk包的工具,

直接把apk文件拖拽进来后就可以把文件的源码反编译出来,同时还可以把资源文件等反编译出来。他支持apk,dex,jar,aar等文件进行源码查看。比上述组合简单。我们看看jadx-gui反编译的文件结构。

android 逆向安全问题 什么是安卓逆向分析_资源文件_03

可以看到,直接可以查看文件源码进行分析。

调试反编译后的文件

一般可以有两种方式来调试反编译后的方式

  • 调试smali代码,重新打包编译
    前面提到安卓程序是打包成dex文件的,运行在Dalvik虚拟机上,而我们反编译后的java代码是提供查看,不能修改的。想要修改的话,需要反编译出smali代码。smali语法是一种特定的
  • 通过hook工具来动态修改程序运行过程中的数据
    这种方式一般是通过查看源码,然后看看有哪些是可能是目标代码,通过劫持运行,修改内容达到影响程序运行目的。