• 安卓逆向入门教程(一)


    初识APK

    0x01.什么是APK

    概念

    APK是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。apk文件和sis一样,把android sdk编译的工程打包成一个安装程序文件,格式为apk。 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是DalvikVM executes的简称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接,和Windows Mobile中的PE文件有区别。

    组成

    解压缩apk后,一般包含如下文件结构

     

    1.assets文件夹

    • 资源目录:存放网页,图片,JSON等资源
    • 静态资源文件,不需要生成索引
    • Java代码中需要用AssetManager来访问
    • 视频、音频等资源放在此目录

    2.lib文件夹

    • so库存放位置,一般由NDK编译所得到,常见于使用游戏引擎或JNI native调用过程中

    3.META-INF文件夹

    • 存放工程的属性文件,签名信息,用来保证apk包的完整性和系统的安全。编译器编译成功apk包时,会对所有要打的包的文件做个校验计算,并把计算结果放到META-INF目录下,这就保证了apk包里的文件不能随意被替换。

    4.res文件夹

    • 资源目录:存放资源文件,包括图片,字符串
    • 编译后会生成索引R.java,在Java代码中用R.xxx.yyy来索引

    5.AndroidMainifest.xml文件

    • Androdi工程配置的基础文件,它描述了应用的名字,版本,权限,应用的库文件等信息。
    • apk中的AndroidMainifest.xml是被压缩过的

    6.classes.dex文件

    • Java代码编译后最终生成的Dalvik字节码文件
    • Android使用的Dalvik虚拟机标准与Java虚拟机标准不兼容

    7.resources.arsc文件

    • 编译后的二进制资源文件,对res目录资源的一个索引文件,保存了原工程中的文件,例如strings.xml等文件内容,

    8.其他文件夹

    0x02.什么是Dalvik

    1.Dalvik虚拟机

    Dalvik虚拟机,是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即“Dalvik Executable”)格式的Java应用程序的运行。.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。

    2.与Java虚拟机区别

    • Dalvik虚拟机是基于寄存器,而JVM虚拟机是基于栈,
    • Dalvik有专属文件执行格式dex(dalvik executable),JVM执行的是Java字节码。
    • Dalvik VM速度比JVM更快,占用空间更少

    3.修改Dalvik的字节码

    • 通过Dalvik的字节码不能直接看到原来的逻辑代码,需要借助第三方工具,例如Apktool或dex2jar+jd-gui工具来帮助查看。
    • 如果想修改apk则需要操作的文件是.smali文件,而不是导出来的Java文件重新编译

    0x03.什么是Smail

    • Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了.dex格式所有功能,对apk反编译之后,便会生成此类文件,其中在dalvik字节码中,寄存器都是32位的,可以支持任何类型,64位类型要用2个寄存器表示,其中Dalvik字节码有两种类型:原始类型和`引用类型(包括对象和数组)
    • 具体语法请参考此篇文章:Android逆向之smali语法宝典
  • 相关阅读:
    20201112 装饰器之函数即变量
    2月13日:毕业设计进度
    2月12日:毕业设计进度
    2月11日:毕业设计进度
    2月10日:毕业设计进度
    2月9日:毕业设计进度
    2月8日:毕业设计进度
    2月7日:毕业设计进度
    2月6日:毕业设计进度
    2月5日:毕业设计进度
  • 原文地址:https://www.cnblogs.com/CnKker/p/11125223.html
Copyright © 2020-2023  润新知