- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
安安卓卓逆逆向向入入门门笔笔记记
一一、、环环境境配配置置
安装 java jdk ,并设置好环境变量。
测试 : java version
二二、、初初识识 AAPPKK、、DDaallvviikk字字节节码码以以及及SSmmaallii
11 .. aappkk是是什什么么 ??
apk实质上是一个zip压缩包 ,将apk后缀修改为zip ,解压之后可以看到其内部结构 :
22 .. aappkk 的的组组成成
aasssseettss :: 资源目录1 ,assets 和 res 都是资源目录但有所区别 :
res 目录下的资源文件在编译时会自动生成索引文件 (R.java ),在Java代码中勇R.xxx .yyy来引用 ;而asset
目录下的资源文件不需要生成索引 ,在Java 代码中需要用AssetManager来访问 ;
一般来说 ,除了音频和视频资源 (需要放在raw或asset下 ),使用Java开发的Android工程使用到的资源文件都
会放在res下 ;使用C++游戏引擎 (或使用 Lua Unity3D等 )的资源文件均需要放在 assets 下。
lliibb :: so 库存放位置 ,一般由NDK编译得到 ,常见于使用游戏引擎或 JNI native调用的工程中
MMEETTAA IINNFF :: 存放工程一些属性文件 ,例如 Manifest .MF
rreess :: 资源目录2 ,
AAnnddrrooiiddMMaanniiffeesstt ..xxmmll :: Android工程的基础配置属性文件
ccllaasssseess..ddeexx :: Java代码编译得到的 Dalvik VM 能直接执行的文件
rreessoouurrcceess..aarrsscc :: 对res 目录下的资源的一个索引文件 ,保存了原工程中 strings.xml等文件内容
其他文件夹等
33.. DDaallvviikk字字节节码码 ((学学习习破破解解的的基基础础 ))
Dalvik 是 google 专门为 Android 操作系统设计的一个虚拟机 ,经过深度优化。虽然 Android 上的程序是使用
java 来开发的 ,但是 Dalvik 和标准的 java 虚拟机 JVM 还是两回事。Dalvik VM 是基于寄存器的 ,而 JVM 是基于
栈的 ;Dalvik有专属的文件执行格式 dex (dalvik executable ),而 JVM 则执行的是 java 字节码。Dalvik
VM 比 JVM 速度更快 ,占用空间更少。
通过 Dalvik 的字节码我们不能直接看到原来的逻辑代码 ,这时需要借助如 Apktool 或 dex2jar+jd gui 工具来
帮助查看。但是 ,我们最终修改 APK 需要操作的文件是 .smali 文件 ,而不是导出来的 Java 文件重新编译。
44 .. SSmmaallii ((破破解解的的重重中中之之重重 ))
Smali ,Baksmali 分别是指安卓系统里的 Java 虚拟机 (Dalvik )所使用的一种 dex 格式文件的汇编器 ,反汇编
器。其语法是一种宽松式的 Jasmin/dedexer 语法 ,而且它实现了 .dex 格式所有功能 (注解 ,调试信息 ,线路
信息等 )
当我们对 APK 文件进行反编译后 ,便会生成此类文件。在Davlik字节码中 ,寄存器都是32位的 ,能够支持任何类
型 ,64位类型 (Long/Double )用2个寄存器表示 ;Dalvik字节码有两种类型 :原始类型 ;引用类型 (包括对象和
数组 )
原始类型 :
B byte
C char
D double
F float
I int
J long
S short
V void
Z boolean
[XXX array
Lxxx/yyy object
这里解析下最后两项 ,数组的表示方式是 :在基本类型前加上前中括号 “[” ,例如 int 数组和 float 数组分
别表示为 :[I、[F ;对象的表示则以 L 作为开头 ,格式是 LpackageName/objectName; (注意必须有个分号跟在
最后 ),例如 String 对象在
文档评论(0)