BHC (Batch Hide Compiler 2.2) by WHK [Proyecto para abril Negro]

Iniciado por WHK, 4 Mayo 2009, 04:48 AM

0 Miembros y 5 Visitantes están viendo este tema.

WHK

Bueno, ya lo actualicé a la versión 2.1 con el editor con soporte Highlighting y al stub le eliminé el form haciendolo 2kb mas liviano jaja, no es mucho pero algo es algo. Alguien por ahi me dijo que estaba haciendo el mismo stub en ASM que pesaba 3KB XD

La descarga es la misma, actualizaré el primer post.

~~

CitarLo que pasa es que cuando insertas el icono o comprimes el binario cambia totalmente el valor total del peso del binario así que el numero de caracteres ya no sirve

Claro, de ahí la gracia de usar la función que te he pasado, por muy grande o pequeño que sea tu icono, o aunque lo comprimas muuuucho, la función te seguirá diciendo exactamente el byte en el que empieza el EOF, es decir, el byte en el que empieza tu estructura
No te hace falta saber el tamaño del ejecutable si quiera ;)

De todas formas, como bien te han "chivado" por msn un ejecutable con EOF data es fácilmente detectable. Por ponerte un ejemplo, el EOF del bifrost es detectado y no permite cifrado (que yo sepa) por que el servidor lo usa para sacar de él los datos.
Una buena opción sería ampliar la última sección lo justo para que te entren todos los datos :P

Salu2, muy chulo el coloreado

WHK

Bueno, implementé muchas cosas a la siguiente version que es la 2.2 como por ejemplo que ahora la ventana puede hacerse semitransparente y puedes elegir el rendimiento y la cantidad de memoria que quieres usar en los efectos graficos, puedes volver al modo clasico, etc y todo se puede guardar en las configuraciones para no tener que estar configurando una y otra ves.

El otro cambio fue que la estructura del stub la hize mejor haciendote caso E0N con tu función aunque tenia algunos errores pero lo solucione, como por ejemplo si el archivo no existe o el archivo no es exe o es corrupto, etc en caso de que alguien por equibocacion le ponga .scr en ves de .exe, etc agregandole algunas sentencias "if" para saber si continuar o debolver cero.

Despues del stub van 32 caracteres que es el hash con el que se descifra el contenido siguiente que estará cifrado en rc4, cuya clave puede ser establecida manualmente en la sopciones o generada al azar, si la clave es menor a los 32 bts entonces se rellenará con ceros. Despues se procesará y hará el resto todo normal como siempre.
Esto es momentaneo mientras tanto que busco la forma de poner el contenido antes del EOF o ver la posibilidad de duplicar el EOF agregando un clon al final del cifrado haciendo creer que todavía no llegaba a su final (no se si funcione pero lo probaré).

No voy a publicar nada todavía porque no quiero publicar cosas que funcionen a medias, o sea,, cuando esté probado y testeado y verifique que si funciona bién entonces iré publicando las futuras versiones.

Tube un pequeñisimo problema jajajaja y es que cuando tube todo listo para hacer mi prueba y generar el stub me pegó un pantallazo azul  :D :D de volcado de memoria asi que revisé el código para ver si habia algun loop sin final o alguna funcion que estubiera haciendo sobrecarga... medí el uso de memoria, el uso del procesador, paginacion de archivos y todo iba normal.. genero el stub y paff el pantallazo jajjaja asi que no se si sea mi pc que está fallando algo o es el programa, asi que le estoy pasando el memtest para ver si la memoria tiene fallas o despues le pasaré un scandisk para ver si alguno de los dos discos tiene algun clouster malo o que fucking está pasando. Ojala no sea el procesador ni la placa jaja pero bueno, mientras tanto estaré acá en mi lap y cuando buelva a mi pc continuaré haciendo las pruebas para poder seguir con el proyecto.

También pensaba añadir sobre el mismo buffer que irá cifrado en rc4 archivos extras que pudieran ejecutarse al momento de ejecutarse el bat tal como si fuera un joiner y así podrias agregar una imagen y lanzarla en ves de lanzar el mensaje de error o incluir el avkiller de mad antes de la ejecución del bat y así poder descargar el archivo final desde un servidor ftp.. etc etc etc en fin, los usos serían muchisimos.

aah, se me olvidaba decir que ya le di soporte para ejecutar scripts js y vbjs ejecutables y posiblemente le agregue soprte para hta.

Todo eso en la proxima version cuando vea que le pasa a mi pc jajajja.

Arkangel_0x7C5

prueba con una virtual, si es tu programa pasara tambien en la virtual. aunque me extraña. no estas usando drivers ni nada para prodicir una BSOD.

Saludos

дٳŦ٭

Felicidades, siempre haciendo programas muy útiles  :)


Con sangre andaluza :)


WHK

Ya vi lo que pasaba, mi pc estaba muy saturada y cuando generaba el ejecutable yo le daba click a la generación del hash que eran multiples valores al azar y se me iba el uso de cpu a las nuves y terminaba con el pantallazo asi que lo eliminé y lo reemplazé por un simple hash de md5 y ni si quiera el usuario tendrá que modificarlo ya que esto se hace al azar cada ves que se genere un ejecutable nuevo asi que el hash de descifrado del rc4 es al azar y por lo tanto el contenido del cuerpo también lo será en carácteres, si lo abres con el block de notas antes podías ver el script.. ahora solo verás carácteres basura asi que el antivirus ya no podrá detectarlo pro esta vía (si lo tenian pensado hacer xD ) pero de todas formas seguiré viendo como integrarlo dentro del binario en ves del termino.

Estoy terminando unos detalles y lo lanzaré al publico.

CitarFelicidades, siempre haciendo programas muy útiles  :)
Grax  :D

Por lo menos si no le gano por código a mad talves pueda por el diseño jajajajjaa  :laugh:, de todas formas estuve viendo unas versiones antiguas de la fuente del joiner de mad y el también coloca los datos al final del EOF asi que si logro ponerlo dentro ya podría hacer la diferencia  :xD

"Mad, este año si tendrás competencia  :¬¬"

WHK

Bueno, ya actualicé a la versión 2.2 , ahora los datos van cifrados y le agregué soporte para ejecución de scripts en Batch, javascript y VBScript con múltiples ejemplos de todo tipo para cada lenguaje.

La ventana es opcionalmente semi-transparente.

No creo que buelva a sacar una versión nueva en bastante tiempo mas porque justo que habia terminado de exportar el archivo binario del editor de me reinicia la pc por falta de memoria  ;D comenzando el volcado etc etc, cuando reinicié me encontré con que el archivo fuente del editor estaba vacío al igual que el archivo del proyecto asi que la versión mas reciente que dejé backup es la 2.0  :xD asi que tendré que diseñar todo otraves y después comenzar a actualizar cosa que me dió weba jajaja pero lo haré de todas formas.

PD: si hay algún error en el editor lo mas probable es que aparezca en forma de alerta en ves de mostrarse en el texto de estado ya que al parecer no alcanzó a exportarse cuando los controles de errores "on error ..." estaban sin comentar, pero de tdoas formas es un detalle porque funciona bién igual, ya estaba testeado y lo iba a publicar pero cuando modifiqué los controles de errores y estaba exportando se crasheó y no se si el ejecutable va o no con control de errores pero el funcionamiento es el mismo.








WHK

Bueno, estaba haciendo el stub 0.6 pero está medi complicado..
Lo inicié en c++:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <time.h>
#include <windows.h>

/*
// BOTONES
#define MB_OK 0                    //botón "Aceptar"
#define MB_OKCANCEL 1              //botones "Aceptar" y "Cancelar"
#define MB_ABORTRETRYIGNORE 2      //botones "Anular", "Reintentar", "Omitir"
#define MB_YESNOCANCEL 3           //botones "Sí", "No" y "Cancelar"
#define MB_YESNO 4                 //botones "Sí" y "No"

// ICONOS
#define MB_ICONINFORMATION 64      //ícono de información
#define MB_ICONEXCLAMATION 0x30    //ícono de alerta, signo de exclamación
#define MB_ICONERROR 16            //ícono de error, alto, tacha roja
#define MB_ICONQUESTION 32         //ícono de pregunta
*/

// Funciones
bool file_exists(char *url);

int main(void){
char path[256];
char pid_path[256];
char cmd_exec[256];
char *homepath = getenv("homepath");
char *homedrive = getenv("homedrive");

srand(time(NULL));
sprintf(path,     "%s%s\\%d.bat", homedrive, homepath, rand());
sprintf(pid_path, "%s%s\\%d.pid", homedrive, homepath, rand());
sprintf(cmd_exec, "\"%s\" && echo. > \"%s\"", path, pid_path);

FILE *script;
script = fopen(path, "a");
if(!script){ return -1; }
// fprintf(script, buff);
fprintf(script,
"dir"
"> test."
"txt"
);
fclose(script);

MessageBox(NULL,
"ho"
"la"
,
"E"
"rror"
, MB_OK | MB_ICONERROR);

WinExec(cmd_exec, SW_HIDE);
while(1){
  if(file_exists(pid_path)){
   break;
  }
}
remove(path);
remove(pid_path);
return EXIT_SUCCESS;
}

bool file_exists(char *url){
FILE *existe = fopen(url, "r");
if(existe){
  fclose(existe);
  return true;
}else{
  return false;
}
}


La idea era que el BHC generara el stub.cpp y modificara los datos del script y del messagebox como opcional y con un compilador externo generar el stub pero el compilador resultó muy pesado con un chingo de librerías asi que no fue buena idea.

También tenía pensado generar el ejecutable y editar hexadecimalmente editar strings claves como {script} o {mensaje} pero hablando con algunos amigos que saben de reversing está bién cabrón.

La otra opción era poder incluir datos dentro del stub ejecutable al igual como ya lo he estado haciendo pero antes del termino del EOF tal como se dijo al comienzo pero ni idea de como hacerlo y habría que calcular el tamaño exacto del binario para no generar un ejecutable corrupto y poner los datos en un lugar que no interfiera con la estructura pe.

alguien tiene alguna idea?, estuve buscando ejemplos de packers pero todos tienen la misma siencia de poner los datos al final de EOF y no me sirven y no se me ocurre porque no tengo mcuha experiencia con la estructura pe aunque si lo entendiera no sabría donde inyectar valores muertos sin interferir en la ormal ejecución del ejecutable.  :-\

Karcrack

Yo utilizo este método para mis animalitos en FASM:

Declaro la cadena como un montón de 'A':
Código (asm) [Seleccionar]
sUrl db 255 dup ('A')

Luego desde un editor Hex. busco el montón de 'A' y apunto la posicion en el Builder, luego simplemente he de añadir la cadena que quiero (sustituyendo las 'A') y un carácter nulo al final.

;D ;D

No se si con C sera similar....

Saludos ;)

~~

CitarEl otro cambio fue que la estructura del stub la hize mejor haciendote caso E0N con tu función aunque tenia algunos errores pero lo solucione, como por ejemplo si el archivo no existe o el archivo no es exe o es corrupto, etc

Claro, eso no se lo añadí por que buscaba una función que no añadiese prácticamente peso al ejecutable, si quieres algo más elaborado puedes incluir directamente las estructuras del PE y comprobar todo, aunque lo veo poco útil y más en tu caso, que es tu stub...


En cuanto a lo del EOF puedes ampliar el tamaño de la última sección y meter ahí los datos. Un poco más explicado:

Todas las secciones al final suelen tener ceros, ya sean más o menos, si el espacio te llega puedes meter ahí tus datos y luego utilizar el VirtualSize para saber donde empezarían los ceros, que realmente es donde has metido tu tus datos. Si tus datos no entran siempre puedes ampliar el RawSize.

El método genérico sería poner una firma al principio de tus datos, ampliar la sección en caso de que fuera necesario y luego buscar la firma y leerlos tranquilamente. De cara al AV esos datos serían parte del código de la última sección, supongo que no saltaría :P


Otra opción más simple es usar resources...

Salu2

Citar
   
Hubo un error mientras se enviaba este mensaje.
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Cachis.. xD Si, también se podría hacer Karcrack, lo malo es que un script puede ser o muy grande o muy pequeño, así que lo veo poco eficiente...