|
Mostrar Mensajes
|
Páginas: 1 2 [3]
|
21
|
Programación / ASM / Como puedo reproducir un .mp3 bajo Windows
|
en: 27 Octubre 2014, 04:43 am
|
Saludos Tengo la siguiente duda, como puedo reproducir mp3 bajo windows y que no sea usando ninguna de las api MCI (MCISendString, MCISendCommand, PlaySnd, etc). O sea quiero hacerlo de forma nativa.
El ejemplo puede estar en cualquier lenguaje, lo importante es que sea de forma nativa sin utilizar ninguna dll o api del sistema.
Gracias de antemano.
|
|
|
23
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Como usar la pila.
|
en: 19 Octubre 2014, 11:52 am
|
Guao esta bueno el code. Jamas había visto un algoritmo de cifrado en asm. Antes le daba a eso pero cuando programaba en VB6. jejeje si de ahí saque la idea de que podía direccionar la memoria que quisiera, ese lenguaje mata el alma y al envenena Y ganas más puntos porque esta en AT&T xD No me gusta esa sintaxis, solo la uso cuando meto asm inline en C++ como utilizo el compilador de GNU. Saludos.
|
|
|
24
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Como usar la pila.
|
en: 19 Octubre 2014, 11:30 am
|
Lol Gracias por el link. Ahora si lo entendí a la perfección. Y ya se porque hWnd esta a partir del byte 8. Es porque del 4 al 8 esta el valor antiguo de ebp y del 0 al 4 esta el valor de retorno que fue empujado por call. Gracias de veras. Ha y si, no se quien cojones llama a MyWndProc. Lo que se es que una le pasa la dirección a RegisterClassEx, y cuando uno registra la ventana pasa el nombre de la clase que registro. Y windows se encarga de que cada vez que pasa un evento el llama a la función y le pasa los parámetros. Y si así es, ni con ASM puedes tener mucho control sobre la interfaz de windows. Solo te limitas a lo que te proveen las funciones.
|
|
|
25
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Como usar la pila.
|
en: 19 Octubre 2014, 10:31 am
|
Ya lo leere gracias. Ha y en cuanto a MyWndProc jamas se invoca asi lo pases como proc o como etiqueta de eso se encarga la api de windows. Ves aqui se le pasa a la estructura WNDCLASSEX mov DWORD PTR [ebp-96], 48 mov DWORD PTR [ebp-92], CS_VREDRAW or CS_HREDRAW mov DWORD PTR [ebp-88], OFFSET MyWndProc ;Justo aqui se le pasa la dirección mov DWORD PTR [ebp-84], edi mov DWORD PTR [ebp-80], edi mov DWORD PTR [ebp-76], esi mov DWORD PTR [ebp-72], edi mov DWORD PTR [ebp-68], eax mov DWORD PTR [ebp-64], COLOR_BTNFACE+1 mov DWORD PTR [ebp-60], edi mov DWORD PTR [ebp-56], ebx mov DWORD PTR [ebp-52], edi
|
|
|
26
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Como usar la pila.
|
en: 19 Octubre 2014, 06:11 am
|
Saludos gracias por contestar. Lo del ring 0-3 si lo entiendo. Mira te pondré un ejemplo y sería de mucha ayuda si me lo explicaras pondré las dudas al lado de lo que entiendo. El ejemplo lo saque del paquete de MASM32 y se puede ensamblar tanto en POASM como en MASM también. Todo lo que hace lo se hacer con variables y eso, pero me gustaría mucho comprender este por completo. Ha no le hagas caso a la declaración de los datos en un solo segmento es solo un ejemplo de como gastar 1kb ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« comment * ------------------------------------------------------------- This example is written in pure Intel mnemonics to demonstrate that Pelle's Macro Assembler can build code at the lowest level possible Build this example from the PROJECT menu with MAKEIT.BAT ----------------------------------------------------------------- * .486 .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include poasm1k.inc ; local includes for this file .code szClassName db "POASM 1k", 0 start: ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« push ebp ; Entiendo que mete ebp en la pila, pero si te fijas al final nunca lo saca ;a menos que leave lo haga , pero no lo se mov ebp, esp sub esp, 96 ; Aqui no entiendo porque reserva 96 bytes, sume la estructura ;mas los 4 argumentos DWORD de WndProc y da son 76 xor edi, edi mov esi, 400000h ; use constant for the hInstance ;No entiendo porque usa una constante y no obtiene el manipulador ;de instancia. Tampoco pense que funcionara así(Ya eso es de la api, esta fuera de tema). mov ebx, OFFSET szClassName ;Quien no entende esto :D push IDC_ARROW push edi call LoadCursor ;Entiendo las rutinas de llamada ; ----------------------------------- ; manually coded WNDCLASSEX structure ;No es hermosa esta parte del código ; ----------------------------------- ;casi poesía *.* xD ;Esta parte mas o menos la entiendo mov DWORD PTR [ebp-96], 48 ;Le asigna a esa pos de memoria el tamaño de la estructura mov DWORD PTR [ebp-92], CS_VREDRAW or CS_HREDRAW ;De aqui hacia abajo va llenando la estructura mov DWORD PTR [ebp-88], OFFSET MyWndProc mov DWORD PTR [ebp-84], edi mov DWORD PTR [ebp-80], edi mov DWORD PTR [ebp-76], esi mov DWORD PTR [ebp-72], edi mov DWORD PTR [ebp-68], eax mov DWORD PTR [ebp-64], COLOR_BTNFACE+1 mov DWORD PTR [ebp-60], edi mov DWORD PTR [ebp-56], ebx mov DWORD PTR [ebp-52], edi lea eax, [ebp-96] ;Mueve a eax la dirección de la estructura push eax call RegisterClassEx ; register the window class mov ecx, CW_USEDEFAULT push edi push esi push edi push edi push edi push ecx push edi push ecx push WS_OVERLAPPEDWINDOW push ebx push ebx push edi call CreateWindowEx ; create the main window push SW_SHOWNORMAL push eax call ShowWindow ; display it lea ebx, [ebp-48] ; Carga en ebx la dirección de inicio ;de la estructura MSG jmp jmpin StartLoop: push ebx call DispatchMessage jmpin: push edi push edi push edi push ebx call GetMessage ; process messages until ; GetMessage returns zero test al, al jnz StartLoop leave ; exit the stack frame retn ; make a NEAR return ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« MyWndProc: push ebp ; Otra vez lo mismo con ebp desde el principio mov ebp, esp ; No entiendo como esp apunta a la dirección de las variables pasadas al WndProc cmp DWORD PTR [ebp+12], WM_DESTROY jne @F push NULL call PostQuitMessage @@: push DWORD PTR [ebp+20] push DWORD PTR [ebp+16] push DWORD PTR [ebp+12] push DWORD PTR [ebp+8] ;Aqui no entiendo porque hWnd apunta deste 8, que hay de primero entonces ;No debería apuntar desde el byte 0 ;Ha y no entiendo porque aqui es ebp+direccion y arriba es ebp-direccion call DefWindowProc leave ; exit the stack frame ret 16 ; balance stack on exit ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« end start
Eso más que todo es las partes que no entiendo agradezco tu ayuda.
|
|
|
27
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Como usar la pila.
|
en: 19 Octubre 2014, 06:08 am
|
Saludos gracias por contestar. Lo del ring 0-3 si lo entiendo. Mira te pondré un ejemplo y sería de mucha ayuda si me lo explicaras pondré las dudas al lado de lo que entiendo. El ejemplo lo saque del paquete de MASM32 y se puede ensamblar tanto en POASM como en MASM también. Todo lo que hace lo se hacer con variables y eso, pero me gustaría mucho comprender este por completo. Ha no le hagas caso a la declaración de los datos en un solo segmento es solo un ejemplo de como gastar 1kb ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« comment * ------------------------------------------------------------- This example is written in pure Intel mnemonics to demonstrate that Pelle's Macro Assembler can build code at the lowest level possible Build this example from the PROJECT menu with MAKEIT.BAT ----------------------------------------------------------------- * .486 .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include poasm1k.inc ; local includes for this file .code szClassName db "POASM 1k", 0 start: ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« push ebp ; Entiendo que mete ebp en la pila, pero si te fijas al final nunca lo saca ;a menos que leave lo haga , pero no lo se mov ebp, esp sub esp, 96 ; Aqui no entiendo porque reserva 96 bytes, sume la estructura ;mas los 4 argumentos DWORD de WndProc y da son 76 xor edi, edi mov esi, 400000h ; use constant for the hInstance ;No entiendo porque usa una constante y no obtiene el manipulador ;de instancia. Tampoco pense que funcionara así(Ya eso es de la api, esta fuera de tema). mov ebx, OFFSET szClassName ;Quien no entende esto :D push IDC_ARROW push edi call LoadCursor ;Entiendo las rutinas de llamada ; ----------------------------------- ; manually coded WNDCLASSEX structure ;No es hermosa esta parte del código ; ----------------------------------- ;casi poesía *.* xD ;Esta parte mas o menos la entiendo mov DWORD PTR [ebp-96], 48 ;Le asigna a esa pos de memoria el tamaño de la estructura mov DWORD PTR [ebp-92], CS_VREDRAW or CS_HREDRAW ;De aqui hacia abajo va llenando la estructura mov DWORD PTR [ebp-88], OFFSET MyWndProc mov DWORD PTR [ebp-84], edi mov DWORD PTR [ebp-80], edi mov DWORD PTR [ebp-76], esi mov DWORD PTR [ebp-72], edi mov DWORD PTR [ebp-68], eax mov DWORD PTR [ebp-64], COLOR_BTNFACE+1 mov DWORD PTR [ebp-60], edi mov DWORD PTR [ebp-56], ebx mov DWORD PTR [ebp-52], edi lea eax, [ebp-96] ;Mueve a eax la dirección de la estructura push eax call RegisterClassEx ; register the window class mov ecx, CW_USEDEFAULT push edi push esi push edi push edi push edi push ecx push edi push ecx push WS_OVERLAPPEDWINDOW push ebx push ebx push edi call CreateWindowEx ; create the main window push SW_SHOWNORMAL push eax call ShowWindow ; display it lea ebx, [ebp-48] ; Carga en ebx la dirección de inicio ;de la estructura MSG jmp jmpin StartLoop: push ebx call DispatchMessage jmpin: push edi push edi push edi push ebx call GetMessage ; process messages until ; GetMessage returns zero test al, al jnz StartLoop leave ; exit the stack frame retn ; make a NEAR return ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« MyWndProc: push ebp ; Otra vez lo mismo con ebp desde el principio mov ebp, esp ; No entiendo como esp apunta a la dirección de las variables pasadas al WndProc cmp DWORD PTR [ebp+12], WM_DESTROY jne @F push NULL call PostQuitMessage @@: push DWORD PTR [ebp+20] push DWORD PTR [ebp+16] push DWORD PTR [ebp+12] push DWORD PTR [ebp+8] ;Aqui no entiendo porque hWnd apunta deste 8, que hay de primero entonces ;No debería apuntar desde el byte 0 ;Ha y no entiendo porque aqui es ebp+direccion y arriba es ebp-direccion call DefWindowProc leave ; exit the stack frame ret 16 ; balance stack on exit ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« end start
Eso más que todo es las partes que no entiendo agradezco tu ayuda.
|
|
|
28
|
Seguridad Informática / Análisis y Diseño de Malware / Como usar la pila.
|
en: 18 Octubre 2014, 09:05 am
|
Saludos. Hace poco me llamo la atención el assembler, hace tiempo que vengo programando pero lenguajes de alto nivel y orientados a objetos. Cuando comencé a programar en este lenguaje, chocaron muchos conceptos que tenía. Pero aún así comprendí la mayoría. Aprendí a programar con MASM32 lo que me llevo a utilizar múltiples macros y otras emulaciones que tiene de alto nivel como los .if .else o declarar los procedimientos y utilizar los parámetros directamente. Ejemplo: FuncNada proc param1:DWORD, param2:DWORD mov eax,param2 add eax,param1 ret FuncNada endp
Me pareció excelente en el momento, pero luego de tomar un poco más de experiencia me di cuenta que no sabía que código se estaba generando y que así era una pérdida de tiempo aprender ese lenguaje. Me propuse estudiarlo a fondo a bajo nivel de verdad, entendí muchos conceptos, pero lo que aun no he terminado de entender es el manejo de la pila, si ustedes pudieran resolver mis dudas me ayudarían. Y también sobre el direccionamiento indirecto, se como se direcciona pero siempre que trato de hacerlo el programa crashea. Necesito un ejemplo práctico porque siempre ponen: mov eax,byte ptr [ebp+ebx*2+4] ;ejemplo si entiendo lo de byte ptr pero si luego trato de acceder a esa posición de memoria no puedo, y yo creí que a partir del 386 se podían direccionar 4gb de memoria. Y sobre la pila me gustaría ver como se obtienen las variables, como se reserva espacio y como se manejan estructuras(sin identificador) osea no: lea eax,structura push eax sino acceder a posiciones de memoria en donde se encuentre cada elemento. Cualquier ayuda se los agradecería de antemano. Y Sobretodo agradecería con ejemplos prácticos. Gracias. Disculpen soy nuevo y publique el tema donde no era, si alguien me ayudara a moverlo de sitio se los agradecería.
|
|
|
|
|
|
|