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