2011-10-26 7 views
7

Ho un po 'di sicurezza incorporato in un programma lato client che scarica una DLL dal web e chiamato una funzione all'interno di quella DLL. La DLL ha il nome sicuro e la funzione nella DLL utilizza Assembly.GetCallingAssembly() per determinare l'assembly chiamante in modo che sia possibile ottenere in modo accurato un percorso per il programma che lo ha chiamato. Da lì eseguiamo un controllo hash dell'assemblaggio e verifichiamo che sia corretto.Modo per determinare l'assembly vero e proprio

Abbiamo persone che si sono attaccate in modalità di trust completa e sono in grado di falsificare la chiamata GetCallingAssembly in modo che punti all'eseguibile reale, mentre eseguono una versione modificata di esso. C'è qualcos'altro oltre allo GetCallingAssembly che posso usare per ottenere il vero chiamante? Alcuni callstack o qualcosa che può fornire il vero eseguibile dal GetCallingAssembly sembra essere facilmente falsificato.

+0

provare il metodo 'GetEntryAssembly' invece – hazzik

+0

Attenzione, se si consente il pieno affidamento, possono anche correggere GetEntryAssembly. Se si consente il pieno affidamento, possono anche correggere la DLL scaricata e disabilitare il controllo hash. –

risposta

3

Non è possibile eseguire questa operazione mentre si è in modalità Fiducia totale. La piena fiducia significa che le persone possono fare cose come spoofing. Ecco un discusison simile: reflection is possible on obfuscation

0

io non sono sicuro di come sicuro lo è, ma ho usato in passato per ottenere il percorso di avvio:

string startup_path = 
    Path.GetDirectoryName(typeof(SomeClassInDll).Assembly.Location); 
+0

Penso che questa persona stia usando un qualche tipo di strumento che sta cambiando il CallingAssembly, Se disabilitano l'hash lo rileviamo, telefona verso casa al server con un hash che viene generato dall'interno della dll, la dll cambia alcune chiavi segrete all'interno del quale cambierà la risposta, ha cancellato quella chiave segreta, più l'hash dell'assembly per determinare se è stata modificata e che stanno utilizzando l'assembly hash corretto. Sto cercando di trovare alcuni metodi che posso guardare che potrebbe essere un po 'più difficile da spoofing. Come lo stack delle chiamate forse? – willthiswork89

Problemi correlati