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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Temas
Páginas: [1]
1  Programación / ASM / Pido Tutorial ASM x86 Windows en: 4 Noviembre 2013, 02:44 am
Buenos días.

Después de buscar un buen rato, les tengo que pedir algún tutorial de ensamblador de 32 bits para Windows. Todos los que encuentro son de 16 bits o sólo son cosas superbásicas (como los registros, los AND, OR... o llamar a MessageBoxA).

Me he comprado un libro de ensamblador con ejercicios, pero no entiendo nada. Tiene ejercicios del tipo invertir cadenas, etc.

Quisiera algún tutorial con algunos ejercicios o que expliquen cómo solucionar algunas cosas.

Gracias de antemano:).
2  Programación / Ingeniería Inversa / Duda OllyDbg Narvaja en: 29 Octubre 2013, 02:23 am
Buenos días :D.

Verán, me he metido de lleno con las cabeceras PE, el debugging y tal, en fin, el caso es que cuando debuggeo los ejecutables del tutorial de Narvaja, es un código muy breve y entendible.
Imagen de ejemplo: http://subefotos.com/ver/?6c38917b99e5e067be95a34afb2d8a55o.png

Y si yo ahora programo, por ejemplo, un HolaMundo en C y lo compilo con Microsoft Visual Studio C++, lo abro para debuggear y me aparece esto:
Imagen: http://subefotos.com/ver/?647bc4683ebdc7fd73287d2f04feb42co.png

Que no es absolutamente nada de lo que me he encontrado hasta ahora (sí, sé lo que significa ese main unicode, pero no consigo llegar al código ni nada, y no sé por qué no aparecía en los tutos de Narvaja, supongo que los exes estarán compilados en Win98 y con otro compilador)... Encima el código generado por Visual C++ está lleno de funciones como isDebuggerPresent(), y eso que le pongo que me compile como Release, no como Debug. Si pulso F9 no imprime Hola Mundo en el cmd, ya que me detecta que estoy usando un debugger.


Código en C compilado:
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[]) // Pongo un main "de toda la vida"
  4. {
  5.  printf("Hola Mundo\n");
  6.  
  7.  return 0;
  8. }

Una ayudita, por favor, esto me interesa de verdad.
3  Seguridad Informática / Hacking / Duda BufferOverflow (Extraño error) en: 26 Octubre 2013, 12:21 pm
Buenos días.

La duda que tengo no es relativa a los BoF, sinó más bien a un suceso extraño que ha sucedido.

Yo en mi máquina virtual WinXP abro MCV++ Express 2005, y compilo el programa vulnerable.cpp
Código
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. int LeerFichero(char *Fbuffer, char *Fnombre, int Limite)
  8. {
  9.  int c;
  10.  int n=0;
  11.  FILE *f;
  12.  f=fopen(Fnombre,"r");
  13.  while ((c=getc(f))!=EOF)
  14.  {
  15.    if(n<Limite)
  16.    {
  17.      Fbuffer[n++]=c;
  18.    }
  19.  }
  20.  Fbuffer[n++]=0;
  21.  fclose(f);
  22.  
  23.  return 0;
  24. }
  25.  
  26.  
  27.  
  28.  
  29. int FuncionVulnerable(char *cptr)
  30. {
  31.  char buff[300] = "Datos";
  32.  strcpy(buff,cptr);
  33.  printf("%s\n\n",buff);
  34.  
  35.  return 0;
  36. }
  37.  
  38.  
  39.  
  40. int FuncionOculta()
  41. {
  42.  printf("Este texto nunca deberia de haberse mostrado");
  43.  
  44.  return 0;
  45. }
  46.  
  47.  
  48.  
  49.  
  50. int main()
  51. {
  52.  char buffer[1000];
  53.  char nombre[] = "archivo.txt";
  54.  LeerFichero(buffer,nombre,1000);
  55.  FuncionVulnerable(buffer);
  56.  system("pause");
  57.  
  58.  return 0;
  59. }


Compila sin problemas (desde consola, pero si compilo desde el IDE me aparece el error de abajo en negrita). El caso es que cuando voy a analizar vulnerable.exe con OllyDbg me aparece esto (fijaos en el LastError):
http://www.subeimagenes.com/img/dibujo2-765605.html
http://www.subeimagenes.com/img/dibujo3-765608.html
http://www.subeimagenes.com/img/dibujo1-765609.html

He probado a compilarlo con Win8 no virtual y pasa lo mismo.

Creo que el problema está en:
Error   1   error LNK2019: símbolo externo _main sin resolver al que se hace referencia en la función ___tmainCRTStartup    MSVCRTD.lib(crtexe.obj)
Pero lo he googleado y no consigo solucionarlo.


No sé, a mí antes no me pasaba esto... ¿qué puede estar sucediendo?
Gracias de antemano.
4  Seguridad Informática / Hacking / Duda Inyección DLL en: 14 Octubre 2013, 23:10 pm
Buenos días.
Estaba siguiendo este tutorial http://foro.elhacker.net/hacking_avanzado/paper_inyecciones_dll-t159111.0.html , pero no me funciona.

Compilador: Microsoft Visual Studio 2013 RC
Plataforma: Windows 8

Tengo el código que inyecta en el proceso la DLL:
CreateRemoteThread
Código
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <windows.h>
  4.  
  5. int main()
  6. {
  7. DWORD pid;
  8. HANDLE proc;
  9. char buf[MAX_PATH] = "";
  10. char laDll[] = "C:\\laDll.dll";
  11. LPVOID RemoteString;
  12. LPVOID nLoadLibrary;
  13. char Entrada[255];
  14. printf("Ejemplo CreateRemoteThread by MazarD\nhttp://www.mazard.info\n");
  15. printf("Introduce el PID del programa (puedes verlos en el taskmanager): ");
  16. fgets(Entrada, 255, stdin);
  17. pid = (DWORD)atoi(Entrada);
  18. proc = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
  19. //Aquí usamos directamente GetModuleHandle en lugar de loadlibrary ya que kernel32 la cargan todos los ejecutables
  20. //Con esto tenemos un puntero a LoadLibraryA
  21. nLoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
  22. //Reservamos memoria en el proceso abierto
  23. RemoteString = (LPVOID)VirtualAllocEx(proc, NULL, strlen(laDll), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
  24. //Escribimos la ruta de la dll en la memoria reservada del proceso remoto
  25. WriteProcessMemory(proc, (LPVOID)RemoteString, laDll, strlen(laDll), NULL);
  26. //Lanzamos el hilo remoto en loadlibrary pasandole la dirección de la cadena
  27. CreateRemoteThread(proc, NULL, NULL, (LPTHREAD_START_ROUTINE)nLoadLibrary, (LPVOID)RemoteString, NULL, NULL);
  28. CloseHandle(proc);
  29. return true;
  30. }
  31.  
Y el programa compila perfectamente.


Esta es la DLL (generará laDll.dll):
dllmain.cpp
Código
  1. // dllmain.cpp : Define el punto de entrada de la aplicación DLL.
  2. #include "stdafx.h"
  3. #include <stdio.h>
  4. #include <Windows.h>
  5.  
  6. BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
  7. {
  8. if (ul_reason_for_call == DLL_PROCESS_ATTACH)
  9. {
  10. FILE *arch;
  11. fopen_s(&arch, "C:\\mehecargado.txt", "w");
  12. fclose(arch);
  13. }
  14. else
  15. {
  16. FILE *arch;
  17. fopen_s(&arch, "C:\\NOmehecargado.txt", "w");
  18. fclose(arch);
  19. }
  20.  
  21. return TRUE;
  22. }
  23.  
También compila sin problema alguno.

He creado laDll.cpp y laDll.h, pero no definido funciones a exportar, por lo que los archivos están vacíos, ya que ni siquiera tengo funciones.



Ejecuto el programa, pongo el PID y no sucede nada... ¿Qué puede pasar?

Gracias por la ayuda que me podáis dar, en la carrera no me explican nada de esto, y me interesan mucho los temas de seguridad.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines