Pregunta

Estoy tratando de "crack" un programa de consola, lo que obligó a mostrar algo. El problema es que no puedo imprimir una nueva línea (\r\n). Con un disassebler he encontrado el lugar y editado el binario:

push 4ad0eb46                      ; the string (let's pretend "Hi guys")
push 4ad0eb80                      ; and the format ("%s")
call near ds:[<&msvcrt.printf>]    ; call printf
jmp 4ad0eb4f                       ; skip data

; now here I coded the strings

mov ds:[4ad289ec],eax              ; and here the program resumes

Como ya he dicho, no puedo imprimir una nueva línea. Probé "\r\n" codificar en la cadena de formato (por lo que se convierte en "%s\r\n", tal como lo haría en C) y obtener "Hi guys\r\n" impreso, y codificarlo en el propia cadena (por lo que es "Hi guys\x13\x10") y bajar "Hi guys" y dos caracteres extraños, probablemente la representación ASCII de 0x13 y 0x10.

¿Fue útil?

Solución

Su segundo intento, con la incorporación de los caracteres directamente en la cadena, era el enfoque correcto. Sin embargo, usted ha utilizado el número de caracteres incorrectos. Los números para la devolución / avance de línea en ASCII son 13 y 10 (decimal), que es 0x0D y 0x0A (hex). Usted ha utilizado 0x13 y 0x10, que son caracteres diferentes.

Consulte la tabla en página 437 para los números de caracteres. Los caracteres 19 y 16 (decimal) son de hecho un triángulo que apunta hacia la derecha y un signo de exclamación doble.

Otros consejos

A de nueva línea (en Windows) es \r\n.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top