最近有一个项目需要修改一些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