本系列文章主体来自我对《Android软件安全与逆向分析》作者:丰生强(非鱼)一书的读书笔记.
在Android安全方面,我确定我是一个新手-一个从没有编译过Apk文件,并且没有学习过Java的人,所以骚年,你又担忧什么呢.
OK开始.
工欲善其事,必先利其器.
熟悉AVD虚拟调试.
以上环境搭建成功与否测试:
列出连接到PC的Android设备:
adb devices
举例:
apktool d x.apk outdir 反编译到outdir文件夹里
其中生成的:
- Smali目录下- 所有反汇编代码
- res - 所有资源
错误提示字符串:
可能的情况:
文件签名使用 signapk.jar,使用命令:
java -jar signapk.jar platform.x509.pem platform.pk8 %0 debug_signed.apk
其中%0替换成待签名的东东.
这三个文件我已打包.在这里:
Android签名三文件.
如何安装一个apk快速到Android中?
adb install x.apk
Dalvik Virtual Machine 是谷歌设计专门在Android平台运行Android程序的虚拟机.
专用可执行文件格式为:DEX.
每个Android进程对应一个Dalvik虚拟机的实例.
Java虚拟机与Dalvik虚拟机的异同:
Java字节码 class文件中 java 基于栈架构
Dalvik字节码 DEX(Dalvik Executable) DEX(java通过dx工具转换而来) 基于寄存器架构
dx –dex –output=x.dex x.class
Java虚拟机指令集是零地址形式的指令集-在指令中看不到目的操作数和源操作数.它们都是隐含的.
这些隐含的参数在结构体求值栈在求值栈中进行传递.
Java:每个线程,1个PC计数器和一个Java(求值)栈.
其中PC计数器只对当前方法有效.
Java栈由栈帧组成:
- 局部变量栈 ->参数(保存在n个slot中,从左到右)&局部变量
- 操作数栈 ->中间结果,调用别的方法的参数
Java虚拟机最多支持0xff条指令.(PC寄存器大小导致的限制.)
Android使用Dalvik虚拟机来代替Java虚拟机.
Android系统加载内核->init进程(设备初始化工作)->Zygote->初始化Dalvik虚拟机.
分为临时root和永久root.
root是通过不同版本的Android系统本地提权漏洞来工作的.
你可以使用 X-ray for Android应用来检验你的系统是否存在这些漏洞.
V | Z | B | S | C |
---|---|---|---|---|
void | boolean | byte | short | char |
I | J | F | D | L | [ |
---|---|---|---|---|---|
int | long | float | double | Java类(类型) |
咱们下篇见!