0

入力文字列を gdb の 16 進値で指定できますか。たとえば、簡単なプログラム

#include <stdio.h>

int main() {
    char buffer[20];
    fscanf(stdin, "%s", buffer);
    printf("%s", buffer);
}

デバッグ:

ravi@ravi-desktop:~$ gdb -q ./a.out
Reading symbols from /home/ravi/a.out...done.
(gdb) list 1
1   #include <stdio.h>
2   
3   int main() {
4       char buffer[20];
5       fscanf(stdin, "%s", buffer);
6       printf("%s", buffer);
7   }
(gdb) r
Starting program: /home/ravi/a.out 
\x41\x41\x41\x41
\x41\x41\x41\x41
Program exited with code 014.
(gdb) quit

A16進値を使用して入力として4を入力したいのです\x41が、各文字を個別に考慮しています。

実際の要件は、スタックベースのバッファー オーバーフローでシェルコードを使用していて、デバッグ時にシェルコードを 16 進数で入力する必要があることです。

ここで誰か助けてくれませんか。

ありがとうラヴィ

4

2 に答える 2

0

gdb がこの機能を持っていることを期待しているようです。入力で C スタイルのエスケープを解釈して、デバッグされたプログラムが入力'A'時に を取得する必要があります\x41

残念ながら、それは機能する方法ではありません。gdb は、デバッグされたプログラムと端末の間に位置しません。また、端末はその機能をサポートしていないため、機能しません。

于 2013-03-26T15:03:55.913 に答える
0

stdin の代わりにソケットから簡単に読み取ることができます。これにより、gdb にブレークポイントを設定し、あるシェルで何が起こっているかを詳細に調べ、別のシェルにコードを挿入することが非常に簡単になります!

これは、16 進数をソケットに挿入する方法の単なる例です。

echo -e "`perl -e 'print "\x14\xee\xff\xbf"x10 . "\x90"x10'`" | nc 127.0.0.1 1337

--> perl を使用してメモリ アドレスと NOP を出力し、この場合はポート 1337 で nc にパイプして localhost (またはリモート システム) に渡します。

それは私が仮定するあなたの問題を解決しています! ソケットを介して通信するための支援が必要な場合は、stackoverflow でも答えが見つかると確信しています!

于 2013-03-27T17:22:40.463 に答える