2015-07-28 32 views
14

İşte şu anki durumum - CodeDom'u kullanarak bir kod olarak alınan C# kodunu derleyen bir uygulamam var. Bir parola saklayan bir SecureString'im var ve bu SecureString değişkenini bir SecureString olarak derlenmiş koda aktarmanın herhangi bir yolu olup olmadığını merak ediyordum? İşte Bir değişkeni C# derleyici koduna iletebilir misiniz?

bazı örnek kod: Ben bunu yapmanın bir yolu bulamıyor

SecureString securePassword = getSecurePass(); 

string codeString = 
     @"using System; 
     using System.Security; 

     namespace SomeProgram 
     { 
      class MyClass 
      { 
       static void Main(string[] args) 
       { 
        SecureString securePass = new SecureString(); 
        // somehow set this equal to the securePassword variable 
       } 
      } 
     }"; 


// Compiler Code 
CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp"); 
string outFile = "output.exe"; 

System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters(); 
parameters.GenerateExecutable = true; 
parameters.OutputAssembly = outFile; 
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, codeString); 

ve ben bu aslında mümkün olmadığını hayal ve bunun yerine muhtemelen sadece şifreli bir dosyada parola saklamalısınız ve bundan okuyor musunuz?

+1

Bir exe yazıyorsunuz, bu nedenle de parolayı seri hale getirilmiş bir biçimde gömmek istiyorsunuz. Çalışan bir programa değer sağlamanız gibi değil. – GSerg

+1

(Bu, şifrelenmiş bir blob içeren derlemenize [kaynak ekleyerek] (http://stackoverflow.com/q/13666956/11683) yapılabilir). – GSerg

+0

@GSerg Bu dahice bir fikir, gerçek EXE'de yerleşik olan kaynaklar mı yoksa ayrı olarak (ayrı bir dosyada) saklanmaları gerekir, çünkü eğer ayrı olarak depolanırlarsa dizeyi şifreleyebilir ve bir txt'e gönderebilirim dosya? – Jake

cevap

1

Eh tek ihtiyacınız System.String için SecureString değiştirmek için bir yol anlamaya etmektir.

Zaten cevabı burada: How to convert SecureString to System.String?

string codeString = 
    String.Format(@"using System; 
    using System.Security; 

    namespace SomeProgram 
    { 
     class MyClass 
     { 
      static void Main(string[] args) 
      { 
       SecureString securePass = new SecureString(); 
       {0} // use it the way u like 
      } 
     } 
    }", SecureStringToString(securePassword)); 
+3

OP'nin dizeyi süreçte güvenli tutmak istediğine inanıyorum. – GSerg

+1

Zaten bunu yapabilen, ancak şifreyi kodlamak çok kötü bir fikir olmayan bir yöntem var mı? Eğer bellekte güvenli ve daha sonra tekrar güvenli olması ham formatta ihtiyaç duyulan şey gerekiyor, PhilJones- @ – Jake

+1

bu mümkün değil (GSerg dediğim gibi ve evet, bir SecureString şifreyi tutarak ideal olacaktır). –

4

Sana kavramlar hakkında karıştı olduğunu düşünüyorum. Parolayı bir exe dosyasına derlemeye çalışıyorsunuz ve bunun SecureString şifrenizi güvenli tutacağını düşünüyorsunuz. SecureString'un anlamı bu değil. the documentation Oku:

(SecureString) bu tür artık gerektiğinde bilgisayar hafızasından silerek olarak, gizli tutulmalıdır metni temsil eder.

SecureString sadece o kadar hiçbir diğer uygulamaların dinleyebilir bellekte iken şifreleyerek) 1 ile bellek içindeki şifreyi korumak ve onunla bitirdiğinizde 2) bellekten çıkarmadan olacaktır. Bir exe içine şifrenizi derlemek

, hacker kolaylıkla orada şifreli olsa bile adresinden elde edebilirsiniz. Aslında, onu exe'den almak, onu bellekten almaktan çok daha kolaydır. Şifrelemek sadece biraz daha zorlaştıracak, ancak yetenekli bir bilgisayar korsanı anahtarı bulduktan sonra şifresini çözebilir. Gseg tarafından gömülü bir kaynak olarak derlenmesi ve bir metin dosyasında şifrelenmesi öneriniz için öneriniz her ikisi de aynı konuya sahip olacaktır.

Tüm şifreleme anahtarına aşağı gelir

, nerede saklanır? Eğer dosyayı exe dosyasında saklıyorsanız (uygulamanızın şifresini çözebilmeniz için ihtiyaç duyduğunuzdan), bilgisayar korsanı anahtarı bulabilir ve şifrenizi şifresini çözmek için kullanabilir. Onu, hackerın ulaşamayacağı bir şekilde exe dışında depolamanız gerekecektir. Bu yüzden düşünmeniz gereken asıl konu: Şifreleme anahtarının nerede saklanacağı, uygulamanın okunabilmesi için saklanır, ancak bilgisayar korsanı bunu yapamaz mı?. uygulama anahtarını alırken

Şimdi, o zaman şimdi bunu bellekte iken korumak ve sonradan kaldırmak için SecureString değişkene şifresini şifresini çözebilir.

İlgili konular