2016-03-05 65 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