Android逆向文档阅读笔记-Android Application Fundamentals
Fundamentals Review
Android應用程序是在APK格式的文件中的,APK是基于ZIP文件的(可以將APK后綴改成ZIP后綴,然后可以使用unzip去解壓)。
APK文件內容:
AndroidManfest.xml
META-INF/
? ??? ??·存儲簽名相關的信息
classes.dex
? ??? ??·Dalvik字節碼,存儲在dex后綴的文件中。android的dalvik虛擬機則是.dex可執行文件,你可以理解為是.class的進一步封裝。
lib/
? ??? ??·Native庫,包含CPU的庫模擬,如armeabi、mips等;
assets/
? ??? ??·每個應用程序都需要這個目錄;
? ??? ??·可以包含額外的native以及dex文件。惡意代碼、native庫、Dalik經常都是放在這個地方。
Dalvik & Smali
Android應用大部分都是Java寫的,在Android上,Java會被編譯為DEX(Dalvik Executable)。
正向開發是吧Java代碼編譯成DEX代碼,逆向開發剛好相反:
逆向工程師:
Smali代碼就是Android上的匯編代碼。
如下面的Java代碼:
public static void printHelloWorld() {System.out.println("Hello World") }對應的Smali代碼是:
.method public static printHelloWorld()V.registers 2sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;const-string v1, "Hello World"invoke-virtual {v0,v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)Vreturn-void .end method程序的入口點
逆工程最重要的事情是找到程序的入口點,便于分析。有以下幾個入口點:
1.Launcher Activity:哪些帶有UI的程序,會有一個活動頁,當運行Android程序時會首先加載這個活動頁,在AndroidManfest.xml中定義了主活動頁,
<activity android:name=".LauncherActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter> </activity>2.Services:無UI界面的Android應用,要關注Services,當startService調用啟動服務時,onStart方法將會被執行。
3.Broadcast Receivers:有時消息傳遞就是使用廣播。Broadcast Receivers監聽器廣播。這個監聽器有兩種方法:一個是調用registerReceiver()這個API,另一個是在代碼中重寫onReceive此方法。
4.Exported Components(Services & Activities):Services和Activities可以被導出,允許其他進程和服務進行調用,導出的Services和Activities可以被其他進程或設備調用,通過查看AndroidManfest.xml中的結點信息可只他是否被導出:
<service android:name=".ExampleExportedService" android:exported="true"/> <activity android:name=".ExampleExportedActivity" android:exported="true"/>5.Application Subclass:一般程序會繼承Application類,首先考慮attachBaseContext,其次考慮onCreate。
總結
以上是生活随笔為你收集整理的Android逆向文档阅读笔记-Android Application Fundamentals的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python笔记-UiSelector坐
- 下一篇: Python笔记-UiSelector文