elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: [Aporte] Mejores practicas en Java


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware
| | |-+  Abril negro (Moderadores: Man-In-the-Middle, WHK, fary)
| | | |-+  [ABRIL NEGRO][SRC][C++] Small EXE breaker
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [ABRIL NEGRO][SRC][C++] Small EXE breaker  (Leído 6,852 veces)
E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
[ABRIL NEGRO][SRC][C++] Small EXE breaker
« en: 27 Abril 2010, 21:11 »

Small EXE breaker



Bueno, después de tantos días decidiendo si me presento a este concurso que tanto me gusta, mis amigos me convencieron para programar algo y esto es lo que ha salido... como algunos saben, no soy muy creativo pensando ideas y sólo he podido hacer este programa.

¿Qué es?
Small EXE breaker, es literalmente un cortador de exes. Está todo programado en C++ e incluye un mínimo funcionamiento de PE, el cual soy muy novato.
Como bien he dicho, es un cortador de exes y, se le pueden dar muchos usos, uno de los cuales indetectar un exe (de malware) o conseguir la firma de AV's, ...

Inconvenientes
Hace poco que programo y, lógicamente he hecho este humilde programa lo más bien que he podido (no he tenido mucho tiempo para testearlo). Se encontrarán algunas cosas a mejorar y sobretodo muchos errores, si los encontráis, por favor, comunicármelo que me servirá de gran utilidad en un futuro... no me enrollo más y os muestro el code:

Código
  1. //-------------------------------------------------------------------------------------------------------------------------
  2. //Título: Small EXE breaker
  3. //Autor: elprogramadorinformatico [EPI]
  4. //Fecha: 27-04-2010
  5. //
  6. //Se puede distribuir libremente este código, siempre que se mantenga esta cabecera
  7. //-------------------------------------------------------------------------------------------------------------------------
  8.  
  9. #pragma comment(lib,"shlwapi.lib")
  10.  
  11. #include <windows.h>
  12. #include <shlwapi.h>
  13.  
  14. int main()
  15. {
  16. HANDLE hGetProcessHeap = GetProcessHeap();
  17.  
  18. //Estructuras para PE
  19. PIMAGE_DOS_HEADER IDH;
  20. PIMAGE_NT_HEADERS INTH;
  21.  
  22. //Variables para el nombre del archivo y los bytes
  23. LPSTR lpFileName = (LPSTR)HeapAlloc(hGetProcessHeap,HEAP_ZERO_MEMORY,MAX_PATH);
  24. DWORD dwNumberOfBytesToWrite = 0;
  25.  
  26. //Escribimos el nombre del fichero
  27. HANDLE hConsoleWrite = GetStdHandle(STD_OUTPUT_HANDLE);
  28. DWORD dwConsoleBytes = 0;
  29. CHAR cConsoleText[] = "Escribe el nombre del fichero (ejemplo: C:\\fichero.exe):";
  30. WriteFile(hConsoleWrite,cConsoleText,sizeof(cConsoleText),&dwConsoleBytes,0);
  31.  
  32. //Lo recibimos
  33. DWORD dwReceiveBytes;
  34. HANDLE hReceiveFileName = GetStdHandle(STD_INPUT_HANDLE);
  35. ReadFile(hReceiveFileName,(LPVOID)lpFileName,MAX_PATH,&dwReceiveBytes,0);
  36.  
  37. //Hacemos este if(), porque si no el PathFileExistsA() no detecta ningún archivo aunque exista por culpa de \r y \n
  38. if (dwConsoleBytes > 2)
  39. {
  40. LPSTR lpRealFile = (LPSTR)lpFileName + dwConsoleBytes - 2;
  41. *lpRealFile = 0;
  42. }
  43.  
  44. //Escribimos la cantidad de bytes que queremos
  45. HANDLE hConsoleWrite1 = GetStdHandle(STD_OUTPUT_HANDLE);
  46. DWORD dwConsoleBytes1 = 0;
  47. CHAR cConsoleText1[] = "Escribe la cantidad de bytes que deseas:";
  48. WriteFile(hConsoleWrite1,cConsoleText1,sizeof(cConsoleText1),&dwConsoleBytes1,0);
  49.  
  50. //Lo recibimos
  51. DWORD dwReceiveBytes1;
  52. HANDLE hReceiveFileName1 = GetStdHandle(STD_INPUT_HANDLE);
  53. ReadFile(hReceiveFileName1,(LPVOID)dwNumberOfBytesToWrite,MAX_PATH,&dwReceiveBytes1,0);
  54.  
  55. //Hacemos este if(), porque si no el PathFileExistsA() no detecta ningún archivo aunque exista por culpa de \r y \n
  56. if (dwConsoleBytes1 > 2)
  57. {
  58. DWORD dwRealBytes = dwNumberOfBytesToWrite + dwConsoleBytes1 - 2;
  59. dwRealBytes = 0;
  60. }
  61.  
  62. if(PathFileExistsA(lpFileName))
  63. {
  64. //Abrimos la ruta del exe
  65. HANDLE hFile = CreateFileA(lpFileName,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
  66.  
  67. //Comprovamos si el archivo existe
  68. if(hFile == INVALID_HANDLE_VALUE)
  69. {
  70. MessageBoxA(0,"No se ha podido crear el archivo","Archivo no creado",0);
  71. return 0;
  72. }
  73.  
  74. //Miramos su tamaño
  75. DWORD dwNumberOfBytesToRead = GetFileSize(hFile,0);
  76.  
  77. //Esto nos servirá para después, tener cada parte de X bytes
  78. DWORD dwPartsOfBytes = dwNumberOfBytesToRead / dwNumberOfBytesToWrite;
  79.  
  80. //Reservamos memoria para el buffer del exe
  81. LPSTR lpBuffer = (LPSTR)HeapAlloc(hGetProcessHeap,HEAP_ZERO_MEMORY,dwNumberOfBytesToRead);
  82.  
  83. //Leemos el archivo
  84. DWORD dwNumberOfBytesRead;
  85. ReadFile(hFile,lpBuffer,dwNumberOfBytesToRead,&dwNumberOfBytesRead,0);
  86.  
  87. //Obtenemos la dirección PE y las diferentes cabeceras
  88. IDH = (PIMAGE_DOS_HEADER)&lpBuffer[0];
  89. INTH = (PIMAGE_NT_HEADERS)&lpBuffer[IDH->e_lfanew];
  90. DWORD dwSize = INTH->OptionalHeader.SizeOfHeaders;
  91.  
  92. //Lo cortamos en pedazos
  93. for(INT nNumberOfExe = 0;nNumberOfExe < dwNumberOfBytesToRead;nNumberOfExe++)
  94. {
  95. //Le ponemos nombres variables al nuevo exe
  96. LPSTR szFileName = (LPSTR)HeapAlloc(hGetProcessHeap,HEAP_ZERO_MEMORY,MAX_PATH);
  97.  
  98. wsprintfA(szFileName,"%s%d","C:\\particion_",nNumberOfExe);
  99.  
  100. lstrcatA(szFileName,".exe");
  101.  
  102. //Creamos el nuevo exe
  103. HANDLE hNewFile = CreateFileA(szFileName,GENERIC_READ+GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0);
  104.  
  105. //Le sobreescribimos la cabecera PE
  106. WriteFile(hNewFile,lpBuffer,dwSize,&dwNumberOfBytesRead,0);
  107.  
  108. //Continuamos escribiendo al final del archivo, si no se sobreescribirá
  109. SetFilePointer(hNewFile,FILE_END,0,0);
  110.  
  111. for(DWORD dwActualPart = 0;dwActualPart < dwPartsOfBytes;dwActualPart++)
  112. {
  113. //Sobreescribimos 100 bytes a cada parte
  114. WriteFile(hNewFile,lpBuffer + (dwActualPart * dwNumberOfBytesToWrite),dwNumberOfBytesToWrite,&dwNumberOfBytesRead,0);
  115. }
  116. }
  117.  
  118. //Liberamos la memoria
  119. HeapFree(hGetProcessHeap,0,lpBuffer);
  120.  
  121. //Cerramos los handles
  122. CloseHandle(hGetProcessHeap);
  123. CloseHandle(hFile);
  124. }
  125.  
  126. else
  127. {
  128. MessageBoxA(0,"Archivo no encontrado","No se ha encontrado el archivo",0);
  129. return 0;
  130. }
  131.  
  132. return 0;
  133. }



¡Espero que os guste y, criticarme cuanto queráis, que me servirá de mucha ayuda  ;)!

Saludos  ;) :)


« Última modificación: 28 Abril 2010, 18:04 por E.P.I. » En línea

La verdad nos hará libres
☺BADMAN

Desconectado Desconectado

Mensajes: 51


Este es un Moderador de CPH


Ver Perfil
Re: [ABRIL NEGRO][SRC][C++] Small EXE breaker
« Respuesta #1 en: 27 Abril 2010, 22:26 »

 :D Al paso que van , seras el ganador  EPI@elhacker.net XD  :silbar:


En línea

Experto en Biefrost.
Subseven User.
Especialista en crypters.
Tifa FAN
Batch Programer XD ;D
[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513


El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: [ABRIL NEGRO][SRC][C++] Small EXE breaker
« Respuesta #2 en: 27 Abril 2010, 22:28 »

EPI... te dije que eso no  serviria para indetectar, y posiblemente cazaria firmas de AV pero no Heuristica.
En línea

Zzombi

Desconectado Desconectado

Mensajes: 174



Ver Perfil WWW
Re: [ABRIL NEGRO][SRC][C++] Small EXE breaker
« Respuesta #3 en: 27 Abril 2010, 23:11 »

xDDD
no  les quedará más opción que dar a epi por ganador porque no se presento nada más hasta ahora

EPI@elhacker.net xDD
En línea

Dober-ManN

Desconectado Desconectado

Mensajes: 50



Ver Perfil
Re: [ABRIL NEGRO][SRC][C++] Small EXE breaker
« Respuesta #4 en: 28 Abril 2010, 02:16 »

xDDD
no  les quedará más opción que dar a epi por ganador porque no se presento nada más hasta ahora

EPI@elhacker.net xDD

Seee XD yo me iva  apresentar, pero estaba relacionado con la Denegacion de Servicio asi que como dijeron que no se podia desde ahora  :¬¬ , entonces no me voy a presentar.

Saludos
En línea

Littlehorse
All the world's a stage
Colaborador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: [ABRIL NEGRO][SRC][C++] Small EXE breaker
« Respuesta #5 en: 28 Abril 2010, 09:38 »

EPI no seas vago y aunque sea lee la ruta por consola. No la valides si queres pero mínimo una lectura de ruta, lo mismo con los bytes. Modifica eso para que no haya que compilarlo cada vez que se quiera dividir un ejecutable distinto o utilizar otra cantidad de bytes.
Tal vez quieras usar los argumentos de la consola, pero obviamente en ese caso si deberías validar los parámetros.

Saludos!
« Última modificación: 28 Abril 2010, 09:42 por Littlehorse » En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Re: [ABRIL NEGRO][SRC][C++] Small EXE breaker
« Respuesta #6 en: 28 Abril 2010, 18:07 »

EPI no seas vago y aunque sea lee la ruta por consola. No la valides si queres pero mínimo una lectura de ruta, lo mismo con los bytes. Modifica eso para que no haya que compilarlo cada vez que se quiera dividir un ejecutable distinto o utilizar otra cantidad de bytes.
Tal vez quieras usar los argumentos de la consola, pero obviamente en ese caso si deberías validar los parámetros.

Saludos!

Modificado... ya está arreglado, ahora se puede hacer desde consola. Y he modificado un poco el code.

Saludos  ;)

PD: aún no tengo la cuenta... me parece que habrá más gente que se presentará  ;)  :silbar:  :¬¬
En línea

La verdad nos hará libres
Karcrack


Desconectado Desconectado

Mensajes: 2.425


Se siente observado ¬¬'


Ver Perfil
Re: [ABRIL NEGRO][SRC][C++] Small EXE breaker
« Respuesta #7 en: 28 Abril 2010, 20:56 »

Hay mas gente presentada, y tu proyecto todavia no esta presentado... has de postear un link a este post con una breve descripcion en el tema principal del Abril Negro 2010 ;)
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: [ABRIL NEGRO][SRC][C++] Small EXE breaker
« Respuesta #8 en: 29 Abril 2010, 03:54 »

Sería bueno que comiences a estudiar estructuras de datos y profundizar un poco más la teoría del lenguaje, para no tan sólo utilizar API's...

Por lo demás, como eres novato aún, está bien por el momento.
En línea

skapunky
Electronik Engineer &
CoAdmin
***
Desconectado Desconectado

Mensajes: 3.669


www.killtrojan.net


Ver Perfil WWW
Re: [ABRIL NEGRO][SRC][C++] Small EXE breaker
« Respuesta #9 en: 29 Abril 2010, 15:57 »

Citar
EPI no seas vago y aunque sea lee la ruta por consola. No la valides si queres pero mínimo una lectura de ruta, lo mismo con los bytes. Modifica eso para que no haya que compilarlo cada vez que se quiera dividir un ejecutable distinto o utilizar otra cantidad de bytes.
Tal vez quieras usar los argumentos de la consola, pero obviamente en ese caso si deberías validar los parámetros.

Saludos!

Ves EPI, exactamente lo que te dije que deberias de poner, ahora ya si es algo mas genérico y de utilidad, no costava tanto agregar dos líneas mas  :P
En línea

Killtrojan Syslog v1.44: ENTRAR
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
iMacros + Captcha Sniper/Breaker
Scripting
wexwex 7 4,574 Último mensaje 27 Octubre 2014, 09:09
por carlosdx15
Openwrt barrier breaker 14.07..
GNU/Linux
Jenag 2 723 Último mensaje 24 Abril 2015, 19:32
por venadHD
Expulsado de Combo Breaker hasta 2018 por tocarle el culo a una chica
Noticias
wolfbcn 6 680 Último mensaje 3 Junio 2016, 17:29
por @synthesize
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines