Android安全与逆向分析

Android安全与逆向分析
Android安全的重要性已无需多言,自从2017年各大主流加固采取vm化代码,加之各厂商的协议越来越底层和采用证书,更越发重视服务器的风险控制安全保障,对安卓软件和安卓系统的渗透测试已成为火热课题。

安卓逆向目录:
1.环境搭建
2.APK文件结构
3.APK打包流程
4.APK安装流程
5.APK反编译与回编译
6.编程语言 Java C/C++
7.虚拟机
8.Dalvik字节码
9.smali文件
10.快速定位关键代码

常用工具:
JDK/SDK/NDK
eclpise集成开发环境/Android Studio
AndroidKiller/jeb/jadx / GDA/Androidk逆向助手
IDA/GDB
apkhelper/getsign/APK上上签
模拟器(雷电、海马玩等)
MT管理器/RE文件管理器

工具安装注意事项:
1.jdk安装路径中不能有中文
2.ndk的配置路径中不能有中文和空格,可以把它放在根目录
3.安装包文件不全,运行会出错
4.没有配置环境变量可以按住shift+右键=>”在此处打开命令窗口”选项
5.ndk安装正确的提示
D:\android-ndk-r10e>ndk-build
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
D:\android-ndk-r10e\build/core/build-local.mk:143: *** Android NDK: Aborting. Stop.

APK文件:
APK是Android Package的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。

APK文件目录:
assets 不经过 aapt 编译的资源文件
lib .so文件
META-INF 文件摘要,摘要加密和签名证书文件目录
CERT.RSA 公钥和加密算法描述
CERT.SF 加密文件,它是使用私钥对摘要明文加密后得到的密文信息,只有使用私钥配对的公钥才能解密该文件
MANIFEST.MF 程序清单文件,它包含包中所有文件的摘要明文
res 资源文件目录,二进制格式
drawable 图片
layout 布局
menu 菜单
resources.arsc 经过 aapt 编译过的资源文件
classes.dex 可执行文件
AndroidManifest.xml 配置文件

APK打包流程:
打包资源(res/assets/AndroidManifest.xml/Android基础类库)文件,生成R.java和resources.ap_文件
处理AIDL文件,生成对应的.java文件
编译Java文件,生成对应的.class文件
把.class文件转化成Davik VM支持的.dex文件
.java=>.class=>.dex
打包生成未签名的.apk文件
对未签名.apk文件进行签名
对签名后的.apk文件进行对齐处理

APK安装流程:
1.安装方式
系统程序安装
通过Android市场安装
ADB安装
手机自带安装
2.安装过程
复制APK安装包到/data/app目录下,解压并扫描安装包,把dex文 件(Dalvik字节码)保存到/data/dalvik-cache目录,并/data/data目录 下创建对应的应用数据目录。
3.安装后文件所在目录
/system/app
系统自带的应用程序,获得adb root权限才能删除
/data/app
用户程序安装的目录,安装时把apk文件复制到此目录
/data/data
存放应用程序的数据
/data/dalvik-cache
将apk中的dex文件安装到dalvik-cache目录下
4.卸载过程
删除安装过程中在上述三个目录下创建的文件及目录。

APK反编译与回编译:
先查壳,再反编译看验证
.dex=>.smali 反编译工具apktool
.dex=>.jar=>.class dex2jar
Apktool工具实际上只反编译以下三个文件:
AndroidManifest.xml classes.dex resources.arsc
去除广告和弹窗,撇开不存在于smali的这种情况,容易的就是可以在XML中寻到Activity,难的就是寻不到,发生这种情况时,就要分析代码,程序逻辑,抓住关键信息,界面和函数。
注意:
当字符串等关键信息搜不到时,可以从三个方向考虑:1.字符串在so层;2.字符串被加密了3.结合了服务器,服务器返回,本地显示。

编程语言:
Java代码=>smali汇编
C/C++=>ARM汇编

虚拟机:
1.java虚拟机
java字节码
基于栈架构
2.dalvik虚拟机(jit机制)
Android 5.0以下
dalvik字节码
dalvik可执行文件体积更小
基于寄存器架构
3.art虚拟机(aot机制)
Android 5.0版本及以上
注意:
.dex =>dexopt=>.odex dalvik加载执行的odex文件
.dex=>dex2oat=>.oat art加载执行的是oat文件

Dalvik字节码:
1.了解dalvik寄存器
dalvik中的寄存器都是32位
2.寄存器之v命名法与p命名法
参数寄存器
局部变量寄存器
3.dex文件反汇编工具
smali.jar\ddx.jar
4.类型
smali==>Java
V void
Z boolean
B byte
S short
C char
I int
J long
F float
D double
L java类类型
[ 数组类型
5.字段
Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;
6.方法
Lpackage/name/ObjectName;->MethodName(III)Z

smali文件:
无论是普通类、抽象类、接口类或者内部类,在反编译出的代码中,它 们都以单独的smali 文件来存放。每个 smali 文件都由若干条语句组成, 所有的语句都遵循着一套语法规范。
1.描述类的信息
.class < 访问权限> [ 修饰关键字] < 类名>
.super < 父类名>
.source <源文件名>
2. 静态字段
# static fields
.field < 访问权限> static [ 修饰关键字] < 字段名>:< 字段类型>
3.实例字段
# instance fields
.field < 访问权限> [ 修饰关键字] < 字段名>:< 字段类型>
4.直接方法
# direct methods
.method <访问权限> [ 修饰关键字] < 方法原型>
<.locals> “.locals ”指定了使用的局部变量的个数
[.parameter] “.parameter”指定了方法的参数
[.prologue] “.prologue ”指定了代码的开始处
[.line] “.line ”指定了该处指令在源代码中的行号
<代码体>
.end method
5. 虚方法的声明与直接方法相同,只是起始处的注释为“virtual methods”。
6.接口
# interfaces
.implements < 接口名>“.implements ”是接口关键字,后面的接口
名是 DexClassDef 结构中 interfacesOff 字段指定的内容。
7.注解
# annotations
.annotation [ 注解属性] < 注解类名>
[ 注解字段 = 值]
.end annotation
注解的作用范围可以是类、方法或字段。如果注解的作用范围是类, “.annotation ”指令会直接定义在 smali 文件中,如果是方法或字段,“.annotation ”指令则会包含在方法或字段定义中。

快速定位关键代码:
1.分析流程
搜索特征字符串
搜索关键api
通过方法名来判断方法的功能
2.快速定位关键代码
反编译APK程序
AndroidManifest.xml=>包名/系统版本/组件
程序的主activity
每个Android程序有且只有一个主Activity
分析程序的执行流程
需重点关注的application
application执行时间
授权验证
3.定位关键代码的技巧
信息反馈法(资源id/字符串)
特征函数法(api函数)
顺序查看法(分析程序执行流程/病毒分析)
代码注入法(动态调式/插入log/查看logcat/分析加解密)
栈跟踪法(动态调式/函数调用流程)
Method Profiling(方法剖析=>动态调式/热点分析//函数调用流程)

相关推荐
Android软件安全逆向分析》由浅入深、循序渐进地讲解了Android系统的软件安全逆向分析与加密解密技术。包括Android软件逆向分析和系统安全方面的必备知识及概念、如何静态分析Android软件、如何动态调试Android 软件、Android 软件的破解与反破解技术的探讨,以及对典型Android病毒的全面剖析。 作者简介:丰生强(网名非虫),Android软件安全专家,看雪论坛Android安全版版主,安卓巴士开发交流版版主。 目录 第1章  Android程序分析环境搭建 1.1  Windows分析环境搭建 1.1.1  安装JDK 1.1.2  安装Android SDK 1.1.3  安装Android NDK 1.1.4  Eclipse集成开发环境 1.1.5  安装CDT、ADT插件 1.1.6  创建Android Virtual Device 1.1.7  使用到的工具 1.2  Linux分析环境搭建 1.2.1  本书的Linux环境 1.2.2  安装JDK 1.2.3  在Ubuntu上安装Android SDK 1.2.4  在Ubuntu上安装Android NDK 1.2.5  在Ubuntu上安装 Eclipse集成开发环境 1.2.6  在Ubuntu上安装CDT、ADT插件 1.2.7  创建Android Virtual Device 1.2.8  使用到的工具 1.3  本章小结 第2章  如何分析Android程序 2.1  编写第一个Android程序 2.1.1  使用Eclipse创建Android工程 2.1.2  编译生成APK文件 2.2  破解第一个程序 2.2.1  如何动手? 2.2.2  反编译APK文件 2.2.3  分析APK文件 2.2.4  修改Smali文件代码 2.2.5  重新编译APK文件并签名 2.2.6  安装测试 2.3  本章小结 第3章  进入Android Dalvik虚拟机 3.1  Dalvik虚拟机的特点--掌握Android程序的运行原理 3.1.1  Dalvik虚拟机概述 3.1.2  Dalvik虚拟机与Java虚拟机的区别 3.1.3  Dalvik虚拟机是如何执行程序的 3.1.4  关于Dalvik虚拟机JIT(即时编译) 3.2  Dalvik汇编语言基础为分析Android程序做准备 3.2.1  Dalvik指令格式 3.2.2  DEX文件反汇编工具 3.2.3  了解Dalvik寄存器 3.2.4  两种不同的寄存器表示方法--v命名法与p命名法 3.2.5  Dalvik字节码的类型、方法与字段表示方法 3.3  Dalvik指令集 3.3.1  指令特点 3.3.2  空操作指令 3.3.3  数据操作指令 3.3.4  返回指令 3.3.5  数据定义指令 3.3.6  锁指令 3.3.7  实例操作指令 3.3.8  数组操作指令 3.3.9  异常指令 3.3.10  跳转指令 3.3.11  比较指令 3.3.12  字段操作指令 3.3.13  方法调用指令 3.3.14  数据转换指令 3.3.15  数据运算指令 3.4  Dalvik指令集练习--写一个Dalvik版的Hello World 3.4.1  编写smali文件 3.4.2  编译smali文件 3.4.3  测试运行 3.5  本章小结 第4章  Android可执行文件 4.1  Android程序的生成步骤 4.2  Android程序的安装流程 4.3  dex文件格式 4.3.1  dex文件中的数据结构 4.3.2  dex文件整体结构 4.3.3  dex文件结构分析 4.4  odex文件格式 4.4.1  如何生成odex文件 4.4.2  odex文件整体结构 4.4.3  odex文件结构分析 4.5  dex文件的验证与优化工具dexopt的工作过程 4.6  Android应用程序另类破解方法 4.7  本章小结 第5章  静态分析Android程序 5.1  什么是静态分析 5.2  快速定位Android程序的关键代码 5.2.1  反编译apk程序 5.2.2  程序的主Activity 5.2.3  需重点关注的Application类 5.2.4  如何定位关键代码--六种方法 5.3  smali文件格式 5.4  Android程序中的类 5.4.1  内部类 5.4.2  监听器 5.4.3  注解类 5.4.4  自动生成的类 5.5  阅读反编译的smali代码 5.5.1  循环语句 5.5.2  
Android软件安全逆向分析》由浅入深、循序渐进地讲解了Android系统的软件安全逆向分析与加密解密技术。包括Android软件逆向分析和系统安全方面的必备知识及概念、如何静态分析Android软件、如何动态调试Android 软件、Android 软件的破解与反破解技术的探讨,以及对典型Android病毒的全面剖析。   《Android软件安全逆向分析》适合所有Android 应用开发者、Android 系统开发工程师、Android系统安全工作者阅读学习。 作者简介   丰生强(网名非虫),Android软件安全专家。看雪论坛Android安全版版主;安卓巴士开发交流版版主。   对Android软件与系统安全有狂热的爱好和独到的见解,对Android系统的全部源代码进行过深入地研究和分析逆向分析实战经验丰富。   在国内信息安全杂志上发表过多篇有价值的软件安全文章,目前就职于国内某Android开发企业,常年混迹于看雪论坛(ID非虫)。 目录 第1章  Android程序分析环境搭建 1.1  Windows分析环境搭建 1.1.1  安装JDK 1.1.2  安装Android SDK 1.1.3  安装Android NDK 1.1.4  Eclipse集成开发环境 1.1.5  安装CDT、ADT插件 1.1.6  创建Android Virtual Device 1.1.7  使用到的工具 1.2  Linux分析环境搭建 1.2.1  本书的Linux环境 1.2.2  安装JDK 1.2.3  在Ubuntu上安装Android SDK 1.2.4  在Ubuntu上安装Android NDK 1.2.5  在Ubuntu上安装Eclipse集成开发环境 1.2.6  在Ubuntu上安装CDT、ADT插件 1.2.7  创建Android Virtual Device 1.2.8  使用到的工具 1.3  本章小结 第2章  如何分析Android程序 2.1  编写第一个Android程序 2.1.1  使用Eclipse创建Android工程 2.1.2  编译生成APK文件 2.2  破解第一个程序 2.2.1  如何动手? 2.2.2  反编译APK文件 2.2.3  分析APK文件 2.2.4  修改Smali文件代码 2.2.5  重新编译APK文件并签名 2.2.6  安装测试 2.3  本章小结 第3章  进入Android Dalvik虚拟机 3.1  Dalvik虚拟机的特点--掌握Android程序的运行原理 3.1.1  Dalvik虚拟机概述 3.1.2  Dalvik虚拟机与Java虚拟机的区别 3.1.3  Dalvik虚拟机是如何执行程序的 3.1.4  关于Dalvik虚拟机JIT(即时编译) 3.2  Dalvik汇编语言基础为分析Android程序做准备 3.2.1  Dalvik指令格式 3.2.2  DEX文件反汇编工具 3.2.3  了解Dalvik寄存器 3.2.4  两种不同的寄存器表示方法--v命名法与p命名法 3.2.5  Dalvik字节码的类型、方法与字段表示方法 3.3  Dalvik指令集 3.3.1  指令特点 3.3.2  空操作指令 3.3.3  数据操作指令 3.3.4  返回指令 3.3.5  数据定义指令 3.3.6  锁指令 3.3.7  实例操作指令 3.3.8  数组操作指令 3.3.9  异常指令 3.3.10  跳转指令 3.3.11  比较指令 3.3.12  字段操作指令 3.3.13  方法调用指令 3.3.14  数据转换指令 3.3.15  数据运算指令 3.4  Dalvik指令集练习--写一个Dalvik版的Hello World 3.4.1  编写smali文件 3.4.2  编译smali文件 3.4.3  测试运行 3.5  本章小结 第4章  Android可执行文件 4.1  Android程序的生成步骤 4.2  Android程序的安装流程 4.3  dex文件格式 4.3.1  dex文件中的数据结构 4.3.2  dex文件整体结构 4.3.3  dex文件结构分析 4.4  odex文件格式 4.4.1  如何生成odex文件 4.4.2  odex文件整体结构 4.4.3  odex文件结构分析 4.5  dex文件的验证与优化工具dexopt的工作过程 4.6  Android应用程序另类破解方法 4.7  本章小结 第5章  静态分析Android程序 5.1  什么是静态分析 5.2  快速定位Android程序的关键代码 5.2.1  反编译apk程序 5.2.2  程序的主Activity 5.2.3  需重点关注的Application类 5.2.4  如何定位关键代码--六种方法 5.3  smali文件格式 5.4  Android程序中的类 5.4.1  内部类 5.4.2  监听器 5.4.3  注解类 5.4.4  自动生成的类 5.5  阅读反编译的smali代码 5.5.1  循环语句 5.5.2  switch分支语句 5.5.3  try/catch语句 5.6  使用IDA Pro静态分析Android程序 5.6.1  IDA Pro对Android的支持 5.6.2  如何操作 5.6.3  定位关键代码--使用IDA Pro进行破解的实例 5.7  恶意软件分析工具包--Androguard 5.7.1  Androguard的安装与配置 5.7.2  Androguard的使用方法 5.7.3  使用Androguard配合Gephi进行静态分析 5.7.4  使用androlyze.py进行静态分析 5.8  其他静态分析工具 5.9  阅读反编译的Java代码 5.9.1  使用dex2jar生成jar文件 5.9.2  使用jd-gui查看jar文件的源码 5.10  集成分析环境--santoku 5.11  本章小结 第6章  基于Android的ARM汇编语言基础--逆向原生! 6.1  Android与ARM处理器 6.1.1  ARM处理器架构概述 6.1.2  ARM处理器家族 6.1.3  Android支持的处理器架构 6.2  原生程序与ARM汇编语言--逆向你的原生Hello ARM 6.2.1  原生程序逆向初步 6.2.2  原生程序的生成过程 6.2.3  必须了解的ARM知识 6.3  ARM汇编语言程序结构 6.3.1  完整的ARM汇编程序 6.3.2  处理器架构定义 6.3.3  段定义 6.3.4  注释与标号 6.3.5  汇编器指令 6.3.6  子程序与参数传递 6.4  ARM处理器寻址方式 6.4.1  立即寻址 6.4.2  寄存器寻址 6.4.3  寄存器移位寻址 6.4.4  寄存器间接寻址 6.4.5  基址寻址 6.4.6  多寄存器寻址 6.4.7  堆栈寻址 6.4.8  块拷贝寻址 6.4.9  相对寻址 6.5  ARM与Thumb指令集 6.5.1  指令格式 6.5.2  跳转指令 6.5.3  存储器访问指令 6.5.4  数据处理指令 6.5.5  其他指令 6.6  用于多媒体编程与浮点计算的NEON与VFP指令集 6.7  本章小结 第7章  Android NDK程序逆向分析 7.1  Android中的原生程序 7.1.1  编写一个例子程序 7.1.2  如何编译原生程序 7.2  原生程序的启动流程分析 7.2.1  原生程序的入口函数 7.2.2  main函数究竟何时被执行 7.3  原生文件格式 7.4  原生C程序逆向分析 7.4.1  原生程序的分析方法 7.4.2  for循环语句反汇编代码的特点 7.4.3  if...else分支语句反汇编代码的特点 7.4.4  while循环语句反汇编代码的特点 7.4.5  switch分支语句反汇编代码的特点 7.4.6  原生程序的编译时优化 7.5  原生C++程序逆向分析 7.5.1  C++类的逆向 7.5.2  Android NDK对C++特性的支持 7.5.3  静态链接STL与动态链接STL的代码区别 7.6  Android NDK JNI API逆向分析 7.6.1  Android NDK提供了哪些函数 7.6.2  如何静态分析Android NDK程序 7.7  本章小结 第8章  动态调试Android程序 8.1  Android动态调试支持 8.2  DDMS的使用 8.2.1  如何启动DDMS 8.2.2  使用LogCat查看调试信息 8.3  定位关键代码 8.3.1  代码注入法--让程序自己吐出注册码 8.3.2  栈跟踪法 8.3.3  Method Profiling 8.4  使用AndBug调试Android程序 8.4.1  安装AndBug 8.4.2  使用AndBug 8.5  使用IDA Pro调试Android原生程序 8.5.1  调试Android原生程序 8.5.2  调试Android原生动态链接库 8.6  使用gdb调试Android原生程序 8.6.1  编译gdb与gdbserver 8.6.2  如何调试 8.7  本章小结 第9章  Android软件的破解技术 9.1  试用版软件 9.1.1  试用版软件的种类 9.1.2  实例破解--针对授权KEY方式的破解 9.2  序列号保护 9.3  网络验证 9.3.1  网络验证保护思路 9.3.2  实例破解--针对网络验证方式的破解 9.4  In-app Billing(应用内付费) 9.4.1  In-app Billing原理 9.4.2  In-app Billing破解方法 9.5  Google Play License保护 9.5.1  Google Play License保护机制 9.5.2  实例破解--针对Google Play License方式的破解 9.6  重启验证 9.6.1  重启验证保护思路 9.6.2  实例破解--针对重启验证方式的破解 9.7  如何破解其他类型的Android程序 9.7.1  Mono for Android开发的程序及其破解方法 9.7.2  Qt for Android开发的程序及其破解方法 9.8  本章小结 第10章  Android程序的反破解技术 10.1  对抗反编译 10.1.1  如何对抗反编译工具 10.1.2  对抗dex2jar 10.2  对抗静态分析 10.2.1  代码混淆技术 10.2.2  NDK保护 10.2.3  外壳保护 10.3  对抗动态调试 10.3.1  检测调试器 10.3.2  检测模拟器 10.4  防止重编译 10.4.1  检查签名 10.4.2  校验保护 10.5  本章小结 第11章  Android系统攻击与防范 11.1  Android系统安全概述 11.2  手机ROOT带来的危害 11.2.1  为什么要ROOT手机 11.2.2  手机ROOT后带来的安全隐患 11.2.3  Android手机ROOT原理 11.3  Android权限攻击 11.3.1  Android权限检查机制 11.3.2  串谋权限攻击 11.3.3  权限攻击检测 11.4  Android组件安全 11.4.1  Activity安全及Activity劫持演示 11.4.2  Broadcast Receiver 安全 11.4.3  Service安全 11.4.4  Content Provider安全 11.5  数据安全 11.5.1  外部存储安全 11.5.2  内部存储安全 11.5.3  数据通信安全 11.6  ROM安全 11.6.1  ROM的种类 11.6.2  ROM的定制过程 11.6.3  定制ROM的安全隐患 11.6.4  如何防范 11.7  本章小结 第12章  DroidKongFu变种病毒实例分析 12.1  DroidKongFu病毒介绍 12.2  配置病毒分析环境 12.3  病毒执行状态分析 12.3.1  使用APIMonitor初步分析 12.3.2  使用DroidBox动态分析 12.3.3  其他动态分析工具 12.4  病毒代码逆向分析 12.4.1  Java层启动代码分析 12.4.2  Native层启动代码分析 12.4.3  Native层病毒核心分析 12.5  DroidKongFu病毒框架总结 12.6  病毒防治 12.7  本章小结
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页