Domanda Reversing Deoffuscare questo eseguibile .net?

Stato
Discussione chiusa ad ulteriori risposte.
Non ho ancora guardato il file, ma guarda che non è detto che un processo di offuscazione sia reversibile
se per esempio io mofidico i name space con nomi random, non c'è nulla che me li porti indietro.

--- Aggiornamento Post ---

ah ho visto ora di cosa si tratta... apparte che nel topic dedicato l'ho reversato e ho spiegato come funziona, non trovo educato da parte tua chiedere la deoffuscazione di un tool creato nel forum stesso....
 
Ultima modifica:
Mmm... sono d' accordo con Predator, sul fatto che non sia il massimo chiedere una cosa simile, però visto che cmq sul thread ufficiale abbiamo praticamente messo a nudo le protezioni che mette in atto credo che per sta volta ti posso aiutare :)
Questo vale per la protezione che modifica un byte particolare del file, infatti và a modificare il valore della variabile NumberOfRvaAndSizes, membro della struttura _IMAGE_OPTIONAL_HEADER, e che serve da indice per determinare il numero di entry da passare ad un altro membro della struttura, ovvero DataDirectory, che è un array che indica dove sono collocate le varie directory (Import,Export bla bla..).
Certo, a fissare un eseguibile "protetto" in questo modo ci vuole un nanosecondo ed un hex editor xd però se uno vuol fare prima, senza aver la noia di stare ad aprire CFF (o quel che usa xd) passiamo subito al source di un piccolo deobfuscator che ho scritto per l' evenienza:
Codice:
/* 
  - EvilProtector 2.8 Deobfuscator
  - Created by Zyrel
  - Don't use this software for lamering please
  - Syntax: Deobfuscator.exe file_to_deobfuscate.exe
*/
#include <windows.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
   HANDLE hFile;
   BYTE *BaseAddress;
   DWORD FileSize, BR;
   IMAGE_DOS_HEADER *ImageDosHeader;
   IMAGE_NT_HEADERS *ImageNtHeaders;

   if (argc < 2)
   {
      printf("\n+Numero argomenti insufficiente.\n");
      return -1;
   }
   hFile = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

   if (hFile == INVALID_HANDLE_VALUE)
   {
      printf("+Cannot Open the File\n");
      return -1;
   }

   FileSize = GetFileSize(hFile, NULL);
   BaseAddress = (BYTE *) malloc(FileSize);

   if (!ReadFile(hFile, BaseAddress, FileSize, &BR, NULL))
   {
      free(BaseAddress);
      CloseHandle(hFile);
      return -1;
   }

   ImageDosHeader = (IMAGE_DOS_HEADER *) BaseAddress;
   ImageNtHeaders = (IMAGE_NT_HEADERS *)(ImageDosHeader->e_lfanew + (DWORD) ImageDosHeader);

   if (ImageNtHeaders->OptionalHeader.NumberOfRvaAndSizes == IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT) {
   printf("\n+Protection found...");
   BYTE Fix[] = {0x10};
   SetFilePointer(hFile, 0xF4,NULL, FILE_BEGIN);           
   if(!WriteFile(hFile, Fix, sizeof(Fix), &BR, NULL))
    {               
           printf("\n+Error: Unable to write file\n");
           CloseHandle(hFile);
           free(BaseAddress);
           return -1;
    }
     printf("\n+Protecion removed...");
   }else{printf("\n+The file does not seem to be protected from EvilProtector 2.8 :(\n");}

   free(BaseAddress);
   CloseHandle(hFile);

   return 0;
}
Credo che sia abbastanza chiaro ed intuitivo, per il secondo tipo di protezione usata da questo Obfuscator, ovvero il cifario di Varnam non credo ci sia bisogno di scrivere niente xd :)

Spero che il source ti possa aiutare, è bello pronto, compila ed esegui :)
 
Stato
Discussione chiusa ad ulteriori risposte.