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ú

Temas - shiro51

#1
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...
#2
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.
#3
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.
#4
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.
#5
ASM / Tipo de licencia de asm y otros.
5 Agosto 2011, 10:32 AM
Hola, buenas, mi proposito es intentar hacer un S.O (no una distro de linux), no voy a pedir miembros, ni nada por el estilo solo que si por favor me pueden resolver unas dudas que encontre a lo largo de la mitad del libro de asm de "Francisco Charte Ojeda", se que es una locura el intentar hacer un S.O pero si no me pongo un reto, no tengo la motivacion de aprender, por eso como quiero aprender pero soy muy... vago me pongo un proyecto-reto, porque cuando tengo un proyecto soy el que más da en el proyecto.

1. Estuve mirando y el procesador 8080 de intel tiene las mimas instrucciones que los actuales (intel core duo), mi pregunta es, si un programa hecho para un procesador de intel antiguo de 8 bits sirve para uno de 32 bits por ejemplo, con las mismas instrucciones, supongo que amd y otros fabricantes tendran otras instrucciones no?.

2. Las funciones de la bios como la de imprimir en pantalla palabras, no varian en las distintas bios?, o hay que hacer un programa para cada bios?.

3. (esto si no me lo dicen no pasa nada, ya que ya buscare yo la solucion), como puedo saber que procesador tiene X pc, por ejemplo saber si es un AMD o un INTEL que son los más usados, y como puedo saber los componentes del pc, con asm claro esta.

4. que licencia tiene asm y que restricciones tiene.

5. Como se crea un formato de archivo (no se el nombre tecnico)?, por ejemplo "fat","fat32","fat16","ext2"-3-4 , etc etc, como se generan, y como se pueden implantar en un sistema que no los tiene nativos.
Espero que me ayuden y les agradecere muchisimo su ayuda en resolver mis dudas, me estan matando desde hace meses =/

6. Con que programa o compilar genero el asm?, da igual cual use?.

Gracias adelantaras ^-^