所以我试图对已编译的java程序进行轻微的有效的合法更改。我正在使用 JD-GUI for Mac 反编译它。大多数情况下,反编译的代码是没有错误的,但也有一些奇怪的事情,比如未声明的变量、多个相同的变量声明以及一些不容易编译的奇怪语句。反编译后的代码中一些奇怪的语句着实令人费解。我尤其在使用一个 switch 语句时遇到了麻烦:
switch ($SWITCH_TABLE$PackageName$ClassName$InnerEnumName()[getPlatform().ordinal()])
Run Code Online (Sandbox Code Playgroud)
其中 PackageName.ClassName 是此语句所在的类,InnerEnumName 是 ClassName 中的内部枚举。另请注意, getPlatform() 是 ClassName 中的一个方法,它返回 InnerEnumName 类型的枚举
奇怪的是,当我刚刚剥离此类有问题的语句、编译它并将其插入到程序中时,它开始工作,但有一些奇怪的错误。例如,当我将 switch 语句更改为
switch (getPlatform().ordinal())
Run Code Online (Sandbox Code Playgroud)
当它应该遇到情况 4 时(再次出现第四种情况以及值 4 的情况),它开始遇到情况 3(第三种情况和值 3 的情况)
假设我有一个功能:
function hi()
print('hi')
end
Run Code Online (Sandbox Code Playgroud)
我希望能够将此函数作为参数并对其进行分析,例如列出其中的所有函数调用,查看它引用的所有变量等。
请注意,我不是在谈论分析源代码;而是在谈论分析源代码。我没有函数的源文本,我只有函数对象,即这是在运行时完成的。
我认为你这样做的方法是获取函数的 AST。但我不知道该怎么做。那么我该如何获取函数的 AST(或者如果有更好的方法则对其进行分析)?
经过几天的努力,我想向社区询问:)
我有两个exe文件。两者大小相同且相当大(约 80MB)。
我设法使用 Cutter (Radare2 GUI) 反编译这些文件,但考虑到文件大小,几乎不可能遍历每一种方法。
使用十六进制编辑器(Hex Fiend),我设法获得应用补丁的每个偏移位置。现在我试图用 Cutter 找到这些偏移量来反编译这些位置。
问题是:如何?当我在 Cutter 中打开 Hexdump 时,似乎一切都未就位,我可能需要偏移。在 Cutter 的加载屏幕上设置偏移量似乎没有做任何事情。难道是我用错了?
例子:
妖魔
Offset Hex Data Text
474942-474956 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 GetModuleHandleA
Run Code Online (Sandbox Code Playgroud)
刀具
Offset Hex Data Text
0x0060713E-0x0060714D 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 GetModuleHandleA
Run Code Online (Sandbox Code Playgroud)
474942是0x73F3E,但是距离0x0060713E很远
也许我需要其他工具?任何帮助表示赞赏!
假设我有这个课程:
public class class1 extends Applet implements Runnable
{
private String s;
private URL u;
...
}
Run Code Online (Sandbox Code Playgroud)
第二节课:
class TS extends Thread
{
private final class1 _$97913;
public TS(class1 paramclass1)
{
this._$97913 = paramclass1;
}
...
public void PostData()
{
...
class1.access$16(this._$97913, new Socket(class1.access$17(this._$97913), 80);
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释如何从class1 class1.access$16(this._$97913, new Socket(class1.access$17(this._$97913), 80);引用private URL u;?
它access$16来自哪里?这叫什么,我在哪里可以了解更多?
好,这是的反编译的代码的结果,是有办法到数字(关联access$16,access$17等)到原始变量或类?从我所看到的,唯一的方法是手动执行(即查看被引用的内容并猜测,因为'此'类接收了一个URL,然后'this'必须与'that'变量相关联)?
很久以前,我们为客户编写了C#.NET 1.1应用程序,在办公室搬迁和裁员过程中,源代码未检入Source Safe.
客户现在报告了一个问题,我们不想从头开始重写应用程序.
我相信我们应该能够通过反编译可执行文件来获取源代码.任何人都可以推荐一个好的工具(最好是免费的).
当我们首先编写应用程序时,我不认为反编译会有任何法律问题,但如果我错了请纠正我.
我有一个x86程序集的程序,我想反编译为更高级别的语言.我为此目的检查了回旋镖,但它似乎只需要二进制文件作为输入.我有什么选择?
我希望反编译一个完整的.jar文件或简单的.class文件.
我一直在谷歌周围约一个小时,并且似乎找到任何工具来帮助我.
我发现的大多数工具要么过时,要么不起作用.
我也从stackoverflow 发现了这篇文章,但遗憾的是所有建议的程序都无法下载或过时.
I got a script that is no longer supported and I'm looking for a way to change the value of a variable in it... The script is encrypted (loadstring/bytecode/something like that) e.g.: loadstring('\27\76\117\97\81\0\1\4\4\4\8\0\')
我可以找到我想要更改的内容(在编译脚本后通过记事本),但是如果我尝试更改值,脚本将无法工作,如果我更改并尝试重新编译它仍然无法工作: "luac: Testing09.lua: unexpected end in precompiled chunk" ...
有任何想法吗?我用一个程序做了类似的事情,使用ollydbg,但我不能用lua脚本...我有点迷失在这里,做一些谷歌搜索相当一段时间找不到方法......任何想法?
我目前正在从事一个项目,该项目要求我以编程方式将.class文件反编译为Java文件。IE浏览器我有一个程序,应该读取一个类文件并对其进行反编译,并将生成的Java源代码写入文件中。请帮我做。
编辑:我是反编译器世界的全新手。我已经看过一些API,但是我不知道到底该如何使用以及使用哪个API。任何形式的帮助将是非常可观的
编辑:
我尝试使用:
import com.strobel.decompiler.*;
import java.io.*;
public class JavaDecode {
public static void main(String[] args)throws Exception {
decompileee();
}
private static void decompileee()throws Exception
{
final DecompilerSettings settings = DecompilerSettings.javaDefaults();
final FileOutputStream stream = new FileOutputStream("C:/jp/decompiled.java");
final OutputStreamWriter writer = new OutputStreamWriter(stream);
Decompiler.decompile("C:/jp/X.class",
new PlainTextOutput(writer),
settings
);
System.out.println("Success");
}
}
Run Code Online (Sandbox Code Playgroud)
但是上面的代码只是在指定的目录中创建了一个名为“ decompiled.java”的文件。但是该文件是空文件。
我一直在寻找并且无法找到任何可以帮助我反编译Python 3.5的东西.有谁知道吗?
decompiler ×10
java ×4
decompiling ×2
lua ×2
.net-1.1 ×1
analysis ×1
assembly ×1
bytecode ×1
c ×1
c# ×1
disassembly ×1
function ×1
ghidra ×1
hexdump ×1
python-3.5 ×1
python-3.x ×1
radare2 ×1
recompile ×1
x86-64 ×1