baksmali和smali源碼分析(一)

最近有一個項目需要修改一些dex文件,提起修改dex文件,最有名的就是baksmali和smali項目,這個項目並且開源,所以一個思路就是通過修改這個原來來實現修改dex文件的目的。


首先是下載 baksmali源碼:

下載地址 https://code.google.com/p/smali/
下載完成以後,將項目導入到eclipse工程中,本來筆者認爲開源項目直接導入後就能夠調試了,結果發現事情遠遠沒有那麼簡單,這個項目依賴了衆多的jar包。
沒有辦法筆者只好將需要的jar包一一下載下來,然後加入到建立的工程中,如圖1:


wKioL1Psgc-DqsrsAAPHA_2Ep_4088.jpg


主要需要的jar包以及下載地址:


1 antlr-4.2.2-complete.jar  
一個開源的詞法分析器的jar包,主要用於生成smali和baksmali的語法解釋器的
java文件  生成的 smaliParser.java 和 smaliTreeWalker.java 這兩個java文件加起來將近
1M了

下載地址
http://www.antlr.org/download/antlr-4.2.2-complete.jar


2 guava-17.0.jar  
google的一個開源的庫,英文單詞的意思是石榴,裏面實現了很多容器的類
下載地址
http://search.maven.org/remotecontent?filepath=com/google/guava/guava/17.0/guava-17.0.jar


3 jsr305-1.3.9.jar
一些用於判斷對象類型是否可以爲 NULL的jar包,據說將要進入JDK中
下載地址
http://www.java2s.com/Code/JarDownload/jsr305/jsr305-1.3.9.jar.zip


4 ST-4.0.8.jar
下載地址
http://www.stringtemplate.org/download/ST-4.0.8.jar


5 org.apache.commons.cli_1.2.0.v201105210650.jar
下載地址
http://dl.shiguanglu.com/jarfiles/o/org.apache.commons/org.apache.commons.cli_1.2.0.v201105210650.jar.zip

6 com.springsource.org.junit-4.7.0.jar
下載地址

http://dl.shiguanglu.com/jarfiles/c/com.springsource.org.junit/com.springsource.org.junit-4.7.0.jar.zip



將這些jar包加入到工程裏面,這個時候還是會報錯的,因爲在源代碼中放的smali語法分析器的文件形式不是java的文件形式,而是 antlr 這個語法分析器的文件形式,具體目錄是在 smali/src/main/antlr3這個目錄下,裏面有 smaliParser.g 和 smaliTreeWalker.g 這兩個文件,需要使用

java -jar antlr3.jar xx.g

這個命令將 這兩個文件生成相應的java文件,然後將這兩個java文件拷貝到 smali/src/main/java/org/jf/smali這個目錄下

這個時候還有最後一步,就是要處理一下 smali/src/main/jflex 這個目錄下的
smaliLexer.flex 這個文件了

這個文件需要下載一個叫做 jflex-1.6.0.jar 的jar包
下載地址在 http://jflex.de/download.html

然後運行
java -jar jflex-1.6.0.jar smaliLexer.flex
這個命令,生成了 smaliFlexLexer.java 這個文件

同樣需要將 smaliFlexLexer.java 文件拷貝到 smali/src/main/java/org/jf/smali 這個目錄下

這個時候如果你在建立的項目將源碼中的test代碼也導入的話,不出意外會出現一個錯誤,錯誤文件是 lexerTest.java 裏面大概 163行吧,修改成下面的代碼即可
        //modify by sunzeduo 2014-6-23
        InputStreamReader reader = new InputStreamReader(smaliStream);

就是有些jar包升級了,測試代碼沒有及時修改過來,導致的出現的問題,這個問題很好修改。


ok 解決完了編譯問題,現在在eclipse中的樣子就是如圖2的樣子了

wKioL1Pshe7g-FuvAANnPJ0lsXI245.jpg






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章