Question

Je suis en train de « crack » un programme de la console, le forçant à afficher quelque chose. Le problème est que je ne peux pas imprimer un saut de ligne (\r\n). Avec un disassebler j'ai trouvé le lieu et le binaire édité:

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

Comme je l'ai dit, je ne peux pas imprimer une nouvelle ligne. J'ai essayé encode "\r\n" dans la chaîne de format (il devient "%s\r\n", comme je le ferais en C) et obtenir imprimé "Hi guys\r\n", et l'encoder dans la chaîne elle-même (ce qui en fait "Hi guys\x13\x10") et obtenir "Hi guys" et deux personnages étranges, sans doute la représentation ASCII de 0x13 et 0x10.

Était-ce utile?

La solution

Votre deuxième tentative, avec l'intégration des caractères directement dans la chaîne, était la bonne approche. Cependant, vous avez utilisé les numéros de mauvais caractère. Les numéros de retour / saut de ligne en ASCII sont 13 et 10 (en décimal), qui est 0x0D et 0x0A (hex). Vous avez utilisé 0x13 et 0x10, qui sont différents caractères.

Voir la table page 437 pour les numéros de caractères. Les caractères 19 et 16 (décimal) sont en effet un triangle pointant vers la droite et une marque double point d'exclamation.

Autres conseils

Un saut de ligne (sous Windows) est \r\n.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top