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等。
分析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静态分析相关推荐
- Android APK 静态分析与动态分析
Android沙盘原理与实现 作者:riusksk(泉哥)[ TSRC ]公布时间:2012-10-15阅读次数:17496评论:1 分享 [作者]:riusksk(泉哥) [团队]:腾讯安全应急响应 ...
- 详解APK静态分析引擎`quark-engine`的5大功能
1. 引入 2020年8月,在DEFCON 28大会上(参考3),发布了一个开源的"Android malware analysis engine",名字叫quark-engine ...
- 电子数据取证之Android APK分析
都是比较基础的知识,目的是做学习记录,有不足之处欢迎指正. 一.Android APK概念 APK (Android application package)指 Android 应用程序包,是 And ...
- Android APK加壳技术方案----代码实现
本文章由Jack_Jia编写,转载请注明出处. 文章链接:http://blog.csdn.net/jiazhijun/article/details/8746917 作者:Jack_Jia 邮 ...
- Android APK的签名--笔记版 V1 签名和V2签名总结
1. 工具介绍 jarsigner 是JDK提供的针对jar包签名的通用工具, 位于 JDK/bin/jarsigner apksigner 是Google官方提供的针对Android apk 签名验 ...
- 对 android apk 进行重新签名操作
注:如何进行 android apk 的签名,不是本文主要内容,如需了解签名先关步骤,可以参考我的以下这篇文章. 地址:http://www.cnblogs.com/LuQingshang/p/392 ...
- 【转】Android APK反编译就这么简单 详解(附图)
转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 分类: and ...
- Visual Studio 2017为Android APK包签名
Visual Studio 2017为Android APK包签名 为Android APK包签名,可以保证后期的App顺利升级.在Visual Studio 2015中,IDE会自动生成两个APK包 ...
- android+apk+反编译和再签名打包,Android:apk反编译步骤,打包、签名和逆向工程经验总结...
思路一.apktool1.通过apktool反编译出资源和smaliapktool d MobileManager.apkF:\Android\decompile\apktoolapktool d M ...
最新文章
- TCP三次握手与四次断开
- win10下安装tensorflow-gpu==1.11.0的详细教程
- oracle索引自增函数,oracle生成动态前缀且自增号码的函数分享
- 个人作业5——软件工程总结
- java技术分享主题_Java开发入门:适合新手练手的Java项目(附源码下载)
- java jndi tcp_spring配置下通过tomcat的jndi服务连接数据库
- python解析sql文件_如何从Python中解析sql文件?
- 小心使用IOCP完成端口
- android 开发赚钱
- SqlServer表中两条全然同样的记录,怎样删除当中1条
- 字典哈希表的实现原理
- 全网最全的 Java 技术栈内容梳理(持续更新中)
- Jaspergold形式验证-vhdl语言
- 在职研究生论文如何查重?
- memcached入门使用
- 前端SPA(single page web application单页面应用not水疗)
- sim函数 matlab输出,关于MATLAB里sim函数?
- 2020中科大大数据学院 计算机专硕
- Web3 全栈开发指南
- png图片与svg图片的转换----icon图标的制作