重命名反混淆代码

4
有没有工具可以将.NET dll的混淆代码重命名为可读代码?
混淆是指将原始变量名称和命名空间转换为不可读的变量名称,并改变控制流程,使破解者难以猜测原始代码。
反混淆是指混淆的逆过程。将不可读的变量名称和命名空间转换为易于跟踪和理解原始源代码的可读名称,如A1、A2(因为将其转换回原始名称是不可能的)。

10
你可能会发现这个社区不太愿意促进代码反混淆。鲜有情况下反混淆可以被视为道德行为。 - kbrimington
1
你有任何合法的理由这样做吗? - Justin
3
直白地说:你需要多大的一根2x4木板撞击你的额头才能明白这段代码的所有者不希望你对其进行反汇编? - Hans Passant
3
撇开伦理道德不谈,到底是谁投票将这个问题关闭为“过于局部化”? - Rob
3
我想确保没有人能够破解我的混淆源代码,这是一个技术网站而不是宗教网站。我正在进行一个混淆项目,我希望确保没有什么可以被反向解析。为什么你在没有足够知识的情况下试图回答一个技术问题? - Ehsan
3个回答

7
你可以再次混淆代码,但要禁用重载等选项。这样,成员将被命名为 A、B、C 等,而不是全部使用 A(使用重载)或具有不可打印名称。
此外,IL 级优化器通常可以撤消控制流混淆并删除旨在使反编译器崩溃的死代码。
一旦你拥有可编译的代码,使用 Visual Studio 的重命名重构引入名称。工具无法自动猜测适当的名称。

我确信有一些工具可以实现这个目的,但是我通过谷歌搜索找不到它们。你正在解释混淆过程,但我的问题明确提到了反混淆(即将非可读变量名转换为可读的变量名,如A1、A2、B3等)。 - Ehsan
2
混淆器通常有选项来控制新名称的外观。如果禁用重载和不可打印名称,则对已经混淆的程序集进行混淆实际上会使名称更易读。 - Daniel
有没有任何方法可以让反混淆成为一场噩梦?我正在开发一个混淆工具,因为我知道大多数现有的工具都可以被破解,所以我认为需要改变方法论。 - Ehsan

1

不,否则为什么会存在混淆工具呢?你所谓的“可读性”变量名在混淆汇编中已经不存在了,因为它们被重命名为“非可读性”名称,没有任何工具能够猜测原来的名称是什么。


1
请注意问题,我不想要原始名称。我只是想将不可读的变量名转换回可读的形式,而不是还原原始名称。显然我无法将它们转回原始名称,我希望变量名称像A1、A2、B3这样。 - Ehsan
你仍然没有提供任何合理的解释,说明你为什么要这样做。混淆是一种用于保护知识产权的过程。通过混淆他的汇编代码,作者显然不希望其他人对其进行反混淆。 - Darin Dimitrov
1
我想确保没有人能够破解我的混淆源代码,你需要我父亲的社会安全号码吗?如果你不知道解决方案,你不必回答。 - Ehsan

0

你的意思是查看编译后的dll中的代码吗?如果是,我使用Redgate的.NET Reflector。


是的,但我想要一个工具来重命名混淆的dll中不可读变量名称或...为可读名称。 - Ehsan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接