• [练习]使用dx.bat、dexdump.exe、javap、Baksmali


    PART0

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

    用例:

    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可以在sdkuild-toolsandroid-4.4W下找到。

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

    可以生成Hello.dex。

    然后用dexdump弄成Dalvik字节码:

    能得到这样的东西:

    对应函数:

    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更实用.

    参考:http://bbs.gfan.com/android-69140-1-1.html

  • 相关阅读:
    JAVA选择结构
    JAVA关系运算符
    初识JAVA
    Java变量
    CSS
    HTML表单
    Dao层步骤
    JDBC
    集合框架
    使用log4j
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/3818264.html
Copyright © 2020-2023  润新知