Dev*_*kes 2 c# obfuscation roslyn
我最近的任务是提出一个提供重命名功能的解决方案,以及在运行时预编译的各种其他混淆.我相信使用Roslyn是可行的方法,但请提供您可能拥有的任何见解.
最终目标如下:允许最终用户选择各种选项,然后在运行时将其生成为程序集的文本版本.然后我们使用Roslyn生成.exe.我很好奇是否有可能在运行时混淆,甚至在生成EXE之前.这样我可以重命名变量等.
您可以使用任何可以可靠地转换C#源代码的工具.
罗斯林是一个但有趣的方式; 您可以修改程序并生成目标代码.这应该工作.
其他程序转换系统(PTS)可以通过修改源代码来实现.PTS读取源代码,构建编译器数据结构(例如,AST),允许您修改AST,然后可以从修改的AST重新生成源代码.这样你就可以看到混淆的代码; 您可以随后使用C#编译器进行编译.一个好的PTS将允许您使用以下形式编写目标语言语法的代码转换:
if you see *this pattern*, replace it by *that pattern*
Run Code Online (Sandbox Code Playgroud)
以下表示为
rule <name> <patternvariables> "thispattern" -> "thatpattern";
Run Code Online (Sandbox Code Playgroud)
使用PTS,您可以对源代码进行任意更改,包括函数和变量重命名,代码流加扰和数据流加扰.例如,您可能会使用此规则来添加混淆:
rule scramble_if_then(c: condition, b: block): statement -> statement
" if (\c) \b " -> "int temp = \c?4:3;
while (temp>3) {\b; temp--; }";
Run Code Online (Sandbox Code Playgroud)
这个规则有点简单/愚蠢,但我认为它可以说明你可以编写可读的源代码转换.如果你有很多这样的规则,它会对代码进行大量加扰,特别是如果你的规则进行复杂的转换.
我们使用DMS Software Reengineering Toolkit来实现名称加扰混淆器,包括一个用于C#的混淆器.
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |