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

时间:2016-03-05 15:41:16

标签: c# mono obfuscation

我正在尝试使用mono.cecil编写一个混淆器,现在正在重命名变量。我知道变量名不会存储在程序集中(我提供给混淆器),而是存储在pdb中。有没有办法只使用程序集重命名(例如生成pdb然后重命名)?

2 个答案:

答案 0 :(得分:0)

这里不需要进入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 
     }
   }
}

答案 1 :(得分:0)

您不应该随混淆的程序集一起分发pdb。

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

  • 您需要Cecil.Pdb.dll
  • 使用assembly.MainModule.LoadSymbols()组装后加载pdb
  • 使用variableDefinition.Name = newName修改变量的名称
  • 使用assembly.MainModule.SaveSymbols()保存pdb