什麽是smali 文件
Android程序文件, 即apk文件, 其實是壹個zip壓縮包, 其文件結構如下:
其中, classes.dex是程序的核心文件,是java語言的代碼編譯後的二進制字節碼程序。這種字節碼程序是編譯專供機器閱讀的, 類似於匯編語言的機器碼。然而如果想直接閱讀這部分程序, 最好的方法就是將該文件轉化為smali文件。
apktool
著名的反編譯工具 apktool 就可以完成這部分工作。 它將classes.dex文件反編譯成壹堆的smali文件, 這些文件按源碼的包結構保存在各自的文件夾中。如下所示:
另外, apktool 工具強大之處在於它不僅可以反編譯apk文件, 而且可以根據現有的smali 文件生成新的apk文件。 這就給漢化apk或者去除apk內嵌廣告提供了可能。
smali語法類似於匯編語言的語法, 涉及寄存器的直接操作, 可以直接閱讀, 但羞澀難懂, 尤其是在代碼混淆之後。
dex2jar
有人做了壹個專門的工具 dex2jar 將classes.dex 轉化為jar 文件, 通過 jd-gui 閱讀。
但dex2jar 並不健全, 反編譯出的java文件大部分都有編譯錯誤。可以簡單的閱讀和分析, 但若是涉及到很細致的內容, 則還是需要依賴smali。 smali 文件的編輯器推薦使用 sublime + sublime-smali , 具體請參考文章 為Sublime Text安裝smali代碼語法高亮插件 。