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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9
11  Seguridad Informática / Abril negro / [ABRIL NEGRO][SRC][C++] Small EXE breaker en: 27 Abril 2010, 21:11 pm
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  ;) :)
12  Programación / Programación C/C++ / Re: Problemas con un crypter en VB6/C en: 20 Abril 2010, 18:06 pm

PD : Dudita segundona, porque si hago un MessageBox a un LPSTR no funciona?  :-\


Puede ser porque la estructura de MessageBox() sea:

Código
  1. int MessageBox(
  2.  __in  HWND hWnd,
  3.  __in  LPCTSTR lpText,
  4.  __in  LPCTSTR lpCaption,
  5.  __in  UINT uType
  6. );

Intenta pasarlo a un int  ;) :xD

Saludos  :)

PD: ¡me hiciste caso con HeapAlloc()  ;D! ¿fue por lo que te dije?
13  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Se puede borrar un post? en: 11 Abril 2010, 01:05 am
EPI no te preocupes, no te averguenzes, ahora recopilo tus posts vergonzosos, creo un tema para ello y lo ponemos como "Tema destacado" en el cabezal del foro.  :laugh:

Nada, no te preocupes, es normal preguntar cosas básicas y mas si en ese momento necesitavas esa ayuda. Creo que no debería preocuparte, no le des importancia.

Un saludo.

Jajaja! Gracias  ;)
14  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Se puede borrar un post? en: 11 Abril 2010, 00:36 am
Esa idea que si haces una pregunta, sos un ignorante y tendrás esa imagen de ignorante para siempre es lamentable y hace mucho que se instalo en el foro en ciertas secciones. Lo peor es que muchos usuarios si siguen esa regla y califican a otros usuarios por haber preguntado algo en su momento.

Por esa razón me llueven preguntas de C/C++ por pm que nunca se postean, y por lo que pienso sobre todo esto hace rato que deje de responderlas hasta que no las vea en un post (la mayoría de ellas por lo menos)

La idea principal de un foro es poder preguntar, que te respondan, y que no solo aprendas vos si no también el resto de las personas que lean ese post. Ninguna persona con algo de madurez te juzgara por haber preguntado algo en su momento, por lo menos mientras vos tampoco juzgues a nadie por lo mismo.

Algunos tienen preguntas de como juankear hotmail, y como veras nunca pidieron que se las borren  ;D.

Saludos!


creo que lo que pedis termino siendo mas vergonzoso que el post que hayas realizado hace tiempo. por mi parte si hubiera preguntado si pueden borrarme un post donde no sabia y pregunte, me daria tanta verguenza publica como para no entrar mas en el foro.

imaginte la situación, todo mundo se tendria que borrarse miles de post proque antes no sabian y ahora le da verguenza...digo yo..¿venguenza de que? ¿de preguntar? si es asi nadie hubiera preguntado.

me imagino los grandes usuarios de este foro borrandose los post donde preguntaron cuando no sabian algo :xD...la verdad no estoy para nada de acuerdo con esto.y eso de que van a pensar mal, es solo una mala idea tuya... :xD

¡Perdón! Es verdad. Mis disculpas a los dos (no hago broma).

Saludos.

PD: me acuerdo que hice un post, que decía como hacer un virus utilizando std::cout... jajaja! Aun me acuerdo.
15  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Se puede borrar un post? en: 10 Abril 2010, 20:25 pm
Si seguro, en eso consiste la humildad, saber quien eres, sentirte orgulloso, y poder decir soy alguien mejor que en aquel tiempo .

 :¬¬ ok. Supongo que no se puede. ¿Algún admin, co-admin, mod global lo sabe?


Tomaste a mal lo que dije ? :S , yo solo intente darte un consejo que solucionara tu problema, si te moleste disculpame.

Nah, tranquilo. Pero es que me avergüenzo de haber sido tan estúpido y no pensar las cosas antes de hacerlo. No estoy enfadado  :)

Depende del post y de la razón que des, por ejemplo podrías pedir que se te borre un post de "Presentaciones aquí" para que no te vuelva a salir el post en "Mostrar nuevas respuestas a tus mensajes." xD En todo caso puedes mandarle un pm a un global/coadmin y nosotros miraremos si vale borrar el post o no (pues junto con el post también hay mensajes de otros usuarios y puede que también resulte útil para otras personas)

Ok! Gracias. Lo hacía porque si alguien ve esto pensará que soy idiota y, además, se tiene que hacer limpieza del foro, para que sea el mejor, no?

Saludos  ;)
16  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Se puede borrar un post? en: 10 Abril 2010, 19:12 pm
Si seguro, en eso consiste la humildad, saber quien eres, sentirte orgulloso, y poder decir soy alguien mejor que en aquel tiempo .

 :¬¬ ok. Supongo que no se puede. ¿Algún admin, co-admin, mod global lo sabe?
17  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Se puede borrar un post? en: 10 Abril 2010, 19:03 pm
No debes avergonzarte de ti, ni de tus post, el pasado es lo que te hizo lo que eres ahora y sea lo que sea debes estar orgulloso.



¿Seguro?

Saludos  ;)

PD: lo que quería hacer, era un MessageBox. En estos tiempos no sabía que eran las API's  :xD
18  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Se puede borrar un post? en: 10 Abril 2010, 18:57 pm
muahhahaha voy a ver todos tus mensajes a ver de cual te averguenzas, jejeje...
Lo dudo, amenos de que tengas un rango diferente a un usuario comun y corriente...
;D

A ver si nos dan la solución algún jefecillo... ¡de verdad que daba pena (y doy)!
19  Foros Generales / Sugerencias y dudas sobre el Foro / ¿Se puede borrar un post? en: 10 Abril 2010, 18:52 pm
Estaba mirando mis POSTS antiguos  :rolleyes: y quería eliminar alguno, porque me parece bastante vergonzoso. La pregunta es: ¿se puede eliminar un POST creado por mí?

Saludos  :P
20  Foros Generales / Sugerencias y dudas sobre el Foro / Re: [SUGERENCIA] API's (Windows, Linux, MSN, Google, ...) en: 8 Abril 2010, 21:18 pm
Es que las normas de C/C++ dicen que es RECOMENDABLE. Esto podría ser NORMA.

EPI, no leíste nada de lo que puse  ;-)

Entoces cuando lo ponen? XDDDDDDD

Con suerte nunca, igual ya seria hora que dejemos de opinar y veamos que opina el staff al respecto ya que no tiene sentido discutir con una idea que posiblemente tenga un rotundo no desde el principio.

Saludos


Gracias por el alago  :-[ Sí que me leí... como tampoco se hará el subforo, no hace falta más comentar.
Páginas: 1 [2] 3 4 5 6 7 8 9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines