dx dex java1.8_[练习]使用dx.bat、dexdump.exe、javap、Baksmali

本文介绍了如何使用dx.bat和dexdump.exe将Java类转换为Dalvik字节码,以及如何通过Javap查看Java字节码。同时,详细阐述了使用Baksmali进行DEX反汇编到Smali语言的过程,并讨论了Baksmali相对于dexdump的优势,以及在处理混淆代码时可能使用的工具如IDA Pro。
摘要由CSDN通过智能技术生成

PART0

这几个工具的关系可以这样描述:

235df2a791148301b9b3583feb9f33cb.png

用例:

public class Hello

{

public int foo(int a , int b )

{

return (a+b) * (a-b);

}

public static void main(String args[])

{

Hello hello = new Hello();

System.out.println(hello.foo(5,3));

}

}

PART1:dx.bat、dexdump.exe

dx.bat、dexdump.exe可以在\sdk\build-tools\android-4.4W下找到。

把Hello.class复制到这个目录下,输入:

f156f3258dd7d7c513acfcda07e0ee0b.png

可以生成Hello.dex。

然后用dexdump弄成Dalvik字节码:

2f8ad5c319477af697cdfe4c849740ab.png

能得到这样的东西:

24cf6428b726e075b3b4e12fd17eafe7.png

对应函数:

public int foo(int a , int b )

{

return (a+b) * (a-b);

}

PART2:Javap可以反编译class得到Java字节码,命令是:

javap -c -classpath . Hello

就不使用了。

PART3:DEX反汇编工具Baksmali:

用法是:

java -jar baksmali.jar -o baksmaliout Hello.dex //反编译成smali

java -jar smali.jar out//重新打包成dex, out是上一步反编译出来的文件夹

可以在baksmaliout目录下生成Hello.smali文件,然后用文本编辑器打开可以看到foo()函数的代码,也有上面的add-int,sub-int等等。

注意Smali是Dalvik虚拟机指令语言,所以dexdump.exe搞出来的Dalvik字节码跟Baksmali反汇编出来的smali语言是一样的。

dexdump比较简易所以一般用Baksmali吧。

用了一次Baksmali反编译发现弄出来的smali文件跟apktool搞出来的差不多,混淆过的代码还是分成了很多文件。可以用IDA Pro。

也许这个工具用来smali重新打包成dex更实用.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值