In questo post trovate illustrata una
procedura per aggiungere un po' di protezione ai vostri sorgenti c#
relativi ad applicazioni windows forms, in certe condizioni l'applicazione rende inutili sia decompilatori che deoffuscatori e protegge il codice sorgente anche non offuscato,
qui il progetto https://sourceforge.net/projects/winformsprotector/
qui il progetto https://sourceforge.net/projects/winformsprotector/
Uno scenario possibile : abbiamo
un eseguibile da far testare da altri ma non vogliamo cederlo per il
momento, possiamo quindi crittografare l' eseguibile ed andare sulla
macchina di prova con il nostro exe crittografato ed il software per
decrittografarlo ovvero inserire la password per decrittografarlo e
caricarlo in memoria .
Si può procedere nel modo seguente mediante il software WinFormsProtector :
1) dopo aver selezionato il file eseguibile da proteggere (con il bottone "choose executable to encrypt") e scelta la password e premuto il bottone "choose path file to encrypt" per scegliere il percorso dove salvare il file, si può quindi procedere alla creazione del file crittografato premendo il bottone "encrypt file into path" ,il file creato si chiama "encryptedExe.encrypt"
2) installazione di WinFormsProtector sulla macchina di test sul quale verrà caricato il file crittografato di cui sopra
3) inserimento della password utilizzata per crittografare il file
4) selezione del file da decrittografare premendo il bottone "choose file to decrypt"
5) premere il pulsante "decrypt file,load in ram and run"
quindi carichiamo il file in memoria e qui lo decrittografiamo e lo eseguiamo,in pratica carichiamo l'Assembly in questo modo :
Assembly
assembly1 = Assembly.Load(exe);
dove
exe è l'array di bytes che compone l'eseguibile
in
questo modo sulla macchina non esiste il file che intendiamo
proteggere in chiaro ma esiste solo crittografato oppure in memoria ,
nel file eseguibile che s' intende
proteggere(l'exe chiamato) bisogna modificare il main in questo
modo:
in pratica aggiungete un metodo Start()
che chiama il primo Form della vostra applicazione
namespace
Ethical_Hacking
{
static
class
Program
{
[STAThread]
static
void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Start();
}
//il
metodo seguente permette di superare gli eventuali problemi con il
metodo SetCompatibleTextRenderingDefault
public
static void
Start()
{
Form1
f = new
Form1();
f.ShowDialog();
}
}
}
nell'exe
chiamante avremo quindi :
Assembly
assembly1 = Assembly.Load(exe);
var
programType1 = assembly1.GetTypes().FirstOrDefault(c => c.Name ==
"Program");
MethodInfo
method1 = programType1.GetMethod("Start",
BindingFlags.Public
| BindingFlags.Static);
method1.Invoke(null,
new
object[] {
});
ovvero
viene invocato il metodo Start() .
Se il file exe da proteggere usa dei riferimenti bisogna aggiungere questi riferimenti nel progetto (eseguibile) chiamante , ad esempio ,se usiamo NewtonSoft.json nel programma da proteggere anche il programma chiamante deve avere NewtonSoft.json nei suoi riferimenti
Nel
codice sorgente troverete due progetti zippati :WindowsFormsProtector
e Ethical_Hacking ,l primo è l'exe chiamante il secondo è l'exe chiamato (ovvero quello protetto) , qui il codice : https://sourceforge.net/projects/winformsprotector/
Qui altri programmi con lo stesso scopo