最近有一个项目需要修改一些dex文件,提起修改dex文件,最有名的就是baksmali和smali项目,这个项目并且开源,所以一个思路就是通过修改这个原来来实现修改dex文件的目的。
首先是下载 baksmali源码:
下载地址 https://code.google.com/p/smali/
下载完成以后,将项目导入到eclipse工程中,本来笔者认为开源项目直接导入后就能够调试了,结果发现事情远远没有那么简单,这个项目依赖了众多的jar包。
没有办法笔者只好将需要的jar包一一下载下来,然后加入到建立的工程中,如图1:
主要需要的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
下载地址
将这些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的样子了
转载于:https://blog.51cto.com/sunzeduo/1540085