天天看點

baksmali和smali工具的使用

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代碼

  1. [email protected]:reserve$ unzip -q HelloWorld.apk -d HelloWorld  
  2. [email protected]:reserve$ java -jar baksmali-1.4.2.jar HelloWorld/classes.dex  

        這樣就會在目前目錄下生成一個out目錄,out目錄:

Python/Shell代碼

  1. [email protected]:reserve$ ls out/org/ourunix/helloworld/  
  2. BuildConfig.smali   R$attr.smali        R$id.smali          R$menu.smali        R$string.smali  
  3. MainActivity.smali  R$drawable.smali    R$layout.smali      R.smali             R$style.smali  

        當然如果你熟悉smali文法規則的話,你就可以自由的修改這些smali檔案,然後在通過smali工具重新生成dex檔案:

Python/Shell代碼

  1. [email protected]:reserve$ java -jar smali-1.4.2.jar out/ -o classes.dex  

        當然這個方法已經out了,我們完全可以使用其他工具來完成更多的事情。

        項目首頁:http://code.google.com/p/smali/