Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - shiro51

#1
Ingeniería Inversa / Re: Duda con ollydbg y asm
20 Septiembre 2013, 19:32 PM
Vale entiendo, ya lo probé y genial, funciona perfecto solo me quedaría limpiar la pila y poco más para que estuviera correcto el código ya que supongo que no si uso pop después del invoke messagebox[...] se quedaran los parámetros dentro.

No me acordaba que 'jmp' era relativo, hace bastante que no toco asm.

¿Es recomendable usar jmp calculando la distancia? o ¿es mejor usar push y ret ya que te ahorras todo eso?. Iré a mirar si encuentro como calcular la distancia relativa, ya que el otro día lo leí y ponían 'punterofuncion-inicioapi-5' y no entendí porque de esa manera...
#2
Ingeniería Inversa / Duda con ollydbg y asm
20 Septiembre 2013, 05:50 AM
Hace poco que me he metido a fondo con ollydbg lo vi hace tiempo pero no me meti de lleno, y pues ahora me meti de lleno para hookear desde asm, ya que es el lenguaje que mas me gusta, pero he tenido unas dudas que no consigo solucionar incluso buscando :S a ver si me podéis ayudar...

Aqui os dejo el codigo, lo compilo desde fasm, y debajo de el os dejo las dudas por si alguien me puede echar un cable

format PE GUI 4.0
entry main

include '..\..\INCLUDE\win32ax.inc'

section '.idata' import data readable

        library kernel32,'KERNEL32.DLL',\
                user32,'USER32.DLL'

        import kernel32,\
               ExitProcess,'ExitProcess',\
               AllocConsole, 'AllocConsole',\
               GetStdHandle,'GetStdHandle',\
               WriteConsole, 'WriteConsoleA',\
               GetModuleHandle,'GetModuleHandleA',\
               GetProcAddress, 'GetProcAddress',\
               WriteProcessMemory, 'WriteProcessMemory',\
               GetCurrentProcess, 'GetCurrentProcess'

        import user32,\
               MessageBox,'MessageBoxA',\
               LoadIcon, 'LoadIconA',\
               LoadCursor, 'LoadCursorA',\
               DefWindowProc, 'DefWindowProcA',\
               RegisterClass, 'RegisterClassA',\
               CreateWindowEx, 'CreateWindowExA' ,\
               PostQuitMessage, 'PostQuitMessage',\
               GetMessage, 'GetMessageA',\
               TranslateMessage, 'TranslateMessage',\
               DispatchMessage, 'DispatchMessageA'

section '.data' data readable writable

        Adrr DD 0

        Jump DB 0xe9
             DD 0x65467689
             DB 0xc3

section '.text' code readable executable

main:
        invoke  GetModuleHandle, 'user32.dll'
        invoke  GetProcAddress, eax, 'MessageBoxA'
        mov [Adrr], eax
        invoke GetCurrentProcess
        invoke WriteProcessMemory, eax, [Adrr], Jump, 6, 0
        nop
        nop
        invoke  MessageBox, 0, 'Texto', 'Titulo', MB_OK
        nop
        invoke  ExitProcess, 0

        Hook:
        invoke AllocConsole
        invoke GetStdHandle, STD_OUTPUT_HANDLE

        invoke WriteConsole, eax, "Hola", 4, 0, 0
        retn


Las dudas que tengo son las siguientes:

1:
        Jump DB 0xe9
                 DD 0x65467689
                 DB 0xc3

en esta parte no se podria hacer algo como:

        Jump DB 0xe9
                DD Hook
                DB 0xc3

Ya que tengo este "cartel" o no se como llamarlo

        Hook:
        invoke AllocConsole

Luego compilo y manualmente busco en el ollydbg la posicion de esta sección (hook) y la pongo en su variable correspondiente (jump)

para que termine:
e9(jmp) ?? ?? ?? ?? c3(retn)

Pero por ejemplo si la posicion de la sección hook es:
0040307B y la meto de la manera anterior

       Jump DB 0xe9
                DD 0x0040307B
                DB 0xc3

al usar invoke WriteProcessMemory, eax, [Adrr], Jump, 6, 0

me lo deja asi:
http://i39.tinypic.com/160pv7a.png

y si la pongo asi:

       Jump DB 0xe9
                DB 0x00
                DB 0x40
                DB 0x30
                DB 0x7B
                DB 0xc3

termina asi:
http://i44.tinypic.com/1gm5jm.png

Y yo ya no entiendo que narices es una columna o la otra... se suponia que era hex... pero ahora ya estoy hecho un lio AARG

A ver si me podeis ayudar gracias de antemano...
#3
Programación C/C++ / c++ winapi microfono
16 Abril 2013, 01:59 AM
Hola, estuve buscando por el foro pero no encuentro lo que busco. Tengo un proyecto donde obtengo el audio del microfono y luego lo reproduzco:

const int NUMPTS = 44100 * 1;
int sampleRate = 44100;
short unsigned int waveIn[NUMPTS];

    for( int i = 0; i < NUMPTS; i++ )
    {
        waveIn[i] = 0;
    }

HWAVEIN hWaveIn;
WAVEHDR WaveInHdr;
HWAVEOUT hWaveOut;

WAVEFORMATEX pFormat;
pFormat.wFormatTag = WAVE_FORMAT_PCM;
pFormat.nChannels = 1;
pFormat.nSamplesPerSec = sampleRate;
pFormat.nAvgBytesPerSec = 2 * sampleRate;
pFormat.nBlockAlign = 2;
pFormat.wBitsPerSample = 16;
pFormat.cbSize = 0;

waveInOpen(&hWaveIn, WAVE_MAPPER, &pFormat, 0, 0, WAVE_FORMAT_DIRECT);

WaveInHdr.lpData = (LPSTR)&waveIn;
WaveInHdr.dwBufferLength = 2 * NUMPTS;
WaveInHdr.dwBytesRecorded = 0;
WaveInHdr.dwUser = 0;
WaveInHdr.dwFlags = 0;
WaveInHdr.dwLoops = 0;
waveInPrepareHeader(hWaveIn, &WaveInHdr, sizeof(WAVEHDR));

waveInAddBuffer(hWaveIn, &WaveInHdr, sizeof(WAVEHDR));

waveInStart(hWaveIn);

cout << "Recording..." << endl;
Sleep((NUMPTS/sampleRate) * 1000);

    FILE *audio = fopen("audio.txt", "w+");
    for( int i = 0; i < NUMPTS; i++ )
    {
        fprintf(audio, "%d\n", (int)waveIn[i] );
    }
    fclose(audio);

//cout << "Playing..." << endl;

//if(waveOutOpen(&hWaveOut, WAVE_MAPPER, &pFormat, 0, 0, WAVE_FORMAT_DIRECT))
//{
// MessageBoxA(NULL, "Failed to replay", NULL, MB_OK | MB_ICONEXCLAMATION );
//}

    //waveOutSetVolume(hWaveOut, 0xFFFF);
    //waveOutWrite(hWaveOut, &WaveInHdr, sizeof(WaveInHdr));
//Sleep((NUMPTS/sampleRate) * 1000);

//waveOutUnprepareHeader(hWaveOut, &WaveInHdr, sizeof(WAVEHDR));
waveInUnprepareHeader(hWaveIn, &WaveInHdr, sizeof(WAVEHDR));
waveInClose(hWaveIn);
//waveOutClose(hWaveOut);


Ahora mismo lo tengo para que lo guarde en un txt el sonido entrante durante 1 segundo, quisiera tratar los números, para hacer un oscilador del sonido, saber cuando es fuerte o debil el sonido.

Como son 2 bytes, es de 0 a 65535, pero no se cuando es bajo y cuando es fuerte o como funciona este sistema... Quisiera poder distinguirlos para hacer una media y hacer un oscilador del audio... si pudierais ayudarme me seria de gran ayuda.
#4
#include <iostream> //pause...
#include <stdio.h> //gets printf...
#include <string.h> //if
#include <time.h>
#include <process.h>

#include <winsock2.h> //sockets
#pragma comment(lib,"ws2_32.lib")
SOCKET sock;
char Buffer[1024];
char HTML[1024];

void wait ( int seconds )
{
  clock_t endwait;
  endwait = clock () + seconds * CLOCKS_PER_SEC ;
  while (clock() < endwait) {}
}

void thread(void *arg)
{

}

int main()
{
WSADATA wsa;

struct sockaddr_in direc;
int conex;

int len = 0;

strncat (HTML, "GET /index.php HTTP/1.1 \r\n", strlen("GET /index.html HTTP/1.1 \r\n"));
strncat (HTML, "Host: elhacker.net:80\r\n", strlen("Host: elhacker.net:80\r\n"));
strncat (HTML, "Connection: keep-alive\r\n", strlen("Connection: keep-alive\r\n"));
strncat (HTML, "User-Agent: Mozilla/5.0 <Windows NT 6.1> AppleWebKit/535.19 <KHTML, Like Gecko>\r\n", strlen("User-Agent: Mozilla/5.0 <Windows NT 6.1> AppleWebKit/535.19 <KHTML, Like Gecko>\r\n"));
strncat (HTML, "Chrome/18.0.1025.162 Safari/535.19\r\n", strlen("Chrome/18.0.1025.162 Safari/535.19\r\n"));
strncat (HTML, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n", strlen("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"));
strncat (HTML, "Accept-Encoding: gzip,deflate,sdch\r\n", strlen("Accept-Encoding: gzip,deflate,sdch\r\n"));
strncat (HTML, "Accept-Language: es-ES,es;q=0.8\r\n", strlen("Accept-Language: es-ES,es;q=0.8\r\n"));
strncat (HTML, "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n", strlen("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n"));


WSAStartup(MAKEWORD(2,2),&wsa);

direc.sin_family=AF_INET;
direc.sin_port=htons(80);
direc.sin_addr = *((struct in_addr *)gethostbyname("46.105.119.93")->h_addr);
memset(direc.sin_zero,0,8);


if ((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
{
printf("Error al crear el socket");
return -1;
}

if ((conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr)))==-1)
{
      printf("No se ha podido conectar\n");
  fgets(Buffer,1023, stdin);
      return -1;
    }else{
puts("conexion establecida...");

//_beginthread(thread, 5, 0); 
}



while (len!=-1)
   {

puts(HTML);
send(sock, HTML, strlen(HTML), 0);
recv(sock,Buffer,1023,0);
puts(Buffer);

system("pause");
return 0;
   }

return 0;
}


Con este envio una cabecera como si fuera el navegador a un server de internet, y espero su cabecera http para saber como debe ser la mia, pero el problema es que "imitando" a chrome con la cabecera que el me manda, me dice 400 bad request, request header field is missing ":"

A ver si me podeis decir el problema...
#5
Mini avance... si le envio lo que me envia el navegador... se queda esperando procesando informacion... he probado mandando lo mismo que el navegador y mandando:

strncat (HTML, "GET /index.html HTTP/1.1\n", strlen(HTML) + strlen("GET /index.html HTTP/1.1\n"));
  strncat (HTML, "Accept: */*\n", strlen(HTML) + strlen("Accept: */*\n"));
  strncat (HTML, "Accept-Language: es\n", strlen(HTML) + strlen("Accept-Language: es\n"));
  strncat (HTML, "Accept-Encoding: gzip, deflate\n", strlen(HTML) + strlen("Accept-Encoding: gzip, deflate\n"));
  strncat (HTML, "User-Agent: Mozilla/5.0 (compatible; MSIE 5.01;    Windows NT)\n", strlen(HTML) + strlen("User-Agent: Mozilla/4.0 (compatible; MSIE 5.01;    Windows NT)\n"));
  strncat (HTML, "Host: 127.0.0.1n", strlen(HTML) + strlen("Host: 127.0.0.1\n"));
  strncat (HTML, "Connection: Keep-Aliven\n", strlen(HTML) + strlen("Connection: Keep-Aliven\n"));



Pero falta algo...

#include <winsock2.h> //la cabezera para usar las funciones de winsock
#include <stdio.h>

#pragma comment(lib,"ws2_32.lib")

int main()
{
   WSADATA wsa;
   SOCKET sock;
   struct sockaddr_in local;
   int len=0;
   char Buffer[1024];
   char HTML[1024] = "";
   //strncat (HTML, "GET /index.html HTTP/1.1\r\n", strlen(HTML) + strlen("GET /index.html HTTP/1.1\r\n\n"));
   //strncat (HTML, "Accept: */*\r\n", strlen(HTML) + strlen("Accept: */*\r\n"));
   //strncat (HTML, "Accept-Language: es\r\n", strlen(HTML) + strlen("Accept-Language: es\r\n"));
   //strncat (HTML, "Accept-Encoding: gzip, deflate\r\n", strlen(HTML) + strlen("Accept-Encoding: gzip, deflate\r\n"));
   //strncat (HTML, "User-Agent: Mozilla/5.0 (compatible; MSIE 5.01;    Windows NT)\r\n", strlen(HTML) + strlen("User-Agent: Mozilla/4.0 (compatible; MSIE 5.01;    Windows NT)\r\n"));
   //strncat (HTML, "Host: 127.0.0.1\r\n", strlen(HTML) + strlen("Host: 127.0.0.1\r\n"));
   //strncat (HTML, "Connection: Keep-Aliven\r\n\r\n\n", strlen(HTML) + strlen("Connection: Keep-Aliven\r\n\r\n"));
   //strncat (HTML, "<html><body>Hola mundo</body></html>", strlen(HTML) + strlen("<html><body>Hola mundo</body></html>"));
strncat (HTML, "HTTP/1.1 200 OK\r\n", strlen(HTML) + strlen("HTTP/1.1 200 OK\r\n"));
   strncat (HTML, "GET /index.html HTTP/1.1\r\n", strlen(HTML) + strlen("GET /index.html HTTP/1.1\r\n\n"));
   strncat (HTML, "Accept: */*\r\n", strlen(HTML) + strlen("Accept: */*\r\n"));
   strncat (HTML, "Cache-Agent: max-age=0\r\n", strlen(HTML) + strlen("Cache-Agent: max-age=0\r\n"));
   strncat (HTML, "Accept-Language: es-ES\r\n", strlen(HTML) + strlen("Accept-Language: es\r\n"));
   strncat (HTML, "Accept-Encoding: gzip, deflate\r\n", strlen(HTML) + strlen("Accept-Encoding: gzip, deflate\r\n"));
   strncat (HTML, "User-Agent: Mozilla/5.0 (compatible; MSIE 5.01;    Windows NT)\r\n", strlen(HTML) + strlen("User-Agent: Mozilla/4.0 (compatible; MSIE 5.01;    Windows NT)\r\n"));
   strncat (HTML, "Host: 127.0.0.1\r\n", strlen(HTML) + strlen("Host: 127.0.0.1\r\n"));
   strncat (HTML, "Connection: Keep-Aliven\r\n", strlen(HTML) + strlen("Connection: Keep-Aliven\r\n"));
strncat (HTML, "Content-Type: text/html\r\n\r\n", strlen(HTML) + strlen("Content-Type: text/html\r\n\r\n"));
   
   int num = 0;
   //Inicializamos
   WSAStartup(MAKEWORD(2,0),&wsa);
   
   //Creamos el socket
   sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

   //defnimos dirección por defecto, ipv4 y el puerto 9999
   local.sin_family = AF_INET;
   local.sin_addr.s_addr = INADDR_ANY;
   local.sin_port = htons(9999);


   //asociamos el socket al puerto
   if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1)
   {
      printf("error en el bind\n");
      return -1;
   }

   //ponemos el socket a la escucha
   if (listen(sock,1)==-1)
   {
      printf("error en el listen\n");
      return -1;
   }

   len=sizeof(struct sockaddr);


   //hay una conexión entrante y la aceptamos
   sock=accept(sock,(sockaddr*)&local,&len);
   while(len >= -1)
   {
  len=recv(sock,Buffer,1023,0); //recibimos los datos que envie

  if (len>0)  //si seguimos conectados
  {
Buffer[len]=0; //le ponemos el final de cadena
puts(Buffer); //imprimimos la cadena recibida
send(sock, HTML, strlen(HTML), 0);
send(sock, "<html><body>Hola mundo</body></html>", strlen("<html><body>Hola mundo</body></html>"), 0);
puts(HTML);
if(strcmp (Buffer,"12412412412Hola\n") == 0)
{
puts("Muy bien!");
send(sock, inet_ntoa(local.sin_addr), strlen(inet_ntoa(local.sin_addr)), 0);
}
  }
   }

   return 0;
}
#6
A mi no me funciona, el navegador se conecta me envia su cabecera le envio la mia pero no me muestra el "Hola mundo" en el navegador web...

Quiero que chrome por ejemplo se conecte a mi server y le envie el html y se muestre en el navegador el html que envia mi server...
#7
Este es el codigo completo, apenas lo toque del original, porque estuve comprimiendo el cliente y el server lo he dejado un poco apartado hasta ahora xDDD

#include <winsock2.h> //la cabezera para usar las funciones de winsock
#include <stdio.h>

#pragma comment(lib,"ws2_32.lib")

int main()
{
   WSADATA wsa;
   SOCKET sock;
   struct sockaddr_in local;
   int len=0;
   char Buffer[1024];
   char HTML[1024] = "<html> <body> Hola como estas?</body></html>";
   //Inicializamos
   WSAStartup(MAKEWORD(2,0),&wsa);
   
   //Creamos el socket
   sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

   //defnimos dirección por defecto, ipv4 y el puerto 9999
   local.sin_family = AF_INET;
   local.sin_addr.s_addr = INADDR_ANY;
   local.sin_port = htons(9999);


   //asociamos el socket al puerto
   if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1)
   {
      printf("error en el bind\n");
      return -1;
   }

   //ponemos el socket a la escucha
   if (listen(sock,1)==-1)
   {
      printf("error en el listen\n");
      return -1;
   }

   len=sizeof(struct sockaddr);


   //hay una conexión entrante y la aceptamos
   sock=accept(sock,(sockaddr*)&local,&len);

   while (len!=0) //mientras estemos conectados con el otro pc
   {
  len=recv(sock,Buffer,1023,0); //recibimos los datos que envie

  if (len>0)  //si seguimos conectados
  {
Buffer[len]=0; //le ponemos el final de cadena
puts(Buffer); //imprimimos la cadena recibida
if(strcmp (Buffer,"12412412412Hola\n") == 0)
{
puts("Muy bien!");
send(sock, inet_ntoa(local.sin_addr), strlen(inet_ntoa(local.sin_addr)), 0);
}
send(sock, "HTTP/1.1 200 OK\r\n", strlen("HTTP/1.1 200 OK\r\n"), 0);
send(sock, "Content-Type: text/html\r\n", strlen("Content-Type: text/html\r\n"), 0);
send(sock, "Content-Length: 1024\r\n", strlen("Content-Length: 1024\r\n"), 0);
send(sock, "\r\n", strlen("\r\n"), 0);
send(sock, "<html><body>Hola mundo</body></html>", strlen("<html><body>Hola mundo</body></html>"), 0);
  }
   }

   return 0;
}
#8
Hola buenas noches, vengo aqui a solicitar algo de información ya que no encuentro en Internet nada relacionado...

Me meti en el desarrollo de sockets en c++, y consegui conectar el navegador web al server socket, (muy facil...), pero ahora no se como responderle al navegador web y enviarle la informacion necesaria y el html correspondiente, espero que me podais ayudar... ya que esto es un problema demasiado facil y me da verguenza publicar algo tan tonto... xDD


Dejo imagen de la cabecera http y el server...


Gracias.
#9
Muchas gracias eternal idol. Puedes cerrar el tema.
#10
ASM / Asm en dos portable?, "variables" en asm.
4 Febrero 2012, 22:51 PM
Hola buenas noches, (al menos en mi pais jeje).

Mis dudas son las siguientes:

*Uso Fasm

Si creo cualquier EXE, en Fasm, en Windows, seria portable para cualquier pc con Windows?.

Y lo otro es, yo guardo una cantidad de memoria fija, para guardar datos, ejemplo, 4 bytes, para guardar la palabra "Hola", si yo ahora quiero incluirle a "Hola", un " Mundo", hay alguna tecnica en concreto para separar todo el codigo de despues, para agrandar los 5 bytes a el tamaño de "Hola Mundo"?, o tengo que cambiar la direccion de memoria, reservando en otro sitio X bytes, y luego "informar" al resto del codigo que "ahi" esta la frase/palabra?.


Gracias y espero contestaciones.