Domanda

Sto cercando di "crack" un programma di console, costringendolo a visualizzare qualcosa. Il problema è che non riesco a stampare un ritorno a capo (\r\n). Con un disassebler Ho trovato il posto e modificato il file 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

Come ho detto, non riesco a stampare un ritorno a capo. Ho provato a codificare "\r\n" nella stringa di formato (in modo che diventi "%s\r\n", come avrei fatto in C) e ottenere "Hi guys\r\n" stampati, e codificare nel stringa stessa (rendendolo "Hi guys\x13\x10") ed ottenere "Hi guys" e due strani personaggi, probabilmente la rappresentazione ASCII di 0x13 e 0x10.

È stato utile?

Soluzione

Il secondo tentativo, con l'incorporamento dei caratteri direttamente nella stringa, è stato l'approccio giusto. Tuttavia, hai utilizzato i numeri carattere errato. I numeri di dichiarazione / avanzamento riga in ASCII sono 13 e 10 (decimale), che è 0x0d e 0x0a (esadecimale). Hai usato 0x13 e 0x10, che sono caratteri diversi.

, vedere la tabella a 437 per i numeri di caratteri. I caratteri 19 e 16 (decimale) sono infatti un triangolo che punta a destra e un punto esclamativo doppio.

Altri suggerimenti

Una nuova riga (in Windows) è \r\n.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top