gpt4 book ai didi

c# - 预编译 - 混淆 Roslyn 生成的代码

转载 作者:行者123 更新时间:2023-12-02 17:36:19 25 4
gpt4 key购买 nike

我最近的任务是提出一个提供重命名函数以及运行时各种其他混淆预编译的解决方案。我相信使用 Roslyn 是可行的方法,但请提供您可能拥有的任何见解。

最终目标如下:允许最终用户选择各种选项,然后在运行时生成到程序集的文本版本中。然后我们使用 Roslyn 生成 .exe。我很好奇是否可以在运行时(甚至在生成 EXE 之前)进行混淆。这样我就可以重命名变量等。

最佳答案

您可以使用任何能够可靠地转换 C# 源代码的工具。

罗斯林就是其中之一,但方式很有趣;您可以修改程序并生成目标代码。这应该可行。

其他Program Transformation Systems (PTS)可以通过修改代码来做到这一点。 PTS 读取源代码,构建编译器数据结构(例如 AST),允许您修改 AST,然后可以从修改后的 AST 重新生成源代码。这样你就可以看到混淆后的代码;您可以稍后使用 C# 编译器对其进行编译。一个好的 PTS 可以让您按照目标语言的语法以如下形式编写代码转换:

 if you see *this pattern*, replace it by *that pattern*

表示如下

  rule <name> <patternvariables>  "thispattern" -> "thatpattern";

使用 PTS,您可以对源代码进行任意更改,包括函数和变量重命名、代码流加扰和数据流加扰。例如,您可以使用此规则来增加困惑:

  rule scramble_if_then(c: condition, b: block): statement -> statement
" if (\c) \b " -> "int temp = \c?4:3;
while (temp>3) {\b; temp--; }";

这条规则有点简单/愚蠢,但我认为它表明你可以编写可读的源代码转换。如果您有很多这样的规则,它会使代码变得非常困惑,特别是当您的规则进行复杂的转换时。

我们使用我们的 DMS Software Reengineering Toolkit实现name-scrambling obfuscators ,包括 C# 的一个。

关于c# - 预编译 - 混淆 Roslyn 生成的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38314702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com