[免费专栏] Android安全之APK逆向入门介绍
也許每個人出生的時候都以為這世界都是為他一個人而存在的,當他發現自己錯的時候,他便開始長大
少走了彎路,也就錯過了風景,無論如何,感謝經歷
Android安全付費專欄長期更新,本篇最新內容請前往:
- [車聯網安全自學篇] Android安全之APK逆向入門介紹
0x01 前言
?????2021年注定是一個不平凡的一年,這一年每個人都需要付出更多的努力,一定要腳踏實地,默默努力奮斗
0x02 逆向工程的概念
?????比如你看到別人寫的某個exe程序能夠做出某種漂亮的動畫效果,你通過反匯編、反編譯和動態跟蹤等方法,分析出其動畫效果的實現過程,這種行為就是逆向工程;不僅僅是反編譯,而且還要推倒出設計,并且文檔化,逆向軟件工程的目的是使軟件得以維護。
?????系統級逆向包括在程序上運行各種不同的工具和操作系統服務獲取信息,檢查程序可執行文件,并跟蹤程序的輸入輸…等等。這些信息大多數來自操作系統,因為根據定義,一個程序與外部世界的任何交互行為都必須通過操作系統
?????代碼級逆向是從程序的進制碼,提取設計理念和算法的復雜過程,它要求軟件分析師不但要掌握逆向技術,而且還要對軟件開發、CPU以及操作系統有相當深入的認識。
?????軟件的復雜度深不可測,即使有編寫良好、文檔齊全的源代碼,人們也會難以理解軟件的內部。而代碼級逆向是對低級指令的分析,更是難上加難… …
-
逆向工程
- 從任何人造的東西中提取知識或者設計規劃的過程
-
計算機領域的逆向工程
0x03 逆向工程的應用
- 漏洞挖掘與利用
- 代碼檢查
- 比較代碼
- 查找惡意代碼
- 查找軟件BUG
- 代碼軟件
- 破解應用
- 算法理解與學習
- 添加新功能
- 繞過驗證
… …
0x04 逆向分析的常見流程
0x05 逆向前置技能
0x06 APK 逆向分析
6.1 工具
- apktool
是Google提供的APK編譯工具。
將資源解碼成原來的形式 將解碼的資源重新打包成apk/jar 組織和處理依賴于框架資源的APK Smali調試 執行自動化任務- dex2jar
?????可以把dex文件轉換成jar文件,jar文件可以通過JD-GUI工具打開
- jd-gui
?????是一個圖形化的jar查看工具
- JADX-GUI
?????JADX 是apk圖形化查看工具,比JD-GUI更加強大,可以直接打開apk,查看java源碼和xml源碼。
- IDA Pro
?????付費的反匯編工具,功能非常強大。是目前最好的一個靜態反編譯軟件。可以用于so文件的靜態分析,動態調試。
https://hex-rays.com/ida-free/#download
https://down.52pojie.cn/?query=IDA
- readelf
?????是用于對C++機器碼的分析,一般用于查看ELF格式的文件信息,常見的文件如在Linux上的可執行文件,動態庫(.so)或者靜態庫(.a) 等包含ELF格式的文件。
- Xposed Hook
?????Xposed 是非常強大的動態逆向分析框架,可以動態獲取APP運行時參數,修改數據。
- Android studio
?????Android Studio 是開發 Android 應用程序的官方 IDE,基于 Intellij IDEA。
https://developer.android.google.cn/studio
- AndroidKiller
?????AndroidKiller官方版是一款非常受歡迎的安卓APK反匯編工具,AndroidKiller官方版界面美觀大方,功能強勁實用,集Apk反編譯、Apk打包、Apk簽名,編碼互轉,ADB通信等特色功能于一身,使用起來簡單便捷。
https://down.52pojie.cn/Tools/Android_Tools/
- ClassyShark
?????Google官方為Android開發者推出的獨立的二進制文件檢查工具,因此其權威性和強大毋庸贅言,且得到較好的維護和更新。其github地址為:https://github.com/google/android-classyshark,其支持多種文件格式的解析,包括:庫文件 (.dex, .aar, .so), 可執行文件 (.apk, .jar, .class) 和所有的Android二進制XML格式文件如AndroidManifest, resources, layouts等等。另外,很重要的一點,其能分析得出dex文件里面包含的方法數,這對于Android一個著名的問題(方法數超限65535,見https://developer.android.com/studio/build/multidex.html)的解決很有幫助。
- AXMLParser
?????AXMLParser僅僅是用于解析APK里面的二進制AndroidManifest.xml,從而得到與原始工程里的AndroidManifest.xml內容一致的可讀xml。較輕量級,適用于只想查看和AndroidManifest.xml里面包含的信息,比如包名package,versionCode和versionName,啟動Activity等。其原始鏈接和下載地址為:https://code.google.com/archive/p/xml-apk-parser/
- AAPT(aapt)
?????Android SDK中自帶的appt工具(位于%ANDROID_HOME%\build-tools%Android version%\aapt.exe,API Level 24及以后版本新增了aapt2,即%ANDROID_HOME%\build-tools%Android version%\aapt2.exe。其中%ANDROID_HOME%是Android SDK的安裝目錄,%Android version%表示構建版本,完整示例比如"F:\Android\sdk\build-tools\27.0.0\aapt.exe"),其實構建APK的過程中,aapt工具起到了非常關鍵的作用,比如將原始資源等進行編譯,生成R.id等。
?????反過來,APPt也可以用于解析APK,包括清單文件AndroidManifest.xml中的信息。appt工具的功能很強大,子命令和參數非常豐富。
- jeb
?????jeb 靜態分析APK
- Visual Studio Installer
?????用來分析代碼用
- FernFlower
?????idea自帶的fernflower好用,相比較之下java-decompiler無法反編譯lambda表達式,而這個fernflower可以,所以在有lambda表達式的情況下,還是選擇fernflower比較好。
https://github.com/fesh0r/fernflower
- CFR
?????CFR是一個反編譯工具,有時我們開發的時候可能會用到反編譯.
http://www.benf.org/other/cfr/
- IntelliJ IDEA
?????IntelliJ IDEA 被認為是當前 Java 開發效率最快的 IDE 工具
6.2 反編譯流程
1)apk反編譯得到程序的源代碼、圖片、XML配置、語言資源等文件
?????下載上述工具中的apktool,解壓得到3個文件:aapt.exe,apktool.bat,apktool.jar ,將需要反編譯的APK文件放到apktool 所在目錄下,
?????打開命令行界面(運行-CMD) ,定位到apktool文件夾,輸入以下命令:
apktool.bat d -f test.apk testorapktool.bat d test.apk也可以
apktool.bat d test.apk objectFolderPath?????其中,objectFolderPath為可選項,如果此項不存在,軟件將會在apktool文件夾下新建一個apk文件名的文件夾,否則存儲到目標文件夾;
?????(命令中test.apk指的是要反編譯的APK文件全名,test為反編譯后資源文件存放的目錄名稱,即為:apktool.bat d -f [apk文件 ] [輸出文件夾])
- classes.dex
?????classes.dex是java源碼編譯后生成的java字節碼文件(非傳統JVM解釋執行的class字節碼)。
?????但由于Android使用的dalvik虛擬機與標準的java虛擬機是不兼容的,dex文件與class文件相比,不論是文件結構還是opcode都不一樣。
?????Android模擬器中提供了一個dex文件的反編譯工具,dexdump。用法為首先啟動Android模擬器,把要查看的dex文件用adb push上傳的模擬器中,然后通過adb shell登錄,找到要查看的dex文件,執行dexdump xxx.dex(或者從壓縮文件取出dex文件,直接在PC上面找到dexdump.exe的路徑,然后執行命令)。
?????另外Dedexer是一個反編譯dex文件的開源工具,需要自己編譯源代碼。而當前,還有比如dex2jar(https://github.com/pxb1988/dex2jar)甚至封裝好的GUI的工具(比如安卓逆向助手等等,可網上搜索下載)可以反編譯dex文件為jar文件,再利用jd-gui(http://jd.benow.ca/)工具打開jar文件,就可以閱讀java源代碼了。
- resources.arsc
?????編譯Android資源文件后的生成的二進制文件,resources.arsc有固定的格式,包括了資源索引和字符串資源池等。
- AndroidManifest.xml
?????清單文件,該文件是每個應用都必須定義和包含的,它描述了應用的名字、版本、權限、引用的庫文件等等信息,如要把apk上傳到Google Market上,也要對這個xml做一些配置。
?????在apk中的AndroidManifest.xml是經過編譯的,即是二進制格式,如果直接用編輯器打開,顯示會是亂碼。因此需要先進行反編譯處理,得到原始的AndroidManifest.xml文件。可以通過AXMLPrinter2或aapt工具解開或解析,具體命令為:java -jar AXMLPrinter2.jar AndroidManifest.xml
- assets
?????assets目錄可以存放一些配置文件(比如webview本地資源、圖片資源、音視頻等等),不會經過編譯,和原始工程里面的文件是一致的,這些文件的內容在程序運行過程中可以通過相關的API(android.content.res.AssetManager)獲得。
- lib
?????lib目錄下的子目錄存放的是一些與手機CPU架構對應的C/C++代碼編譯生成的so文件,一般用于JNI開發。
- META-INF
?????META-INF目錄下存放的是簽名信息,用來保證apk包的完整性和系統的安全。在eclipse編譯生成一個apk包時,會對所有要打包的文件做一個校驗計算,并把計算結果放在META-INF目錄下。這就保證了apk包里的文件不能被隨意替換。
?????比如拿到一個apk包后,如果想要替換里面的一幅圖片,一段代碼, 或一段版權信息,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來就給病毒感染和惡意修改增加了難度,有助于保護系統的安全。
- res
?????res目錄存放經過編譯后的資源文件,雖與原始工程目錄下的res目錄層次結構類似,但是實際上是經過編譯處理的,只有圖片資源和原始工程是一致,其他類型的資源則是編譯處理過,無法直接查看。
?????從上面對APK內部文件的分析來看,要想反編譯或者逆向工程獲取信息,其實主要涉及兩個方面,一是對classes.dex反編譯,轉換成jar或者smali等,可以利用dex2jar(https://github.com/pxb1988/dex2jar)等工具生成jar,二是結合resources.arsc和res對資源進行反編譯,從而得到原始的資源文件。
?????用apktool反編譯apk得到圖片、XML配置、語言資源等文件,然后使用dex2jar反編譯apk得到Java源代碼
?????將要反編譯的APK后綴名改為.rar或則 .zip,并解壓,得到其中的額classes.dex文件(它就是java文件編譯再通過dx工具打包而成的),將獲取到的classes.dex放到之前解壓出來的工具dex2jar 文件夾內
?????在命令行下定位到dex2jar.bat所在目錄,輸入"d2j-dex2jar classes.dex",命令執行完成之后,在當前目錄下就可以看到生成的Jar文件了
?????反編譯classes.dex得到classes-dex2jar.jar文件之后,就可以使用【jd-gui】工具將class文件反編譯成java源代碼了
6.3 分界線
-
MalwareLab_VM-Setup
-
為我的惡意軟件分析 VM 設置腳本
https://github.com/f0wl/MalwareLab_VM-Setup
- Linux 惡意軟件分析工具
https://remnux.org/
https://tsurugi-linux.org/
- windows 腳本安裝逆向分析工具
https://github.com/fireeye/flare-vm
https://github.com/SentineLabs/SentinelLabs_RevCore_Tools
(1)靜態分析工具
PE分析工具:pestudio、PE-bear、StudyPE、DiE、DependencyWalker、PEid、
ResourceHacker、CFF Explorer、eXeScope
ELF分析工具:readelf
Mach-O分析工具:MachOView
PDF分析工具:PdfStreamDumper
NET分析工具:de4dot、NetMegaDumper、UnConfuserEx
Office文檔分析工具:SSView、OffVis、oletools、rtfdump、VBAPass、objdump
反匯編分析工具:IDA、Radare2、Cutter、jd-gui、JEB、dnSpy、ILSpy、Apktool、ApkIDE
二進制編輯工具:010Editor、XVI32、HxD、WinHex、Hexplorer
(2)動態分析工具
動態調試工具:Ollydbg、Windbg、X64DBG、EDB、gdb、lldb、dnSpy、Radare2、IDA、JEB
網絡抓包工具:WireShark、TcpDump、Charles、BrupBuite、Microsoft Network Monitor 3.4
進程監控工具:ProcMon、ApiMonitor、ProcessHacker
6.4 Java 代碼靜態掃描工具
-
Fortify SCA
-
VCG
https://sourceforge.net/projects/visualcodegrepp/
-
FindBugs 與 FindSecBugs 插件
-
SpotBugs
參考鏈接:
https://cstsinghua.github.io/2017/02/21/Android%20APK%E9%80%86%E5%90%91%E8%A7%A3%E6%9E%90/
你以為你有很多路可以選擇,其實你只有一條路可以走
總結
以上是生活随笔為你收集整理的[免费专栏] Android安全之APK逆向入门介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Medusa工具使用(转)
- 下一篇: 金山文档服务器暂不可用,wps金山文档在