|
Mostrar Mensajes
|
Páginas: [1] 2
|
1
|
Programación / Ingeniería Inversa / Re: Duda con ollydbg y asm
|
en: 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
|
Programación / Ingeniería Inversa / Duda con ollydbg y asm
|
en: 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.pngy si la pongo asi: Jump DB 0xe9 DB 0x00 DB 0x40 DB 0x30 DB 0x7B DB 0xc3 termina asi: http://i44.tinypic.com/1gm5jm.pngY 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 / Programación C/C++ / c++ winapi microfono
|
en: 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
|
Programación / Programación C/C++ / Re: Socket c++ server y navegador web (chrome)...
|
en: 18 Abril 2012, 14:51 pm
|
#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
|
Programación / Programación C/C++ / Re: Socket c++ server y navegador web (chrome)...
|
en: 17 Abril 2012, 16:10 pm
|
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; }
|
|
|
7
|
Programación / Programación C/C++ / Re: Socket c++ server y navegador web (chrome)...
|
en: 16 Abril 2012, 23:41 pm
|
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
|
Programación / Programación C/C++ / Socket c++ server y navegador web (chrome)...
|
en: 16 Abril 2012, 23:23 pm
|
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.
|
|
|
10
|
Programación / ASM / Asm en dos portable?, "variables" en asm.
|
en: 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.
|
|
|
|
|
|
|