010 Android之逆向入门
文章目錄
- Android APK文件結構
- META-INF
- res
- AndroidManifest.xml
- classes.dex
- resources.arsc
- lib
- Assets
- Android APK的入口函數
- SDK工具
- adb
- monitor
- Andriod逆向工具
- AXMLPrinter2.jar->Manifest.xml清單文件解密工具
- Dex文件反匯編 匯編工具
- apk簽名工具
- apk反編譯工具->apktool
- Dex2jar工具(轉換文件格式)
- jd-gui
- AndroidKiller
Android APK文件結構
在編譯生成APK之后,會產生如上的幾個文件
META-INF
該目錄存放簽名信息,包括公司信息,文件哈希值。這就意味著如果想要破解這個APK,一旦修改之后文件哈希值也會發生改變,簽名就會無效
res
資源信息,包括圖片,xml(布局文件 字符串 風格樣式等)
AndroidManifest.xml
清單文件,包括包名,四大組件的一些聲明定義以及權限和程序的入口。這個文件不能直接看到內容,需要進行一定的解析
classes.dex
可執行文件,包含JAVA的類信息,方法信息,字段信息,虛擬機指令。dex的生成流程是從JAVA源碼->class文件->dex文件
resources.arsc
資源序號文件,包括資源里的所有ID和名稱。資源ID對應文件是R.class
lib
動態庫,擴展名是.so,包括C++代碼,有各種平臺,比如x86,arm
Assets
自定義資源,比如txt,mp4等等
Android APK的入口函數
一般是自己定義的MainActivity中的onCreate函數。還有第二種情況,
清單文件中appliction節點可以添加android:name屬性,指定繼承自appliction的類,用于初始化整個app的全局信息。繼承自appliction的類有兩個重寫函數會執行,是程序最早的執行函數
所以一個app最早的執行函數是application類中的attachBaseContext函數。一般apk加固以后,都會自定義appliction類,并重寫attachBaseContext或onCreate函數,并聲明為native類型的函數
SDK工具
adb
adb的使用
需要在SDK文件中找到adb,設置目錄到path環境變量中
D:\Android\sdk\platform-toolsadb命令
列舉設備:adb devices
將adb上傳到設備,下載到PC:adb push adb pull
安裝apk:adb install apk文件名
啟動apk:adb shell am start -n <包名/activity名稱>
shell命令:使用adb shell進入安卓命令行,可以在命令行使用linux命令
monitor
這個工具主界面分為三大塊,分別是設備列表,文件列表和日志列表
點擊加號可以新建一個日志過濾器
可以給過濾器命名,通過日志標簽或者進程ID進行過濾等等
Andriod逆向工具
AXMLPrinter2.jar->Manifest.xml清單文件解密工具
隨意打開一個apk中的清單文件,在不解密的情況下里面的內容是亂碼的。調用下面這條命令對xml進行解密
java -jar .\AXMLPrinter2.jar .\AndroidManifest.xml解密完成之后,xml就是明文的了,如果不想將結果顯示到命令行,則可以輸出到文件
java -jar .\AXMLPrinter2.jar .\AndroidManifest.xml > out.xml一樣可以獲取解密后的內容
Dex文件反匯編 匯編工具
Dex文件是Android java代碼編譯生成的二進制文件,包含了虛擬機指令。
baksmali.jar 反匯編工具,將虛擬機指令反匯編成smali代碼
java -jar baksmali.jar classes.dex -o <輸出目錄>反匯編生成的目錄中,包括所有dex文件中的類代碼,每一個類就是一個smali文件。
Java中有三種類,外部類 內部類 匿名類。
外部類:MainActivity.java->MainActivity.smali
內部類:MainActivity類中的OnClickListener類–>MainActivity$MyOnClickListener.smali
匿名內部類:MainActivity類中的OnClickListener對象–>MainActivity$1.smali
smali.jar 匯編工具,將smali代碼匯編生成dex文件
java -jar smali.jar out_dir(目錄) -o out.dex(文件名)apk簽名工具
簽名工具,使用android系統源碼編譯時用到的一個工具
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apkapk反編譯工具->apktool
這個工具將上面的命令行工具做了一個集成和優化,可以將apk中的所有文件進行解密和反匯編
反編譯apk
java -jar apktool.jar d hello.apk解密apk時,進行了下面幾步操作
執行完成之后回將所有的文件都放在同目錄下,相當于是一鍵解密所有apk文件了,著實是強!
回編譯apk目錄
java -jar apktool.jar b hello生成的apk在<hello>/dist目錄中
Dex2jar工具(轉換文件格式)
將dex文件轉為jar文件
d2j-dex2jar.bat classes.dexjd-gui
JAVA代碼反編譯工具,可以將jar文件反編譯成JAVA代碼
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-EYH6oC2e-1623813489915)(010 Android之逆向入門.assets/1623480039139.png)]
AndroidKiller
第一次使用需要配置JDK路徑
AndroidKiller中集成了好幾個工具:
- apktool
- dex2jar
- adb
- jd-gui
總結
以上是生活随笔為你收集整理的010 Android之逆向入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 009 Android之ContentP
- 下一篇: 013 Android锁机病毒分析