zoukankan      html  css  js  c++  java
  • [练习]使用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

  • 相关阅读:
    kettle安装及初步使用
    Datax初步使用
    可修改性及其实现战术(hot words)
    淘宝网的六个质量属性
    python数据可视化笔记---——matplotlib.pyplot()
    Linux虚拟环境virtualevn
    deepin安装虚拟环境virtualenv
    python面试题-web后端
    rabbitmq和redis用作消息队列的区别
    nginx配置项概括说明
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/3818264.html
Copyright © 2011-2022 走看看