我正在研究一个crackme,我发现缓冲区溢出,但是当我输入\xNN 时,其中N 是0 和F 之间的任何值,\ 和x 被解释为它们自己的值。我也试过\xNN。
该程序是一个 Linux 可执行文件,所以我在回溯上运行它。该程序处理输入,而不是命令行调用的一部分。我查看了ida中的程序,输入是由__isoc99_scanf完成的。
我可以输入 Unicode,但 04 有问题,所以我需要弄清楚如何使用十六进制。
如果有人有除十六进制以外的建议,那也很棒。
你是什么意思“不是命令行调用的一部分”?如果它在控制台上,您可以使用
perl -e 'print "\xNN" | program
.
甚至
perl -e 'print "\n\whatever\xNN"' | program
.
模拟加法输入。标准输出的输出直接进入程序的标准输入,就像您在输入聊天对象一样。如果它是一个图形应用程序,您总是可以直接修补字节(虽然说起来容易做起来难,这里是如何在 gdb 上做到这一点)。