目录:
  1. Smali与Java文件的相互转换与运行
    1. Java代码转Smali代码
      1. Smali代码转Java代码
        1. 工具下载
          1. jd-gui在Mac上安装需要注意:
            1. Dalvik虚拟机中运行Smali代码

            Smali与Java文件的相互转换与运行

            阅读时间:全文 403 字,预估用时 3 分钟
            创作日期:2023-10-17
            文章标签:
             
            BEGIN

            Java代码转Smali代码

            假设有java源文件test.java

            1. 通过javac将java文件转换成class文件: 执行javac test.java生成Test.class文件
            2. 通过dx.jar将class文件转换成dex文件: 执行dx --dex --output=./Test.dex Test.class生成Test.dex文件
            3. 通过baksmali将dex文件转换成smali文件: 执行java -jar /path/to/baksmali-2.5.2.jar d Test.dex后可看到out/Test.smali文件即为生成的smali文件
            • 其中dx命令用的文件是~/Library/Android/sdk/build-tools/30.0.3/dx,可将该目录加入到系统环境变量PATH中

            Smali代码转Java代码

            1. 通过smali.jar将smali文件转换成dex文件: 执行java -jar /path/to/smali-2.5.2.jar a ./out -o Test.dex
            2. 通过dex2jar将dex文件转化成class文件:执行d2j-dex2jar.sh ./Test.dex生成Test-dex2jar.jar文件
            3. 解压Test-dex2jar.jar文件:unzip Test-dex2jar.jar生成Test.class文件,
            4. 使用命令:javap -p Test.class打印反编译后的源码文件或者使用JD-GUI工具查看

            工具下载

            smali工具:https://bitbucket.org/JesusFreke/smali/downloads/ 🔗

            dex-tools:https://github.com/pxb1988/dex2jar/releases 🔗

            jd-gui: https://github.com/java-decompiler/jd-gui/releases 🔗

            jd-gui在Mac上安装需要注意:

            1. 下载并解压出JD-GUI.app文件
            2. JD-GUI.app文件移动到/Applications/目录下,此时运行软件会提示java找不到
            3. 命令行运行echo $JAVA_HOME/bin/java | pbcopy,此时java路径已经在剪切板中了
            4. 编辑vim /Applications/JD-GUI.app/Contents/MacOS/universalJavaApplicationStub.sh,删除JAVACMD判断赋值语句并在之后的256行添加JAVACMD="/Users/rnet/.jenv/versions/1.8/bin/java"后保存退出,再次运行正常

            Dalvik虚拟机中运行Smali代码

            1. 通过Smali代码转Java代码代码中的第1步生成的dex文件上传到手机模拟器sd卡目录:adb push Test.dex /sdcard
            2. 进入adb shell:adb shell
            3. 运行dex文件:dalvikvm -cp /sdcard/Test.dex Test,其中命令最后的Test是类名,如果是包则用包名替代
            FINISH

            随机文章
            人生倒计时
            default