移動安全 第二天上午 安卓基礎介紹

一般最好是手頭有一個安卓手機,模擬器不僅操作麻煩,有的時候還會被程序檢查,執行的邏輯也不同。關於模擬器的問題以後會說,這個據說使用夜神模擬器很不錯,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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章