移动安全 第二天上午 安卓基础介绍

一般最好是手头有一个安卓手机,模拟器不仅操作麻烦,有的时候还会被程序检查,执行的逻辑也不同。关于模拟器的问题以后会说,这个据说使用夜神模拟器很不错,android stdio的模拟器效率不敢恭维,但是可以下载无数的系统版本。

今天主要是各种主流工具的应用 

这里的·工具会介绍一些特别有用的,不要急不知道都是啥。

常见的题目是

给出apk安装包,进行逆向

算法分析-web前端进行后端渗-混淆解密

一般我们的java组成有Dalvik层 主要是java 还有Native层 主要是c c++ 都可以出现题目

APK文件格式

apk是安卓程序安卓包,起始就是一个压缩包,里面是一些java代码,资源文件,配置文件等。

Android APK文件是Java JAR包格式的扩展,当然也是ZIP文件格式的扩展格式。 
APK文件以.apk为后缀。 
APK文件主要包含:代码、资源、签名文件等。

具体的看这位师傅的吧 https://blog.csdn.net/fwt336/article/details/52401902

具体而言,包含: 

1.AndroidManifest.xml 

该文件用来声明应用程序的包名称、版本、组件和其他数据。 

2.classes.dex 

该文件包含应用程序的可执行代码,该文件格式是Dalvik VM的原生DES格式。 

3.resources.arsc 

该文件是资源索引表,包含res下的各类资源,如字符串和类型等。 

4.assets 

该目录下存放着资源文件,如数据库、字体文件、媒体文件、图片文件等。 

5.lib 

该目录下存放着库文件。 

6.META-INF 

该目录下存放着签名文件。 

7.res 

该目录下存放着资源文件。和assets目录的差异是:res目录下的子目录是规定好的;除了raw子目录,其他的子目录都参与编译,这些子目录下的资源是通过编译出的R类在代码中访问。而assets目录下的资源子目录的建立则不受限制;assets目录下的资源访问是直接通过引用文件名。

虚拟机dalvik虚拟机

关于虚拟机这个概念刚开始很难以理解,可以理解为类似于pc的虚拟机,将不同的程序隔离运行。

Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行。dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Google对其进行了特定的优化,使得Dalvik具有高效、简洁、节省资源的特点。从Android系统架构图知,Dalvik虚拟机运行在Android的运行时库层。

Dalvik虚拟机 依赖于底层Posix兼容的操作系统,它可以简单的完成进程隔离和线程管理。它有着对内存的高效使用和在低速CPU上表现出的高性能。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例, 其代码在虚拟机的解释下得以执行。

Dalvik作为面向Linux、为嵌入式操作系统设计的虚拟机,主要负责完成对象生命周期管理、堆栈管理、线程管理、安全和异常管理,以及垃圾回收等。Dalvik充分利用Linux进程管理的特定,对其进行了面向对象的设计,使得可以同时运行多个进程,而传统的Java程序通常只能运行一个进程,这也是为什么Android不采用JVM的原因。Dalvik为了达到优化的目的,底层的操作大多和系统内核相关,或者直接调用内核接口。另外,Dalvik早期并没有JIT编译器,直到Android2.2才加入了对JIT的技术支持。

Dalvik和标准Java虚拟机(JVM)之间的首要差别之一,就是Dalvik基于寄存器,而JVM基于栈。

Dalvik和Java之间的另外一大区别就是运行环境——Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik应用作为一个独立的Linux进程执行。

(1)虚拟机很小,使用的空间也小;

(2)Dalvik没有JIT编译器;

(3)常量池已被修改为只使用32位的索引,以简化解释器;

(4)它使用自己的字节码,而非Java字节码。

描述方法:方法名、类型参数和返回值 

格式如下:

一个例子
Lpackage/name/ObjectName;->MethodName(III)Z


Lpackage/name/ObjectName;:表示一个类型
MethodName:具体的方法名
(III)Z:方法的签名部分,其中括号内的III为方法的参数,在此为三个整型参数,Z表示方法的返回类型为boolean类型

method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

method:方法名 

括号里边的为方法参数,即 

I:int 

[[I:int[][] 

Ljava/lang/String;:String 

[Ljava/lang/Object;:Object[] 

返回值: 

Ljava/lang/String;:String 

还原来就是:

String method(int ,int[][],int ,String,Object[])

arm架构

从源代码到cpu的执行过程?

答.c等高级语言源代码---------->.S汇编文件---------->.elf格式的二进制可执行程序---------->.bin格式的烧录文件---------->CPU取址,译码,执行(流水线)

汇编语言的本质?

答:cpu机器指令集(机器码)的助记符,是一款cpu的本质特征。不同的cpu机器指令集设计不同,因此汇编指令不能在不同的cpu之间互相移植。也因此,理论上来说用机器指令集来操作cpu是效率最高的。但是现在没人这么写代码了,所以目前来说汇编指令能最大程度发挥硬件性能,之后才轮到c语言,再之后才是上层语言比如c++,java,c#

ttps://blog.csdn.net/qq_35559358/article/details/79984935

 https://www.cnblogs.com/xunbu7/p/8086091.html

原文:https://blog.csdn.net/doomvsjing/article/details/73695476 

https://www.cnblogs.com/lao-liang/p/5111399.html

https://blog.csdn.net/itluochen/article/details/52262020

原文:https://blog.csdn.net/Kudou_Shinichi/article/details/79682575 

来源: https://www.cnblogs.com/chen110xi/p/6612437.html

https://blog.csdn.net/weixin_39142112/article/details/80356244、

https://www.cnblogs.com/ouyangping/p/6366461.html

原文:https://blog.csdn.net/wangsfine/article/details/51205564 

https://www.jianshu.com/p/8e8ed503d69b

https://www.cnblogs.com/gordon0918/p/5581597.html

https://blog.csdn.net/beyond702/article/details/50427640 

https://blog.csdn.net/doomvsjing/article/details/73695476

猜你喜欢

转载自blog.csdn.net/iamsongyu/article/details/86891924