安卓软件安全与逆向分析 基础知识

jvm虚拟机:指令集为零地址形式的指令集,即指令的源参数和目标参数都是隐含的,通过java虚拟机中提供的一种数据结构“求值栈”来传递。

dalvik虚拟机运行时也为每个线程维护一个PC计数器和调用栈,此调用栈 维护一份寄存器列表,寄存器的数量在方法结构体的registers字段中给出,DVM根据这个值来创建一份虚拟的寄存器列表。

Dalvik opcodes: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

For binary XML files, use a binary-to-textual XML converter like AXMLPrinter2

● For the DEX file, use dedexer

● Alternative products:

– Dexdump – comes with the Android SDK, less convenient to use than dedexer because e.g. it does not support labels, produces one large file, etc.

– Baksmali – a competing open-source DEX disassembler. Comes with a Dalvik bytecode assembler (smali)

DVM是作用特定架构的cpu上的,设计之处采用了ARM架构,arm架构的cpu本身集成了多个寄存器,dalvik将部份寄存器映射到arm寄存器上,还有一部分通过调用栈进行模拟。共65526个寄存器,取值范围v0 - v65535.

虚拟机中的每个寄存器都是32位的,描述指令时所说的位数表示的是寄存器数值的取值范围。

 对apk文件进行签名:一种是使用jdk中提供的jarsigner工具签名;另一种使用android源码中提供的signapk工具,它的代码位于android系统源码的build\tools\signapk目录下。

$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -validity 10000

$ jarsigner -verbose -signalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore myapp.apk alias_name

安卓系统程序的安装:开机时启动的PackageManagerService服务在启动时会扫描系统程序目录/system/app并重新安装所有程序。

系统程序位于安卓源码中的packages/apps目录下。如安装新程序时的安装界面是系统程序PackageInstaller的PackageInstallerActivity,当系统请求到需要安装apk程序时,会启动这个activity,并接收通过intent传递来的apk文件信息。

 

posted on 2016-01-04 09:00  CarrieSmile  阅读(394)  评论(0)    收藏  举报