2011-01-10 81 views
1

我试图“破解”一个控制台程序,迫使它显示一些东西。问题是我无法打印换行符(\r\n)。 随着disassebler我找到了那个地方和编辑二进制:call printf()编辑可执行文件

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 

正如我所说的,我无法打印一个换行符。我尝试在格式字符串中编码"\r\n"(因此它变成"%s\r\n",就像我在C中所做的那样)并获得打印"Hi guys\r\n",并将其编码为 字符串本身(使其为"Hi guys\x13\x10")并获得"Hi guys"和两个奇怪字符,可能是ASCII表示0x13和0x10。

+0

你得到了什么“奇怪的人物”?对你而言,似乎很陌生的东西可能是对别人有用的信息。 – 2011-01-10 18:02:30

+0

一种'!!'和一个三角形,类似'|>' – BlackBear 2011-01-10 18:05:39

回答

2

第二次尝试将字符直接嵌入到字符串中是正确的方法。但是,您使用了错误的字符数字。 ASCII码返回/换行的编号是13和10(十进制),即0x0d和0x0a(十六进制)。你已经使用了0x13和0x10,它们是不同的字符。

请参阅Code page 437表中的字符编号。字符19和16(十进制)确实是一个正确的指向三角形和一个双重感叹号。

1

一个换行符(在Windows中)是\r\n

+0

Ops!我会编辑。 ;)但它不起作用。 – BlackBear 2011-01-10 18:01:05