但jd-guid无法将核心的smali代码转为java代码。
所以只能通过阅读smali来了解脱壳思路,使用dex2smali将dex转换为smali,我们主要看ActivityThread.smali;
smali
Android smali
Dalvik VM, dex and Smali.
Dalvik VM运行的是 字节码 bytecode
对于Android就是dex文件 = binary Dalvik bytecode
Smali:相当于 Android内部的 汇编代码 -》把二进制的bytecode转换成一种 人类可读的 Smali代码
Smali: Assembler for Android’s VM
smali/baksmali is an assembler/disassembler for the dex format used by dalvik, Android’s Java VM implementation
【总结】
- Smali
- 背景
- Android
- 代码语言:Java
- Java
- JVM
- Android:处于性能考虑:没用JVM,用了自己的虚拟机VM
- Android虚拟机
- Android < 5.0:Dalvik
- 旧:Dalvik VM=DVM
- 概述
- Dalvik是google专门为Android操作系统设计的一个虚拟机,经过深度的优化。虽然Android上的程序是使用java来开发的,但是Dalvik和标准的java虚拟机JVM还是两回事
- Android >= 5.0:ART
- 新:ART=Android RunTime
- JVM vs DVM
- 编译流程对比
- JVM:
- 逻辑上:基于栈帧Stack-based
- 文件格式:java字节码=java bytecode
- 效率:相对低
- DVM:
- 逻辑上:基于寄存器 Register-based
- 文件格式:(专属的)dex
- 效率:DVM效率比JVM高
- 速度更快,占用空间更少
- dex=Dalvik EXecutable
- =dex文件=dex字节码
- dex反汇编后:Smali代码
- Android(虚拟机中的dex文件)反汇编(后的)代码:Smali
- 学习Smali用途
- 分析Apk:静态分析,不够
- 需要动态分析,涉及Smali
- 修改Apk逻辑:修改Smali代码,重新编译打包Apk
- Android逆向基础:掌握Smali
- 能阅读 smali 代码对进行 android 逆向十分重要
- smali/baksmali
- 针对dex
- smali:assembler=汇编器
- smali语言=汇编语言
- baksmali:disassembler=反汇编器
转载请注明:在路上 » 【整理】安卓安全 Smali