Android APK靜態分析

安裝包分析,又稱逆向分析,即拿到應用程序的apk文件時,使用一些第三方工具進行反編譯、抓包、注入等手段,對應用程序邏輯、數據結構、攻擊方式進行分析,常用的分析方法分爲靜態分析與動態分析

靜態分析

在不運行代碼的方式下,通過詞法分析、語法分析、控制流、數據流分析等技術對程序代碼進行掃描,驗證代碼是否滿足規範性、安全性、可靠性、可維護等指標的一種代碼分析技術,在Android 平臺上,靜態分析就是分析apk安裝包,主要爲了瞭解代碼結構,邏輯的流程,修改、插入、去除邏輯,替換修改資源等。

工具

資源逆向工具:AXML_Printer2    Android 設備的一種xml文件編碼格式,可以將Axml轉化爲可讀的xml文件的工具

dex2jar、jd_GUI

dex2jar是一個用來將android 的dex文件轉化爲java類文件的工具,即我們常說的將dex轉化爲jar

jd_GUI:可以使jar文件的代碼、結構、字段都變爲java文件,使用者可以方便查看

apkTool:反編譯APK文件,得到classes.dex文件,同時也能獲取到資源文件以及佈局文件。

 

Android 逆向助手(只有windows端)

國人對常用的工具封裝得到的,工具包括:apktool、jd_gui、dex2jar、jarsigner等;主要功能有反編譯apk、重新打包apk、對apk進行簽名、反編譯dex、重新打包成dex等。

分析dex文件

Dalvik虛擬機是谷歌專門爲Android平臺設計的一套虛擬機,區別於標準的java虛擬機JVM的class文件格式,Dalvik VM擁有專屬的DEX可執行文件格式和指令集代碼,smali和baksmali則是針對dex執行文件格式的彙編器和反彙編器,反彙編後的dex文件會產生.smali後綴的代碼,smali代碼擁有特定的格式與語法,smali語言對Dalvik虛擬機字節碼的一種解釋。

Dex的生成過程:

java文件 --->> javac編譯 ----->>  .class文件 ------>>>  dx編譯 ------->>.dex文件

逆向分析離不開Smali語言,本篇文章簡單介紹下Smali,會專門寫一篇文章來詳細介紹Smali語言

Smali是寄存器指令,而java是解釋性語言,理論上兩者不能作爲比較,這裏做對比是爲了大家能夠快速的入門學習,

 

java語法 Smali語法 說明
private boolean is_Flag .field private isFlag:z 定義變量
Package .class 指定當前的類名
  .super 所繼承的父類
  .local 定義使用的局部變量
  .method 方法
  .parameter 方法參數
  .prologue 方法的開始
  .line12 此方法位於.java中的第12行(可在混淆文件中去除,去除無影響)
super invokesuper 調用父類函數
  const/high16 v0,0X7fo3 把0x7fo3賦值給v0
  invokedirect 調用函數
  Return void 函數返回void
  .end method 函數結束
  new instance 創建實例
  inputobject 對象賦值
  igetobject 調用對象
  invokestatic 調用靜態函數
if(vA==vB) if-eq vA,vB 如果vA等於vB
if(vA!=vB) if-ne vA,vB 如果vA不等於vB
if(vA<vB) if-lt vA,vB 如果vA小於vB
if(vA>=vB) if-ge vA,vB 如果vA大於等於vB
if(vA>vB) if-gt vA,vB 如果vA大於vB
if(vA<=vB) if-le vA,vB 如果vA小於等於vB
if(vA==0) if-eqz vA 如果vA等於0
if(vA!=0) if-ne vA 如果vA不等於0
if(vA<0) if-lt vA 如果vA小於0
if(vA>=0) if-ge vA 如果vA大於等於0
if(vA>0) if-gt vA 如果vA大於0
if(vA<=0) if-le vA 如果vA小於等於0

以上是簡短的smali語法,下面我們實戰演示下反編譯,反編譯apk需要的工具:

apktool:反編譯APK文件,得到classes.dex文件,同時也能獲取到資源文件以及佈局文件。

dex2jar:將反編譯後的classes.dex文件轉化爲.jar文件。

jd-gui:用於將.jar文件轉換成java代碼。

首先確認好軟件都已經安裝成功,我的是mac電腦,以下操作都是在mac端進行的

①:使用命令chmod +x 分別對apktool和apktool.jar文件進行提權

              //先進入到/usr/local/bin文件夾下 cd /usr/local/bin

chmod +x apktool

chmod +x apktool.jar

②測試是否成功,在/user/local/bin目錄下輸入:apktool

說明配置成功,

③:把你需要反編譯的apk文件也複製到 /usr/local/bin 文件夾下,確保apktool、apktool.jar以及apk文件都在/usr/local/bin目錄下,終端輸入命令 apktool d xxx.apk回車,等待執行完畢:將dex文件解碼爲smali

下面就是反編譯之後的文件

 

選中的即爲smali文件地址。

 

 

以上兩張圖即時smali語法與java語法的原始版本,讀者可對比着看

 

待續~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發佈了13 篇原創文章 · 獲贊 0 · 訪問量 4287
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章