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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ... 49
201  Seguridad Informática / Análisis y Diseño de Malware / Re: me pordrian explicar cual es la importancia de ebp+0x08? en: 29 Junio 2012, 06:39 am
hola

es que y entendi PE, por eso no pido que me expliquen sobre eso, lo que quiero saber es porque ebp + 0x08 tiene a "MZ" si supuestamente deberia ser 0x18, o acaso 0x08 no tiene nada que ver con lo que se guarda en eax?

porque como lo menciono, tengo la idea que eax tiene "MZ", y al abrir la funcion con push ebp crei que para acceder a MZ otra vez tenia que ser 0x18 pero me aparece un error, y si le pongo 0x08 la aplicacion se executa bien

y al revisar otros ejemplos, veo que usan 0x08, pero porque?, de donde sale o porque se accede a ese hexadecimal?

porque bueno, ya entendi el formto PE, como llegar a EAT y que tengo que hacer una comparacion de de las funciones y al encontrarlas se guardan y luego se reutilizan y asi ya no se importa nada

porfavor, no pido explicacion de PE, solo de porque [ebp + 0x08] o [esp + 8]

se que

push ebp
mov ebp, esp
sub esp, 12

es para reservar espacio, algo de esto lo lei del manual de rodojos sobre exploits

espero me puedan ayudar, pero repito no es explicacion sobre formato PE ni como llegar a tal direccion ni nada de eso

salu2 y gracias
202  Seguridad Informática / Análisis y Diseño de Malware / me pordrian explicar cual es la importancia de ebp+0x08? en: 28 Junio 2012, 23:28 pm
hola

una pregunta

he visto que despues de encontrar kernel32 buscan las funciones

por ejemplo

Código
  1. push offset kernelbase ; direccion de kernel32.dll
  2.   push offset nLoadLibrary ; cadena de texto con: LoadLibraryA
  3.   push 0Dh ; longitud de LoadLibraryA + 1
  4.   call busca_libreria ; buscamos LoadLibraryA dentro de kernel32.dll
  5.  
  6.  
  7. mov eax, fs:[30h] ; puntero al PEB
  8.   mov eax, [eax+0ch] ; puntero a la estructura de datos
  9.   mov esi, [eax+1ch] ; extrae la primera entrada
  10.   lodsd ; avanza a la siguiente
  11.   mov eax, [eax+08h] ; obtiene la direccion base y la guarda en eax
  12.   ret
  13.  
  14.  
  15. ; ***************************************************************************
  16. ; Buscamos la direccion de una funcion dada la direccion base de una libreria
  17. ; ***************************************************************************
  18. busca_funcion:
  19.   mov eax, [esp+8] ; funcion apunta al nombre de la funcion (ej: LoadLibraryA)
  20.   mov funcion, eax
  21.   mov eax, [esp+12] ; base apunta a la base de la libreria (ej: kernel32.dll)
  22.   mov eax, [eax]
  23.   mov base, eax
  24.  
  25.  

Tengo una duda sobre las funciones

al inicio de busca_funcion... hay mov eax, [esp+8]

yo al principio creia o talvez no lo entiendo bien, que esp+8 era donde se habia guardado MZ

Código
  1. mov eax, [eax+08h]
  2.  

entonces quise hacer algo como esto para ir guardando en la pila los datos

Código
  1. mov    eax, [fs:0x30]  
  2. mov    eax, [eax + 0x0C]  
  3. mov    eax, [eax + 0x1C]    
  4. mov    eax, [eax]      
  5. mov    eax, [eax + 0x08]  
  6.  
  7. push ebp
  8. mov ebp, esp
  9. sub esp, 12
  10. mov edi, [ebp + 0x08]
  11. mov edx, edi
  12. add edx, [edi + 0x3C]
  13. mov [ebp - 0x0C], edx

al compilarlo no tuve problemas pero al ejecutarlo salia un error y se cerraba la aplicacion, pero...bueno, como uso windows 7 hay otra forma de encontrar kernel

Código
  1.                xor eax, eax
  2. mov eax, [fs:0x30]
  3. mov eax, [eax+0x0C]
  4. mov eax, [eax+0x0C]
  5. mov eax, [eax]
  6. mov eax, [eax]
  7. mov eax, [eax+0x18]

Entonces quise hacer algo como esto

Código
  1. xor eax, eax
  2. mov eax, [fs:0x30]
  3. mov eax, [eax+0x0C]
  4. mov eax, [eax+0x0C]
  5. mov eax, [eax]
  6. mov eax, [eax]
  7. mov eax, [eax+0x18]
  8.  
  9. push ebp
  10.        mov ebp, esp
  11. sub esp, 12
  12.  
  13. mov edi, [ebp + 0x08]
  14.  
  15. mov edx, edi
  16. add edx, [edi + 0x3C]
  17. mov [ebp - 0x0C], edx
  18.  

y tampoco tuve problemas y el error no me parecio, pero si se dan cuenta de algo, puse


Código
  1. mov edi, [ebp + 0x08]

lo cual me parecio que debia ser

Código
  1. mov edi, [ebp + 0x18]

al compilarlo tampoco hubo algun problema, pero al investigar mas me encontre con otro ejemplo, donde hace lo mismo que el primer ejemplo

Código
  1. LoadK32Function:
  2.       mov    eax, [fs:0x30]   ; address of PEB
  3.       mov    eax, [eax + 0x0C]   ; PEB->Ldr
  4.       mov    eax, [eax + 0x1C]    ; Ldr->InMemoryOrderModuleList (first element is ntdll.dll)
  5.       mov    eax, [eax]      ; InMemoryOrderModuleList->Flink (second element is kernel32.dll)
  6.       mov    eax, [eax + 0x08]   ; DllBase
  7.  
  8. push    ebp
  9. mov    ebp, esp
  10. sub   esp, 12      ; make room for 3 DWORDS
  11. mov    edi, [ebp + 0x08]    ; edi = DosHeader
  12. cmp word [edi], 'MZ'
  13. mov    edx, edi
  14. add    edx, [edi + 0x3C]  
  15. cmp word [edx], 'PE'
  16. jne    LoadK32Function_fail
  17. mov   [ebp - 0x0C], edx
  18.  
  19. _WinMain@16:
  20.  
  21.       push    LoadLibraryName
  22.       push    dword [Kernel32Addr]
  23.       call    LoadK32Function

Y aqui ya estoy confundido, que hace realmente ebp+0x08? porque al segundo ejemplo que puse de WinMain, si cambio de igual forma como encontrar kernel en sistemas windows 7, sigue funcionando ebp+0x08 pero si lo cambio a 0x18 ya no funciona

Código
  1.                xor eax, eax
  2. mov eax, [fs:0x30]
  3. mov eax, [eax+0x0C]
  4. mov eax, [eax+0x0C]
  5. mov eax, [eax]
  6. mov eax, [eax]
  7. mov eax, [eax+0x18]
  8.  
  9. push    ebp
  10. mov    ebp, esp
  11. sub   esp, 12      ; make room for 3 DWORDS
  12. mov    edi, [ebp + 0x18]    ; edi = DosHeader
  13. cmp word [edi], 'MZ'
  14. mov    edx, edi
  15. add    edx, [edi + 0x3C]  
  16. cmp word [edx], 'PE'
  17. jne    LoadK32Function_fail
  18. mov   [ebp - 0x0C], edx  

Esta es una explicacion que dieron pero no entiendo porque comenzar con 0x08

Citar
;------------------------------------
       ;          +-----------------------+
       ; ebp-0x0C | PE Header             |
       ;          +-----------------------+
       ; ebp-0x08 | Export table addr     |
       ;          +-----------------------+
       ; ebp-0x04 | AddressOfNames        |
       ;          +-----------------------+
       ; .....
       ;          +-----------------------+
       ; ebp+0x08 | kernel32 base address |
       ;          +-----------------------+
       ; ebp+0x0C | function name         |
       ;          +-----------------------+
       ;------------------------------------

espero me puedan ayudar con esta duda, porque me gustaria saber porque ebp tendria que comenzar con 0x08, porque no se si tambien podria haber comenzado con 0x04 y "function name" comenzar con 0x08 y si es "MZ" porque no comienza con 0x18, al principio tambien crei que era porque MZ era un DWORD pero es WORD, pero ahora no tengo idea sobre ebp, espero me puedan explicar

salu2
203  Seguridad Informática / Análisis y Diseño de Malware / como encontrar y usar LoadLibrary y Getprocaddress usando PEB? en: 26 Junio 2012, 22:05 pm
Hola tengo unas dudas sobre PEB

bueno, ya entendi como se encuentra PEB gracias al blog de Nox donde te explica sobre eso

estuve haciendo pruebas para verificar si lo que hacia estaba bien, perdon por poner una mezcla de ASM y C pero no encontre otra manera de verificar que realmente la comparacion de PE fuera exacto

Código
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6.  
  7. __asm{
  8.  
  9. xor eax, eax
  10. mov eax, fs:[0x30]
  11. mov eax, [eax+0x0C]
  12. mov eax, [eax+0x1C]
  13. mov eax, [eax]
  14. mov eax, [eax+0x08]
  15. mov ebx, eax
  16. add ebx, [eax + 0x3C]
  17. cmp ebx, 'PE'
  18. je bien
  19.  
  20.  
  21. }
  22. bien:
  23. MessageBox(0, "bien hecho", "mensaje", 0 );
  24.  
  25. }

ahora, lo que sabia es que despues de esto tenia que llegar a IMAGE DATA DIRECTORY, donde se encuentra RVA o VirtualAddress

aqui no se dos cosas, cual es el tamaño de IMAGE_OPTIONAL_HEADER?

acaso son 0x78?

entonces seria 0x76 y 0x78 empieza IMAGE_DATA_DIRECTORY?

y lo que tendria que seguir en el codigo para llegar a EAT seria?
Citar
mov ebx, [ebx + 0x78]

y bueno, de aqui que mas tendria que hacer para encontrar por ejemplo, LoadLibraryA y Getprocaddress?

e visto que buscan direccion de nombres [0x20] y numero de nombres [0x18] e incluso veo que se saltan eso y van directo a [0x24] que seria numero de funciones

me gustaria hacer un ejercicio para mostrar un MessageBox cargando user32.dll con LoadLibrary y mostrando MessageBoxA con GetprocAddress y ponerle algun mensaje, todo usando PEB

espero me puedan ayudar

P.D. Nox, me podrias decir que compilador usaste para compilar el ejemplo de tu blog, porfavor?

salu2
204  Programación / ASM / Re: me podrian ayudar explicandome dudas sobre PEB y shellcode porfavor en: 21 Junio 2012, 00:51 am
a que bien, gracias por las respuestas

y gracias Nox, por el link... se ve interesante tu blog

salu2  ;D
205  Programación / Programación C/C++ / Re: CONSULTA sobre archivos en c !!!!!!!!!!!!!!!!!!!!!!!!! en: 20 Junio 2012, 02:37 am
necesitas saber como abrir el archivo, busca informacion sobre

FILE *fp fopen()
206  Programación / Programación C/C++ / me podrian ayudar con este codigo para descrgar archivos en: 20 Junio 2012, 02:36 am
hola

estoy tratando de programar una aplicacion para descargar archivos, del codigo que les pondre, el segundo for( ; ; ), se detiene y no termina de descargar los datos y los archivos quedan incompletos, que podria suceder?, lo estoy haciendo en linux

Código
  1. if(argc > 2){
  2.  
  3. char *hst, *file, *dire;
  4. char datos[512];
  5. char buffer[1024];
  6. hst = argv[1];
  7. file = argv[2];
  8. dire = argv[3];
  9.  
  10. int sock;
  11. int i = 0;
  12. int bytes = 0;
  13. int dbytes;
  14.  
  15. memset(buffer, 0, 1024);
  16.  
  17. struct sockaddr_in cox;
  18. struct hostent *ht;
  19.  
  20. sprintf(datos, "GET %s HTTP/1.1\nHost: %s\nUser-Agent: Mozilla/4.0\n\n", file, hst);
  21.  
  22. sock = socket(AF_INET, SOCK_STREAM, 0);
  23.  
  24. ht = gethostbyname(hst);
  25.  
  26. cox.sin_family = AF_INET;
  27. cox.sin_port = htons(80);
  28. cox.sin_addr = *((struct in_addr*)ht->h_addr);
  29. memset(&cox.sin_zero, 0, 8);
  30.  
  31. connect(sock, (struct sockaddr*)&cox, sizeof(struct sockaddr));
  32.  
  33. FILE *fp = fopen(dire, "wb");
  34.  
  35. send(sock, datos, strlen(datos), 0);
  36.  
  37. for(;;){
  38.  
  39. recv(sock, buffer + i, 1, 0);
  40. i++;
  41. if(strncmp(buffer+i-4, "\r\n\r\n", 4) == 0){
  42. break;
  43. }
  44. }
  45. for(;;){
  46.  
  47. memset(buffer,0,1024);
  48. bytes = recv(sock, buffer, 1024, 0);
  49. dbytes += bytes;
  50. printf("%d KB\n", dbytes/1024);
  51. fwrite(buffer, sizeof(char), bytes ,fp);
  52. if(bytes <= 0){
  53. break;
  54. }
  55. }
  56. printf("Bytes: %d\n", dbytes);
  57. fclose(fp);
  58. close(sock);
  59. }
  60. }
  61.  

todavia le faltan cosas, pero ahorita lo hice para que descargue de esta manera
Citar
./downfiles www.oocities.org /dreamlfpg315/dll/ensamblador.txt ensamblador.txt



207  Programación / ASM / Re: me podrian ayudar explicandome dudas sobre PEB y shellcode porfavor en: 19 Junio 2012, 07:42 am
pues tengo varios link sobre PEB, por ejemplo

http://el-blog-de-thor.blogspot.mx/2011/05/obtener-la-direccion-base-de.html

asi que si logro entender lo mejor posible como funciona, solo que me esfuerzo para entender ASM, y eso hace que me confunda rapido

y formato PE si estudie, por ejemplo

http://foro.elhacker.net/analisis_y_diseno_de_malware/taller_en_construccionsecciones_en_archivos_pe-t362515.0.html

http://foro.elhacker.net/analisis_y_diseno_de_malware/que_es_un_runpe-t340360.0.html

y libros si tengo, creanme que los sigo estudiando el lenguaje, tambien tengo varios link donde estuve googlendo para encontrar cosas como "movzx", "lodsb", etc...

y bueno, sigo haciendo ejercicios para acostumbrarme, y durante muchos años me acostumbre al codigo de alto nivel, y el cambio a lenguaje de bajo nivel, pues me confunden varias cosas

bueno, espero no una gran explicacion a todo, pero lo que puedan ayudarme seria muy bueno

salu2
208  Programación / ASM / Re: para que sirve LEA y cual es la diferencia con MOV? en: 19 Junio 2012, 07:30 am
jeje gracias a los 2 por responderme

mmm creo ahora entender porque cuando quise hacer un shell me funcionaron de las dos formas

Código
  1. [BITS 32]
  2.  
  3. call start
  4.  
  5. start:
  6.  
  7. mov eax, cd
  8. push eax
  9. mov eax, 76B4E5FDh
  10. call eax
  11. mov eax, 76B1214Fh
  12. call eax
  13.  
  14. cd:
  15. db 'cmd.exe', 0
  16.  

Código
  1. [BITS 32]
  2.  
  3. call start
  4.  
  5. start:
  6.  
  7. lea eax, [cd]
  8. push eax
  9. mov eax, 76B4E5FDh
  10. call eax
  11. mov eax, 76B1214Fh
  12. call eax
  13.  
  14. cd:
  15. db 'cmd.exe', 0
  16.  

 y pues nop, el vino no me llego, solo era para los que viven en España, asi que le deje la desicion a dimitrix sobre si se lo quedaba el o se lo daba al segundo lugar, no se que habra hecho, ya no pregunte, pero bueno

gracias

salu2
209  Programación / ASM / me podrian ayudar explicandome dudas sobre PEB y shellcode porfavor en: 19 Junio 2012, 05:27 am
hola

Me podrian ayudar a entender esto

Código
  1. api_call:
  2.  pushad     ;registros a pila
  3.  mov ebp, esp
  4.  xor edx, edx
  5.  mov edx, [fs:edx+48] ;puntero a PEB
  6.  mov edx, [edx+12]    ;puntero a LDR
  7.  mov edx, [edx+20]    ;puntero al primer modulo de la lista de InMemoryOrder
  8.  
  9.  
  10. next_mod:
  11.  mov esi, [edx+40]    ;puntero al nombre de los modulos
  12.  movzx ecx, word [edx+38] ;logitud a verficar
  13.  xor edi, edi
  14.  
  15.  

Esta parte no la entiendo... se movera a esi edx+40, supuestamente es el puntero a los modulos pero donde encuentro informacion sobre el porque edx+40 apunta a los nombres

movzx tengo entendido que es para mover a un destino rellenando con ceros, pero porque un word [edx+38]?

Código
  1. loop_modname:
  2.  xor eax, eax
  3.  lodsb
  4.  cmp al, 'a'        ;el nombre del modulo esta en minuscula
  5.  jl not_lowercase   ;lo pasamos
  6.  sub al, 0x20       ;a mayuscula  
  7.  
  8. not_lowercase:
  9.  ror edi, 13        ;rotamos hacia la derecha
  10.  add edi, eax       ;el valor del hash
  11.  loop loop_modname  ;hasta ecx=0

Aqui quiero creer que lo que pasa es que lodsb leera byte por byte de mov esi, y lo metera en ax, se hara una comparacion con los ultimos 8 bits y si resulta a minuscula se hara mayuscula y saltara a not_lowercase

entiendo que ror es para voltear a la derecha, pero porque 13?, add hace una suma de edi + eax?, y como que el hash?, el que yo le pongo por ejemplo

 push 0x876F8B31 ;hash para WinExec a pila

o cual hash?

y me imagino que el loop hace que repita ecx que se relizo en next_mod

Código
  1. push edx           ;Posicion
  2.  push edi           ;y hash del modulo actual a pila
  3.  mov edx, [edx+16]  ;direccion base del modulo a edx
  4.  mov eax, [edx+60]  ;cabecera PE a eax
  5.  add eax, edx
  6.  mov eax, [eax+120] ;EAT a eax
  7.  test eax, eax      ;hay EAT?
  8.  jz get_next_mod1   ;no, siguiente modulo
  9.  add eax, edx
  10.  push eax           ;EAT del modulo a pila
  11.  mov ecx, [eax+24]  ;numero de funciones del modulo a ecx
  12.  mov ebx, [eax+32]  ;RVA de las funciones a ebx
  13.  add ebx, edx          


Código
  1. push edx           ;Posicion
  2.  push edi           ;y hash del modulo actual a pila

Esto creo que es edx del inicio, puntero del primer modulo, y el hash que se caba de encontrar, el cual todavia no entiendo cual

Código
  1. mov edx, [edx+16]  ;direccion base del modulo a edx

este me imagino que es PVOID BaseAddress

Código
  1. mov eax, [edx+60]  ;cabecera PE a eax
  2.  add eax, edx
  3.  mov eax, [eax+120] ;EAT a eax
  4.  test eax, eax      ;hay EAT?
  5.  jz get_next_mod1   ;no, siguiente modulo

creo que es el PE de kernel32.dll y la suma de eax y edx mas 120 me llevara a EAT, si no hay entonces llegare a get_next_mod1

Código
  1. get_next_mod1:
  2.  pop edi         ;hash del siguiente modulo a eax
  3.  pop edx         ;posicion donde quedamos en la lista de modulos a edx
  4.  mov edx, [edx]  ;puntero al siguiente modulo
  5.  jmp short next_mod

me imagino que saco de la pila edi, edx y regresamos a la posicion de antes y se repite next_mod


Código
  1. add eax, edx
  2.  push eax           ;EAT del modulo a pila
  3.  mov ecx, [eax+24]  ;numero de funciones del modulo a ecx
  4.  mov ebx, [eax+32]  ;RVA de las funciones a ebx
  5.  add ebx, edx    
  6.  
  7.  

posiblemente aqui se encuentra EAT me llevara a RVA donde estan las funciones del modulo

Código
  1. get_next_func:
  2.  jecxz get_next_mod ;si no quedan mas funciones, vamos con el siguiente modulo
  3.  dec ecx            ;numero de la funcion - 1
  4.  mov esi, [ebx+ecx*4]  ;RVA de la funcion a esi
  5.  add esi, edx
  6.  xor edi, edi

pero me imagino que pasa si se leen tods las funciones, aunque no entiendo como funcionaria

Código
  1. loop_funcname:
  2.  xor eax, eax
  3.  lodsb           ;byte por byte del nombre de la funcion en ASCII
  4.  ror edi, 13     ;buscamos
  5.  add edi, eax    ;el caracter
  6.  cmp al, ah      ;nulo que indica el final de la cadena
  7.  jne loop_funcname ;hasta tener el hash completo de la funcion
  8.  add edi, [ebp-8]  ;edi=hash del modulo+hash de la funcion
  9.  cmp edi, [ebp+36] ;es la que buscamos?
  10.  jnz get_next_func ;no, sigamos con la siguiente funcion    
  11.  
  12.  pop eax           ;EAT del modulo a eax
  13.  mov ebx, [eax+36] ;conseguimos RVA
  14.  add ebx, edx      ;le a?adimos la direccion base del modulo
  15.  mov cx, [ebx+2*ecx]
  16.  mov ebx, [eax+28]  ;RVA de la funciones a ebx
  17.  add ebx, edx       ;le a?adimos la direccion base del modulo
  18.  mov eax, [ebx+4*ecx] ;RVA de la funcion que queremos a eax
  19.  add eax, edx       ;le a?adimos la direccion base del modulo y listo, en eax  
  20.  
  21. finish:
  22.  mov [esp+36], eax ;viene un popad asiq salvamos eax, escribiendolo sobre el valor

Y para finalizar

Me imagino que se hace exactamente lo mismo para buscar la funcion con loop

Código
  1. loop_funcname:
  2.  xor eax, eax
  3.  lodsb           ;byte por byte del nombre de la funcion en ASCII
  4.  ror edi, 13     ;buscamos
  5.  add edi, eax    ;el caracter
  6.  cmp al, ah      ;nulo que indica el final de la cadena
  7.  jne loop_funcname ;hasta tener el hash completo de la funcion

esto no entiendo que hace, solo se que sirve para verfiricar que es la que buscamos, pero porque ebp-8 y ebp+36

Código
  1. add edi, [ebp-8]  ;edi=hash del modulo+hash de la funcion
  2.  cmp edi, [ebp+36] ;es la que buscamos?
  3.  jnz get_next_func ;no, sigamos con la siguiente funcion    
  4.  
  5.  

Aqui y solo me imagino que es agregar a la pila todo los datos

Código
  1. pop eax           ;EAT del modulo a eax
  2.  mov ebx, [eax+36] ;conseguimos RVA
  3.  add ebx, edx      ;le a?adimos la direccion base del modulo
  4.  mov cx, [ebx+2*ecx]
  5.  mov ebx, [eax+28]  ;RVA de la funciones a ebx
  6.  add ebx, edx       ;le a?adimos la direccion base del modulo
  7.  mov eax, [ebx+4*ecx] ;RVA de la funcion que queremos a eax
  8.  add eax, edx       ;le a?adimos la direccion base del modulo y listo, en eax
  9.  

y finalizamos

Código
  1. finish:
  2.  mov [esp+36], eax ;viene un popad asiq salvamos eax, escribiendolo sobre el valor

Perdon se que son muchas preguntas pero espero me puedan ayudar poco a poco, porque ya pase varios dias leyendo y googlendo sobre muchas cosas, afortundente el formato PE lo logre entender y bueno el manual que hay para formato PE sobre windows pues sigo leyendo

varias funciones que desconocia de ASM las sigo aprendiendo, ya logre hacer una shell con las direcciones de WinExec y ExitProcess, me costo un poco de trabajo porque no sabia como hacer un push a "db 'cmd.exe', 0'"... XD

y buscando me di cuenta que con esas mismas direcciones se puede ejecutar una shell con PEB, esto lo encontre del blog Harmony Security

Código
  1. [BITS 32]
  2. [ORG 0]
  3.  
  4.  cld                    // clear the direction flag
  5.  call start             // call start, this pushes the address of 'api_call' onto the stack
  6. delta:
  7.  %include "./x86_api_call.asm"
  8. start:
  9.  pop ebp                // pop off the address of 'api_call' for calling later
  10.  
  11.  push byte +1           // push the command show parameter
  12.  lea eax, [ebp+command-delta] // calculate an address to the command line
  13.  push eax               // push the command line parameter
  14.  push 0x876F8B31        // push the hash value for WinExec
  15.  call ebp               // kernel32.dll!WinExec( &command, SW_NORMAL )
  16.  
  17.  push byte 0            // push the desired exit code parameter
  18.  push 0x56A2B5F0        // push the hash value for ExitProcess
  19.  call ebp               // call kernel32.dll!ExitProcess( 0 )
  20.  
  21. command:
  22.  db "calc.exe", 0
  23.  

y pues estoy interesado en aprender a hacer cosas como esas

bueno, espero me puedan ayudar

salu2
210  Programación / ASM / para que sirve LEA y cual es la diferencia con MOV? en: 19 Junio 2012, 03:32 am
hola

me podrian explicar para que funciona LEA y cual es la diferencia entre LEA y MOV

es que googlendo encontre un poco pero no entendi bien, y pues algo que encontre tambien fue la diferencia de lea y mov pero me quisiera saber si alguien tiene una explicacion mas amplia porfavor

salu2  ;D
Páginas: 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ... 49
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines