安卓逆向笔记(1)——windows下,java和安卓之间的多种文件格式转换

文章目录

  • (apk文件转smali文件)
  • (smali文件转dex文件)
  • (dex文件转smali文件)
  • (dex文件转class文件)
  • (class文件转dex文件)
  • (class文件转java源代码)
  • (c文件转i文件)
  • (i文件转s文件)
  • (s文件转o文件)
  • (c文件转o文件)
  • (o文件转so文件)
  • (c文件转so文件)

(apk文件转smali文件)

准备
1.apktool
2.需要转换的apk
转换
打开cmd,输入命令

apktool d xxx.apk

(smali文件转dex文件)

准备
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)

(dex文件转smali文件)

准备

  1. java运行环境
  2. baksmali.jar 版本2.2.6
    转换
    将dex文件和jar包放在同一目录下,cd到该目录下,然后执行如下命令:
java -jar baksmali.jar d XXX.dex -o smaliout

会在当前目录下生成smaliout目录,目录里存放着XXX.smali文件

注意:
百度搜索dex转smali的命令都是java -jar baksmali.jar -o classout/ classes.dex这种,该命令对新版本baksmali.jar包不适用。新版本的语法有所修改,参照如上命令。

(dex文件转class文件)

先空着

(class文件转dex文件)

准备

  1. java运行环境
  2. dx.jar和dx.bat
    dx.bat位于android-sdk\C:\Android\android-sdk\build-tools\X(不同版本对应不同目录,每个版本都有对应的dx工具) 目录下
    dx.jar位于上述目录里的lib目录下

转换
方法一:
将要转换的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

注意:

  1. 低版本的dx工具可能会报错。我使用20.0.0的dx工具报错如下:
    安卓逆向笔记(1)——windows下,java和安卓之间的多种文件格式转换_第1张图片换成高版本就OK了。

  2. 上面两个方法中,除了 –output= 的参数都能使用绝对路径外,其他参数一律不可以使用绝对路径,否则会报错如下。所以必须cd到对应工具的目录下。

安卓逆向笔记(1)——windows下,java和安卓之间的多种文件格式转换_第2张图片

(class文件转java源代码)

javap -c class文件名 > x.java

将反汇编的class输出到文件
如果不加 > x.java,则直接反汇编后输出到dos窗口

(c文件转i文件)

准备
1.cgywin
2.需要转换的c文件
转换
这个过程是对c文件进行预处理,将c文件头部#include包含的、#define预定义的和#if预条件处理的内容进行编译。
打开cygwin,执行如下命令:

gcc -E xxx.c -o xxx.i

(i文件转s文件)

准备
1.cygwin
2.需要转换的i文件
转换
该过程是对i文件进行编译。gcc编译器首先会检查代码的规范性以及是否存在语法错误等。检查无误后会将代码翻译成ARM汇编代码。打开cygwin,执行如下命令:

gcc -S xxx.i -o xxx.s

(s文件转o文件)

准备
1.cygwin
2.需要转换的s文件
转换
gcc编译器会调用汇编器将汇编代码汇编成二进制文件。打开cygwin,执行如下代码:

gcc -c xxx.s -o xxx.o

(c文件转o文件)

准备
1.cygwin
2.需要转换的c文件
转换
打开cygwin,输入

CC xxx.c -O3 -o xxx.o

(o文件转so文件)

准备
1.make.exe
2.makefile(需要自己动手编写makefile文件)
3.cmd
4.需要转换的o文件
转换
1.编写makefile文件(这里懒得写了,以后再补)
2.将makefile,make.exe和o文件放在同一目录下
3.打开cmd,执行make命令

(c文件转so文件)

准备
1.cygwin
2.需要转换的c文件
转换
打开cygwin,执行如下命令:

CC xxx.c -O3 -o xxx.so -shared

  1. https://blog.csdn.net/qq_40337012/article/details/82820133 ↩︎

你可能感兴趣的:(安卓逆向)