准备
1.apktool
2.需要转换的apk
转换
打开cmd,输入命令
apktool d xxx.apk
准备
1.java运行环境
2.smali.jar 版本2.2.6
转换
打开cmd使用如下命令进行转换:
java -jar path/smali.jar assemble path/AAA.smali -o path/BBB.dex
path/AAA.smali为要转换的smali文件路径及名称,path/BBB.dex为输出的dex文件路径及名称
注意:
1.smali.jar文件要用绝对路径,不然会报错找不到smali.jar。报错如下:
Error: Unable to access jarfile smali.jar
2.中间不可少assemble关键字,这是2.2版本之后的新语法规则1。缺少assemble会报错,如下:
Exception in thread "main" com.beust.jcommander.MissingCommandException: Expected a command, got -o
at com.beust.jcommander.JCommander.parseValues(JCommander.java:725)
at com.beust.jcommander.JCommander.parse(JCommander.java:304)
at com.beust.jcommander.JCommander.parse(JCommander.java:287)
at org.jf.smali.Main.main(Main.java:87)
准备
java -jar baksmali.jar d XXX.dex -o smaliout
会在当前目录下生成smaliout目录,目录里存放着XXX.smali文件
注意:
百度搜索dex转smali的命令都是java -jar baksmali.jar -o classout/ classes.dex这种,该命令对新版本baksmali.jar包不适用。新版本的语法有所修改,参照如上命令。
先空着
准备
转换
方法一:
将要转换的class文件复制到dx.bat目录下,打开dos窗口,cd到该目录下,执行命令:
.\dx.bat --dex --output=XXX.dex XXX.class
方法二:
将将要转换的class文件复制到dx.jar目录下,打开dos窗口,cd到该目录下,执行命令:
java -jar dx.jar --dex --output=XXX.dex XXX.class
注意:
上面两个方法中,除了 –output= 的参数都能使用绝对路径外,其他参数一律不可以使用绝对路径,否则会报错如下。所以必须cd到对应工具的目录下。
javap -c class文件名 > x.java
将反汇编的class输出到文件
如果不加 > x.java,则直接反汇编后输出到dos窗口
准备
1.cgywin
2.需要转换的c文件
转换
这个过程是对c文件进行预处理,将c文件头部#include包含的、#define预定义的和#if预条件处理的内容进行编译。
打开cygwin,执行如下命令:
gcc -E xxx.c -o xxx.i
准备
1.cygwin
2.需要转换的i文件
转换
该过程是对i文件进行编译。gcc编译器首先会检查代码的规范性以及是否存在语法错误等。检查无误后会将代码翻译成ARM汇编代码。打开cygwin,执行如下命令:
gcc -S xxx.i -o xxx.s
准备
1.cygwin
2.需要转换的s文件
转换
gcc编译器会调用汇编器将汇编代码汇编成二进制文件。打开cygwin,执行如下代码:
gcc -c xxx.s -o xxx.o
准备
1.cygwin
2.需要转换的c文件
转换
打开cygwin,输入
CC xxx.c -O3 -o xxx.o
准备
1.make.exe
2.makefile(需要自己动手编写makefile文件)
3.cmd
4.需要转换的o文件
转换
1.编写makefile文件(这里懒得写了,以后再补)
2.将makefile,make.exe和o文件放在同一目录下
3.打开cmd,执行make命令
准备
1.cygwin
2.需要转换的c文件
转换
打开cygwin,执行如下命令:
CC xxx.c -O3 -o xxx.so -shared
https://blog.csdn.net/qq_40337012/article/details/82820133 ↩︎