Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 混淆-使用mono.cecil重命名变量_C#_Mono_Obfuscation - Fatal编程技术网

C# 混淆-使用mono.cecil重命名变量

C# 混淆-使用mono.cecil重命名变量,c#,mono,obfuscation,C#,Mono,Obfuscation,我正在尝试使用mono.cecil编写一个模糊器,现在正在重命名变量。我知道变量名不是存储在汇编(我提供给混淆器)中,而是存储在pdb中。是否有一种方法可以仅使用程序集进行重命名(例如生成pdb然后重命名)?无需在此处讨论pdb内容 using Mono.Cecil; ... AssemblyDefinition asm = AssemblyDefinition.ReadAssembly("path to your program"); foreach (TypeDefinition t

我正在尝试使用mono.cecil编写一个模糊器,现在正在重命名变量。我知道变量名不是存储在汇编(我提供给混淆器)中,而是存储在pdb中。是否有一种方法可以仅使用程序集进行重命名(例如生成pdb然后重命名)?

无需在此处讨论pdb内容

using Mono.Cecil;

...


AssemblyDefinition asm = AssemblyDefinition.ReadAssembly("path to your program");

foreach (TypeDefinition t in asm.MainModule.Types)
{
  if (!t.Name == "<Module>")//global type
   {
     foreach (MethodDefinition m in t.Methods)
     {
       m.Name = "New Name for your method";
       // You better use a random name & an array where you can put
       // names that has been already used in order to avoid having twice 
       // the same name 
     }
   }
}
使用Mono.Cecil;
...
AssemblyDefinition asm=AssemblyDefinition.ReadAssembly(“程序路径”);
foreach(asm.MainModule.Types中的类型定义t)
{
如果(!t.Name==“”)//全局类型
{
foreach(t.Methods中的方法定义m)
{
m、 Name=“方法的新名称”;
//您最好使用一个随机名称&一个可以放置
//已使用的名称,以避免重复使用
//同名
}
}
}

您不应该分发带有模糊程序集的pdb

如果需要重命名pdb中的变量:

  • 您需要Cecil.Pdb.dll
  • 使用
    assembly.MainModule.LoadSymbols()在程序集后加载pdb
  • 使用
    variableDefinition.name=newName
  • 使用
    assembly.MainModule.SaveSymbols()保存pdb

您是否试图混淆PDB?如果变量没有出现在编译后的代码中,那么混淆变量有什么意义呢?我正在尝试混淆可执行文件,以便在反编译时变量将具有随机名称。我可以重命名类定义和方法,但变量不变,我也无法找到实现它的代码。嗯?整个问题对我来说没有多大意义。为什么要在场景中分发pdb?如果你不分发任何pdb,任何地方都没有变量名,因此需要更改变量名。重命名方法和重命名变量是两回事。该问题询问有关重命名变量的问题。