Home | Chi sono | Contattami
 

Progr. lineare

Delphi
 
Componenti
  Database
 
Miei articoli

Windows

Miei articoli 

 

Da .exe a .dll: Parte 4

Nell'articolo articolo79.htm abbiamo visto come inglobare una dll all'interno di un eseguibile e lasciare che sia l'eseguibile stesso ad estrarla ed a mapparla nel suo spazio di memoria senza prima salvarla su disco. Ora aggiungiamo un'altra caratteristica: andiamo a criptare la dll e quindi l'eseguibile dovrÓ eseguire la decriptazione prima di mappare il contenuto della risorsa nel suo spazio di memoria. Per la criptazione facciamo riferimento all'articolo articolo76.htm dove Ŕ stata esposta una implementazione dell'algoritmo di Rijndael. Useremo il programma in allegato all'articolo stesso per creare la versione criptata della nostra dll (l'output Ŕ un file il cui nome Ŕ dato dal nome originale con la stringa "crypted" attaccata in fondo). Vediamo di seguito come implementare il sorgente del .exe di caricamento inserendo la procedura per il decrypting:

program Runner; uses Windows, Classes, SysUtils, BTMemoryModule, uUtilsCrypto; {$R prog.res} //contiene la dll criptata type TMainProc = procedure(); stdcall; var pMemoryModule: PBTMemoryModule; MainProc: TMainProc; function LoadDllResourceEncrypted(resName: string): PBTMemoryModule; var rs: TResourceStream; mem: TMemoryStream; begin try rs := TResourceStream.Create(HInstance, resName, RT_RCDATA); mem := TMemoryStream.Create; //decripto la dll RDLEncryptStreamCBC(rs, mem, False); Result := BTMemoryLoadLibary(mem.Memory, mem.Size); finally rs.Free; mem.Free; end; end; begin pMemoryModule := LoadDllResourceEncrypted('a01'); if pMemoryModule = nil then Exit; MainProc := TMainProc(BTMemoryGetProcAddress(pMemoryModule, 'MainProc')); MainProc(); BTMemoryFreeLibrary(pMemoryModule); end.

exe_convertito_dll_resource_encrypted.7z

 

 
 
Your Ad Here