将 .Java 文件转换为 .Smali 文件

Posted

技术标签:

【中文标题】将 .Java 文件转换为 .Smali 文件【英文标题】:Convert .Java file to .Smali file 【发布时间】:2015-05-17 02:08:11 【问题描述】:

我使用 APKTool 对 android 应用程序进行了逆向工程,并获得了 .Smali 文件作为源代码输出。我将带有应用程序的 .Smali 文件转换为 .Java 文件。我能够成功编辑 .Java 文件,但现在我想将它们转换回 .Smali,以便我可以使用新的 .Smali 文件重新编译应用程序。当我将 .Java 文件留在那里时,它不会重新编译它并给出一些错误。我在网上找不到任何关于将.Java 编译为.Smali 的内容,希望大家能帮助我。

提前谢谢你。

【问题讨论】:

【参考方案1】:

您可以使用普通的 java 编译器编译 java 类,然后使用 Android 的 'dx' 实用程序将编译后的 .class 文件转换为 dex 文件。然后在 dex 文件上运行 baksmali 生成 smali 文件。

例如,假设您在名为“HelloWorld.java”的 java 文件中有以下代码:

public class HelloWorld 
    public static void main(String[] args) 
         System.out.println("Hello World!");
    

将其转换为 smali:

javac HelloWorld.java
dx --dex --output=classes.dex HelloWorld.class
baksmali d classes.dex

【讨论】:

谢谢,也帮助了我。我制作了一个小的 Windows 批处理文件来完成此操作:gist.github.com/houtianze/fc9f158fd86bb0b58c485139ddc32ece 请注意,您必须使用 Java 7(而不是 Java 8)! 最后一行不应该是baksmali d classes.dex吗?你改变了命令行格式吗? @user202729 谢谢,已修复。是的,从现在到首次发布时,命令格式确实发生了变化。 但这不适用于具有导入的类。有解决办法吗?【参考方案2】:

试试 java2smali:https://github.com/ollide/intellij-java2smali

这是一个用于将 Java 转换为 Smali 的应用程序。

【讨论】:

这是一个 IntelIJ 插件。我需要一个独立的程序。 见:***.com/questions/5448267/… 是的,我也发现了那个帖子,但是它将 .Java 文件转换为 .class 文件或 .dex 文件,但我需要一个 .Smali 转换器,因为 APKTool 会从 .Smali > .Dex 进行转换 嗯!我不知道这个插件。漂亮 是否需要所有java格式的包才能将2-3个类转换回smali?我在 java 中只有 2-3 个使用一些库的类。库已经是 .smali 格式(不是 .java),我只需要将这 2-3 个类转换为 .smali。有可能吗?

以上是关于将 .Java 文件转换为 .Smali 文件的主要内容,如果未能解决你的问题,请参考以下文章

怎样把smali文件转换为java文件

直接将 .java 转换为 .smali。可能的?

class.dex好复杂啊!可以转换成class文件,又可以转换成smali文件,居然还可以转换成

反编译 APK 上的 .smali 文件 [重复]

Android逆向基础知识Smali

smali怎么修改