Android软件安全与逆向分析入门-壹-初识反编译

前言

本系列文章主体来自我对《Android软件安全与逆向分析》作者:丰生强(非鱼)一书的读书笔记.
在Android安全方面,我确定我是一个新手-一个从没有编译过Apk文件,并且没有学习过Java的人,所以骚年,你又担忧什么呢.

OK开始.

自学的过程:

  1. 分析化解搭建,分析Android软件的方法.
  2. Dalvik虚拟机汇编-这是学习基础.
  3. Android系统中的可执行文件-基石.
  4. 常用工具&反汇编代码特征.
  5. ARM汇编基础.
  6. 原生Android程序特征及分析方法.
  7. 动态调试技术.
  8. 常见Android软件保护与破解.
  9. 防.
  10. 不同环节安全隐患,安全编程.
  11. 实战分析.

环境搭建:

工欲善其事,必先利其器.

  1. JDK - 开发必须
  2. Android SDK
  3. Android NDK动态库
  4. CDT,ADT插件

熟悉AVD虚拟调试.

以上环境搭建成功与否测试:

  1. java -version
  2. emulator -version
    adb version

列出连接到PC的Android设备:
adb devices

编写第一个样例.

破解

破解方法:

  1. APK文件->APKTool反编译->Smali反汇编代码(从中可以理解程序的运行机制从而修改)->APKTool编译+签名->APK文件
  2. APK->IDA
  3. dex2jar和jd-gui配合,进行Java源码级分析.

举例:
apktool d x.apk outdir 反编译到outdir文件夹里

其中生成的:
- Smali目录下- 所有反汇编代码
- res - 所有资源

破解思路:

错误提示字符串:
可能的情况:

  1. 硬编码
  2. 引用自”res\values\Strings.xml”,该文件中字符串的索引值在public.xml中.搜索对应的id在smali文件中.

文件签名使用 signapk.jar,使用命令:

java -jar signapk.jar platform.x509.pem platform.pk8 %0 debug_signed.apk

其中%0替换成待签名的东东.
这三个文件我已打包.在这里:
Android签名三文件.

如何安装一个apk快速到Android中?
adb install x.apk

Dalvik-必会的字节码

Dalvik虚拟机

Dalvik Virtual Machine 是谷歌设计专门在Android平台运行Android程序的虚拟机.
专用可执行文件格式为:DEX.

每个Android进程对应一个Dalvik虚拟机的实例.
Java虚拟机与Dalvik虚拟机的异同:
Java字节码 class文件中 java 基于栈架构
Dalvik字节码 DEX(Dalvik Executable) DEX(java通过dx工具转换而来) 基于寄存器架构

如何由class文件生成dex文件?

dx –dex –output=x.dex x.class

反编译命令

  1. java -jar baksmali.jar -o baksmaliout x.dex
    生成x.Smali
  2. javap -c -classpath x
    生成字节码
  3. dexdump.exe -d x.dex
    生成dalvik字节码
  4. java -jar ddx.jar -d ddxout x.dex
    生成x.ddx

Java虚拟机

Java虚拟机指令集是零地址形式的指令集-在指令中看不到目的操作数和源操作数.它们都是隐含的.
这些隐含的参数在结构体求值栈在求值栈中进行传递.
Java:每个线程,1个PC计数器和一个Java(求值)栈.
其中PC计数器只对当前方法有效.

Java栈

Java栈由栈帧组成:
- 局部变量栈 ->参数(保存在n个slot中,从左到右)&局部变量
- 操作数栈 ->中间结果,调用别的方法的参数

Java虚拟机最多支持0xff条指令.(PC寄存器大小导致的限制.)

Android使用Dalvik虚拟机来代替Java虚拟机.

系统启动到Dalvik虚拟机

Android系统加载内核->init进程(设备初始化工作)->Zygote->初始化Dalvik虚拟机.

Android Root原理?

分为临时root永久root.

root是通过不同版本的Android系统本地提权漏洞来工作的.

你可以使用 X-ray for Android应用来检验你的系统是否存在这些漏洞.

Dalvik字节码

  1. 指令格式.
  2. 反汇编工具.
    -BakSmali-还支持使用Smali工具打包反汇编代码重新生成dex文件.
    -Dedexer
  3. Dalvik寄存器
  4. 寄存器命名法-v命名法,p命名法
  5. Dalvik字节码的类型,方法与字段表示方法
    -BakSmali反汇编后,方法: .method .end method,字段: .field
    Dalvik字节码的类型与Java字节码是对应的.
    Dalvik**类型**分为:基本类型和引用类型.引用类型分为:1.对象.2.数组[
    类型描述符:
V Z B S C
void boolean byte short char
I J F D L [
int long float double Java类(类型)
  • Dalvik指令集
    参见原书P44.

后语

咱们下篇见!

你可能感兴趣的:(深造之旅)