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
#include <windows.h> #define ZOutput 0x00401080 char* t = "Hola"; while(1) { //Para utilizar assembler en c++ ponemos __asm __asm { pushad //guardamos los valores de los registros para no intervenir con el progama push t//ponemos t en el stack mov eax, ZOutput//Muevo la direccion de la funcion a eax call eax//Llamo a eax (llamo a la funcion) add esp,4//Limpio el Stack modificando la ultima direccion introducida popad//reestablecemos los registros } Sleep(1000); }
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
int main(){ while(1){ __asm__("pusha\n\t" "push 222\n\t" "mov 0x004012D0, %eax\n\t" "call %eax\n\t" "add %esp,4\n\t" "popa"); } }
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
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