一般最好是手头有一个安卓手机,模拟器不仅操作麻烦,有的时候还会被程序检查,执行的逻辑也不同。关于模拟器的问题以后会说,这个据说使用夜神模拟器很不错,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