前言
OK开始.
自学的过程:
- 分析化解搭建,分析Android软件的方法.
- Dalvik虚拟机汇编-这是学习基础.
- Android系统中的可执行文件-基石.
- 常用工具&反汇编代码特征.
- ARM汇编基础.
- 原生Android程序特征及分析方法.
- 动态调试技术.
- 常见Android软件保护与破解.
- 防.
- 不同环节安全隐患,安全编程.
- 实战分析.
环境搭建:
工欲善其事,必先利其器.
- JDK – 开发必须
- Android SDK
- Android NDK动态库
- CDT,ADT插件
熟悉AVD虚拟调试.
以上环境搭建成功与否测试:
- java -version
- emulator -version
adb version
列出连接到PC的Android设备:
adb devices
编写第一个样例.
破解
破解方法:
- APK文件->APKTool反编译->Smali反汇编代码(从中可以理解程序的运行机制从而修改)->APKTool编译+签名->APK文件
- APK->IDA
- dex2jar和jd-gui配合,进行Java源码级分析.
举例:
apktool d x.apk outdir 反编译到outdir文件夹里
其中生成的:
– Smali目录下- 所有反汇编代码
– res – 所有资源
破解思路:
错误提示字符串:
可能的情况:
- 硬编码
- 引用自”resvaluesStrings.xml”,该文件中字符串的索引值在public.xml中.搜索对应的id在smali文件中.
文件签名使用 signapk.jar,使用命令:
其中%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文件/h3>
dx –dex –output=x.dex x.class
反编译命令
- java -jar baksmali.jar -o baksmaliout x.dex
生成x.Smali - javap -c -classpath x
生成字节码 - dexdump.exe -d x.dex
生成dalvik字节码 - 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原理/h3>
分为临时root和永久root.
root是通过不同版本的Android系统本地提权漏洞来工作的.
你可以使用 X-ray for Android应用来检验你的系统是否存在这些漏洞.
Dalvik字节码
- 指令格式.
- 反汇编工具.
-BakSmali-还支持使用Smali工具打包反汇编代码重新生成dex文件.
-Dedexer - Dalvik寄存器
- 寄存器命名法-v命名法,p命名法
- 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.
后语
咱们下篇见!

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!