安卓逆向入门笔记详解.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档