Hola, quisiera que por favor alguien pudiera ayudarme con el siguiente código.
Quiero hacer un programita que haga lo siguiente:
Compruebe si se presionó una tecla y si así es que devuelva el valor ascii de la tecla presionada, de lo contrario devuelva 0.
Este es el código que tengo, pero no logro capturar el valor y retornar el código ascii de las flechas del teclado.
org 100h
mov ah, 11h
int 16h
je pre_salir
lee_tecla:
mov ah,8h
int 21h
cmp al,0 ;si no es tecla extendida
jnz salir ;salir
lee_tecla_extendida:
int 21h
jmp salir
pre_salir:
mov al,0
salir:
mov ah,4ch
int 21h
Para probarlo ejecuto el programa en un loop de batch así:
@echo off
:ini
programa.com
echo.%errorlevel%
goto ini
Por favor, si alguien me ayuda con la parte de ensamblador se lo agradecería.
Usa una API GetAsyncKeyState
while (true){
if((BYTE)GetAsyncKeyState(0x31)) //1
{
////si presiono la tecla 1 me encuentra :D
//// si no compruebas al que te tiene q devolver cero
}
else
__asm {
push 0
pop eax
//aunq creo q esto sta demas pero no lo he provado :S n_n
}
}
Gracias, al final no pude hacerlo de 16 bits, pero lo solucioné con la idea que me diste de hacerlo con el api de windows.
Si quieres hacerlo con la api de windows mira esto para hacerlo mediante hook
http://foro.elhacker.net/analisis_y_diseno_de_malware/srcasm_base_server_keylogger-t262500.0.html
Mas rato ( si no se me olvida :xD ) te paso el codigo que esto mismo se lo tube que hacer a nakp :P
Gracias, al final lo hice en c, pero cómo usé el Tiny C para compilarlo, el ejecutable me quedó de 1,8 KB, así qué es como si prácticamente lo hubiese hecho en asm.
Cita de: carloseow en 26 Noviembre 2009, 14:32 PM
Gracias, al final lo hice en c, pero cómo usé el Tiny C para compilarlo, el ejecutable me quedó de 1,8 KB, así qué es como si prácticamente lo hubiese hecho en asm.
En ASM si lo haces llamando las librerias desde codigo pudo haber quedado de unos 900bytes
Con VC++ tambien ... es cuestion de saber las opciones de las herramientas que usemos ...
invoke Sleep, 100
invoke GetAsyncKeyState, VK_F1
cmp eax, 0
jz <ATUCODIGO>
aqui tenes una idea, de como podes usarlo :D
Una acotacion que compilador estas usando por que lo tuyo es de 16bits, y es obsoleto :o
Cita de: NoxOner en 27 Noviembre 2009, 16:13 PM
Una acotacion que compilador estas usando por que lo tuyo es de 16bits, y es obsoleto :o
Si no me equivoco es FASM , en el mismo fasm de 32 bits puedes crear .com no es que el ensamblador sea de 16 bits solamente :P
La verdad es que no me manejo mucho con el ensamblador. Al final el ejecutable quedó de 1,3 KB, tengo el código en c. Si alguien estuviera dispuesto a ayudarme y traducir el código en c a ensamblador, para comparar los tamaños resultantes, posteo el código.
Ah, y Eternal ¿podrías decirme con qué opciones se puede configurar el VC++ para que cree ejecutables pequeños?
Ahi va un ejemplo:
http://foro.elhacker.net/programacion_cc/reducir_mas_el_tamano-t254118.0.html
Busca la opciones del enlazador que se usan, hay mas hilos con ejemplos.
Muchas gracias Eternal, ahora quedó pesando 624 bytes.
Dentro del archivo dice: MSVCR90.dll
y cuando lo abro me dice que no encuentra la dll, así es que con un editor se lo cambié por:
MSVCRT.dll
y funciona bien.
Pero tengo un pequeño problemita, me salta el antivirus con ambos .exe de 624 bytes.
¿Cómo podría corregir este problema?
Si es por el tamaño ... ¿Usando un mejor antivirus? :xD Si es por lo que usas tal vez usando GetProcAddress en lugar importar las funciones estaticamente ...