baksmali和smali工具的使用
兩天前baksmali和smali又做了一次更新,目前最新的版本是1.4.2,這次更新雖然隻是修了些bug,雖說現在直接使用baksmali和smali不多了,但大部分逆向分析工具還都是基于baksmali和smali來開發,就比如apltool,這次我就來簡單介紹下baksmali和smali。
關于smali
smali檔案是一種非常接近dalvik指令格式的檔案,由baksmali反編譯dex檔案而來,同樣baksmali和smali這兩個名詞和dalvik一樣都是來自冰島語。
使用baksmali和smali
這裡使用Helloworld.apk程式作為sample,我們可以使用baksmali反編譯dex檔案來生成smali檔案,如下:
Python代碼
- [email protected]:reserve$ unzip -q HelloWorld.apk -d HelloWorld
- [email protected]:reserve$ java -jar baksmali-1.4.2.jar HelloWorld/classes.dex
這樣就會在目前目錄下生成一個out目錄,out目錄:
Python/Shell代碼
- [email protected]:reserve$ ls out/org/ourunix/helloworld/
- BuildConfig.smali R$attr.smali R$id.smali R$menu.smali R$string.smali
- MainActivity.smali R$drawable.smali R$layout.smali R.smali R$style.smali
當然如果你熟悉smali文法規則的話,你就可以自由的修改這些smali檔案,然後在通過smali工具重新生成dex檔案:
Python/Shell代碼
- [email protected]:reserve$ java -jar smali-1.4.2.jar out/ -o classes.dex
當然這個方法已經out了,我們完全可以使用其他工具來完成更多的事情。
項目首頁:http://code.google.com/p/smali/