安装包分析,又称逆向分析,即拿到应用程序的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等。

分析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语法的原始版本,读者可对比着看

待续~

Android APK静态分析相关推荐

  1. Android APK 静态分析与动态分析

    Android沙盘原理与实现 作者:riusksk(泉哥)[ TSRC ]公布时间:2012-10-15阅读次数:17496评论:1 分享 [作者]:riusksk(泉哥) [团队]:腾讯安全应急响应 ...

  2. 详解APK静态分析引擎`quark-engine`的5大功能

    1. 引入 2020年8月,在DEFCON 28大会上(参考3),发布了一个开源的"Android malware analysis engine",名字叫quark-engine ...

  3. 电子数据取证之Android APK分析

    都是比较基础的知识,目的是做学习记录,有不足之处欢迎指正. 一.Android APK概念 APK (Android application package)指 Android 应用程序包,是 And ...

  4. Android APK加壳技术方案----代码实现

    本文章由Jack_Jia编写,转载请注明出处. 文章链接:http://blog.csdn.net/jiazhijun/article/details/8746917 作者:Jack_Jia    邮 ...

  5. Android APK的签名--笔记版 V1 签名和V2签名总结

    1. 工具介绍 jarsigner 是JDK提供的针对jar包签名的通用工具, 位于 JDK/bin/jarsigner apksigner 是Google官方提供的针对Android apk 签名验 ...

  6. 对 android apk 进行重新签名操作

    注:如何进行 android apk 的签名,不是本文主要内容,如需了解签名先关步骤,可以参考我的以下这篇文章. 地址:http://www.cnblogs.com/LuQingshang/p/392 ...

  7. 【转】Android APK反编译就这么简单 详解(附图)

     转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 分类: and ...

  8. Visual Studio 2017为Android APK包签名

    Visual Studio 2017为Android APK包签名 为Android APK包签名,可以保证后期的App顺利升级.在Visual Studio 2015中,IDE会自动生成两个APK包 ...

  9. android+apk+反编译和再签名打包,Android:apk反编译步骤,打包、签名和逆向工程经验总结...

    思路一.apktool1.通过apktool反编译出资源和smaliapktool d MobileManager.apkF:\Android\decompile\apktoolapktool d M ...

最新文章

  1. TCP三次握手与四次断开
  2. win10下安装tensorflow-gpu==1.11.0的详细教程
  3. oracle索引自增函数,oracle生成动态前缀且自增号码的函数分享
  4. 个人作业5——软件工程总结
  5. java技术分享主题_Java开发入门:适合新手练手的Java项目(附源码下载)
  6. java jndi tcp_spring配置下通过tomcat的jndi服务连接数据库
  7. python解析sql文件_如何从Python中解析sql文件?
  8. 小心使用IOCP完成端口
  9. android 开发赚钱
  10. SqlServer表中两条全然同样的记录,怎样删除当中1条
  11. 字典哈希表的实现原理
  12. 全网最全的 Java 技术栈内容梳理(持续更新中)
  13. Jaspergold形式验证-vhdl语言
  14. 在职研究生论文如何查重?
  15. memcached入门使用
  16. 前端SPA(single page web application单页面应用not水疗)
  17. sim函数 matlab输出,关于MATLAB里sim函数?
  18. 2020中科大大数据学院 计算机专硕
  19. Web3 全栈开发指南
  20. png图片与svg图片的转换----icon图标的制作

热门文章

  1. Learn Golang
  2. 进军python——与@龟叔握手
  3. php函数substr、mb_substr、mb_strcut截取中文比较
  4. 宝塔Nginx负载均衡
  5. Three.js地球开发—4.Three.js渲染场景保存成贴图
  6. 进入固定资产卡片管理双击卡片后提示“null无效
  7. 微服务之服务注册与发现--Eureka(附代码)
  8. 时间序列 - 论文笔记本
  9. Arcgis制图之填充图框制作
  10. 【一步步学OpenGL 7】 - 《旋转变换》