2016-03-05 67 views
-2

我想写一个混淆器使用mono.cecil,现在正在重命名变量。我知道变量名不存储在程序集(我提供给混淆器)中,但在pdb中。有没有一种方法可以只使用程序集进行重命名(例如生成pdb然后重命名)?混淆 - 重命名变量与mono.cecil

+0

你是不是想混淆PDB?如果变量没有出现在编译后的代码中,那么混淆变量会有什么意义呢? –

+0

我想混淆可执行文件,所以当我反编译变量时会有随机名称。我可以重命名类定义和方法,但变量不会改变,我无法弄清楚代码是如何实现的。 – noctusnerdin

+0

呃?这整个问题对我来说没有多大意义。你为什么要在你的场景中分发一个pdb?如果你不分配任何pdb,那么在任何地方都没有变量名,所以需要改变变量名。 – hvd

回答

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 
    } 
    } 
} 
+0

重命名方法和重命名变量是两回事。该问题询问关于重命名变量。 – hvd