Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Belial & Grimoire en 17 Mayo 2010, 00:06 am



Título: no entiendo este error en asm con gcc, que puede estar mal?
Publicado por: Belial & Grimoire en 17 Mayo 2010, 00:06 am
hola

estuve viendo un post hecho aqui sobre como ejecutar asm en VC++ 6 con una inyeccion... lo intente en gcc pero cuando lo hago me dice otras cosas

en el post escribieron esto

Código
  1. #include <windows.h>
  2. #define ZOutput 0x00401080
  3.  
  4. char* t = "Hola";
  5.  
  6. while(1)
  7. {
  8. //Para utilizar assembler en c++ ponemos __asm
  9. __asm
  10. {
  11. pushad //guardamos los valores de los registros para no intervenir con el progama
  12. push t//ponemos t en el stack
  13. mov eax, ZOutput//Muevo la direccion de la funcion a eax
  14. call eax//Llamo a eax (llamo a la funcion)
  15. add esp,4//Limpio el Stack modificando la ultima direccion introducida
  16. popad//reestablecemos los registros
  17. }
  18. Sleep(1000);
  19. }
  20.  

pero yo no he podido usar "#define" ni tampoco el puntero a char "t"..., y lo hice asi... mingcc me deja compilarlo, pero cuando lo ejecuto, me aparece un error y se cierra el programa

Código
  1. int main(){
  2.  
  3.    while(1){
  4.  
  5.        __asm__("pusha\n\t"
  6.        "push 222\n\t"
  7.        "mov 0x004012D0, %eax\n\t"
  8.        "call %eax\n\t"
  9.        "add %esp,4\n\t"
  10.        "popa");
  11.    }
  12.  
  13.  
  14. }

hice mi propio inyector, mi propia funcion y la dll funciona sin problemas si al colocar en el while escribo un printf, pero a la hora de hacerlo con el ensamblador, me sale un error, no se si es por el codigo, el cual no me dice de algun error al compilar, si es ebx en vez de eax, si la direccion es incorrecta en mov... y es la primera vez que intento manejar asm, solo he leido un poco de algunos libros, por eso es que no tengo mucha idea de que podria ser

alguien me puede ayudar... les dejo la tabla de lo que me dice olly, a ver si me pueden aclarar un poco mas sobre el manejo de asm con ese problema

Código:
CPU Disasm
Address   Hex dump          Command                                  Comments
004012D0  /$  55            PUSH EBP                                 ; funcion.004012D0(guessed void)
004012D1  |.  89E5          MOV EBP,ESP
004012D3  |.  83EC 08       SUB ESP,8
004012D6  |.  C70424 003040 MOV DWORD PTR SS:[LOCAL.2],OFFSET funcio ; /format => "hola"
004012DD  |.  E8 4E080000   CALL <JMP.&msvcrt.printf>                ; \MSVCRT.printf
004012E2  |.  C9            LEAVE
004012E3  |.  31C0          XOR EAX,EAX
004012E5  \.  C3            RETN
004012E6      8D76 00       LEA ESI,[ESI]
004012E9      8DBC27 000000 LEA EDI,[EDI]
004012F0  /$  55            PUSH EBP
004012F1  |.  B8 10000000   MOV EAX,10
004012F6  |.  89E5          MOV EBP,ESP
004012F8  |.  83EC 08       SUB ESP,8
004012FB  |.  83E4 F0       AND ESP,FFFFFFF0                         ; DQWORD (16.-byte) stack alignment
004012FE  |.  E8 CD070000   CALL 00401AD0                            ; Allocates 16. bytes on stack
00401303  |.  E8 78040000   CALL 00401780                            ; [funcion.00401780
00401308  |.  90            NOP
00401309  |.  8DB426 000000 LEA ESI,[ESI]
00401310  |>  E8 BBFFFFFF   /CALL 004012D0                           ; [funcion.004012D0
00401315  |.  C70424 E80300 |MOV DWORD PTR SS:[LOCAL.6],3E8          ; /Time => 1000. ms
0040131C  |.  E8 67080000   |CALL <JMP.&KERNEL32.Sleep>              ; \KERNEL32.Sleep
00401321  |.  83EC 04       |SUB ESP,4
00401324  \.^ EB EA         \JMP SHORT 00401310

salu2


Título: Re: no entiendo este error en asm con gcc, que puede estar mal?
Publicado por: Eternal Idol en 17 Mayo 2010, 09:29 am
No veo el pusha en la captura del Olly ...


Título: Re: no entiendo este error en asm con gcc, que puede estar mal?
Publicado por: Foxy Rider en 17 Mayo 2010, 11:33 am
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.4

Saludos.