Android APK静态分析

安装包分析,又称逆向分析,即拿到应用程序的apk文件时,使用一些第三方工具进行反编译、抓包、注入等手段,对应用程序逻辑、数据结构、攻击方式进行分析,常用的分析方法分为静态分析与动态分析

静态分析

在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护等指标的一种代码分析技术,在Android 平台上,静态分析就是分析apk安装包,主要为了了解代码结构,逻辑的流程,修改、插入、去除逻辑,替换修改资源等。

工具

资源逆向工具:AXML_Printer2    Android 设备的一种xml文件编码格式,可以将Axml转化为可读的xml文件的工具

dex2jar、jd_GUI

dex2jar是一个用来将android 的dex文件转化为java类文件的工具,即我们常说的将dex转化为jar

jd_GUI:可以使jar文件的代码、结构、字段都变为java文件,使用者可以方便查看

apkTool:反编译APK文件,得到classes.dex文件,同时也能获取到资源文件以及布局文件。

 

Android 逆向助手(只有windows端)

国人对常用的工具封装得到的,工具包括:apktool、jd_gui、dex2jar、jarsigner等;主要功能有反编译apk、重新打包apk、对apk进行签名、反编译dex、重新打包成dex等。

扫描二维码关注公众号,回复: 9391930 查看本文章

分析dex文件

Dalvik虚拟机是谷歌专门为Android平台设计的一套虚拟机,区别于标准的java虚拟机JVM的class文件格式,Dalvik VM拥有专属的DEX可执行文件格式和指令集代码,smali和baksmali则是针对dex执行文件格式的汇编器和反汇编器,反汇编后的dex文件会产生.smali后缀的代码,smali代码拥有特定的格式与语法,smali语言对Dalvik虚拟机字节码的一种解释。

Dex的生成过程:

java文件 --->> javac编译 ----->>  .class文件 ------>>>  dx编译 ------->>.dex文件

逆向分析离不开Smali语言,本篇文章简单介绍下Smali,会专门写一篇文章来详细介绍Smali语言

Smali是寄存器指令,而java是解释性语言,理论上两者不能作为比较,这里做对比是为了大家能够快速的入门学习,

 

java语法 Smali语法 说明
private boolean is_Flag .field private isFlag:z 定义变量
Package .class 指定当前的类名
  .super 所继承的父类
  .local 定义使用的局部变量
  .method 方法
  .parameter 方法参数
  .prologue 方法的开始
  .line12 此方法位于.java中的第12行(可在混淆文件中去除,去除无影响)
super invokesuper 调用父类函数
  const/high16 v0,0X7fo3 把0x7fo3赋值给v0
  invokedirect 调用函数
  Return void 函数返回void
  .end method 函数结束
  new instance 创建实例
  inputobject 对象赋值
  igetobject 调用对象
  invokestatic 调用静态函数
if(vA==vB) if-eq vA,vB 如果vA等于vB
if(vA!=vB) if-ne vA,vB 如果vA不等于vB
if(vA<vB) if-lt vA,vB 如果vA小于vB
if(vA>=vB) if-ge vA,vB 如果vA大于等于vB
if(vA>vB) if-gt vA,vB 如果vA大于vB
if(vA<=vB) if-le vA,vB 如果vA小于等于vB
if(vA==0) if-eqz vA 如果vA等于0
if(vA!=0) if-ne vA 如果vA不等于0
if(vA<0) if-lt vA 如果vA小于0
if(vA>=0) if-ge vA 如果vA大于等于0
if(vA>0) if-gt vA 如果vA大于0
if(vA<=0) if-le vA 如果vA小于等于0

以上是简短的smali语法,下面我们实战演示下反编译,反编译apk需要的工具:

apktool:反编译APK文件,得到classes.dex文件,同时也能获取到资源文件以及布局文件。

dex2jar:将反编译后的classes.dex文件转化为.jar文件。

jd-gui:用于将.jar文件转换成java代码。

首先确认好软件都已经安装成功,我的是mac电脑,以下操作都是在mac端进行的

①:使用命令chmod +x 分别对apktool和apktool.jar文件进行提权

              //先进入到/usr/local/bin文件夹下 cd /usr/local/bin

chmod +x apktool

chmod +x apktool.jar

②测试是否成功,在/user/local/bin目录下输入:apktool

说明配置成功,

③:把你需要反编译的apk文件也复制到 /usr/local/bin 文件夹下,确保apktool、apktool.jar以及apk文件都在/usr/local/bin目录下,终端输入命令 apktool d xxx.apk回车,等待执行完毕:将dex文件解码为smali

下面就是反编译之后的文件

 

选中的即为smali文件地址。

 

以上两张图即时smali语法与java语法的原始版本,读者可对比着看

 

待续~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

发布了15 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qinggancha/article/details/103280157