Android逆向入門
- Java語言, smali彙編 dex odex ->android ndk開發
- 加殼與脫殼(vmp技術)
- 一般需要保護的檔案就是dex,so檔案
APK結構

- 逆向分析工具:
- Android SDK
- APKTool
- jarsigner
- keytool
- 逆向步驟:
- 解壓apk和拆卸classes.dex檔案
- 在APP上進行靜态分析
- 在APP中注入代碼
指令行的方式進行操作:
- 首先使用Android studio編譯生成apk檔案
- 下載下傳apktool檔案,并将檔案名改為apktool
- 然後将你的apk檔案拷貝出來将字尾名改為.zip檔案,解壓
Android應用逆向分析
java -jar apktool.jar d xxx.apk
- 這時候在生成的檔案下會有一個smali檔案,主要差別就是Java檔案全部轉換為smali檔案,smali檔案是個Android虛拟機使用的寄存器語言。
- 在HelloWorld程式中添加以下代碼即為Toast語句
invoke-virtual {p0}, Lcom/vogella/android/hackdemo/MainActivity;->getApplicationContext()Landroid/content/Context;
move-result-object v1
const/4 v3, 0x0
invoke-static {v1, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)
Landroid/widget/Toast;
move-resulkt-object v1
invoke-virtual {v1}, Landroid/wiget/Toast;->show()V
- 打包
java -jar apktool.jar b app-debug -o newdebug.apk
- 在同目錄下就會出現新的apk檔案,但是此APK檔案是沒有簽名的APK 是以安裝之後會出現無法進行解析的錯誤:
- 首先執行檢視keystore檔案别名:
keytool -list -v -keystore [keystore檔案路徑] -storepass [keystore檔案密碼]
2.然後執行簽名指令:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 簽名檔案名 -storepass 簽名密碼 待簽名的APK檔案名 簽名的别名
3.接着将之前的程式解除安裝進行安裝我們呢剛才通過修改smali代碼的apk即可
IDE(AndroidKiller)操作:
- 使用的工具在這裡下載下傳
- 直接使用該應用打開APK即可
- 從bin檔案下可以看出和上面的原理相同:
Android應用逆向分析 - smali文法簡述:
V void
Z boolean
B byte
S short
C char
F float
I int
J long
D double
[ array
比如:
Ljava/lang/String; //String類型
[I //一維int數組
- 方法全名:
Lpackage/name/ObjectName;->methodName(III)Z
(III)Z方法簽名
- 方法體:
- BakSmali生成的方法代碼以.method指令開始,以.end method指令結束
- 根據方法的類型不同,可以會在方法前加 # 表示方法類型
- 虛方法:
const-class v1, Lcn/woblog/markdowndiary/domain/Note
move-result-object v0
check-cast v0, Lcn/woblog/markdowndiary/domain/Note
return-object v0
- 直接方法:
invoke-direct {p0} ,Ljava/lang/Object;-><init>()V
- 靜态方法:
move-result-object
return-object v1
- 字段:
field private static instance:Lcn/woblog/markdowndiary/respository/LocalNoteRepository;