GDB查找字符串奇怪的结果

逆向工程 调试 数据库 记忆 字符串
2021-06-18 06:04:33

我在玩 gdb,奇怪的事情正在发生。我想在内存中找到字符串“/bin/sh”所在的某个地址,gdb 说它找到了。但是当我检查那里的内存时,那里的字符串完全不同。

你能帮我找出这种行为的含义吗,我怎样才能真正找到字符串的地址?

(gdb) find 0xb7ecffb0,+999999, "/bin/sh"
0xb7fba23f
1 pattern found.
(gdb) x/s 0xb7fba23f
0xb7fba23f:  "KIND in __gen_tempname\""
1个回答

GDB 大部分时间都找不到真正的字符串。但是,您可以从本地目标文件中找到字符串的偏移量,并使用动态加载信息对其进行调整。

来自info proc map

Mapped address spaces:

Start Addr   End Addr       Size     Offset objfile
 0x8048000  0x8049000     0x1000          0        /opt/protostar/bin/stack6
 0x8049000  0x804a000     0x1000          0        /opt/protostar/bin/stack6
 0x804a000  0x806b000    0x21000          0           [heap]
0xb7e96000 0xb7e97000     0x1000          0        
0xb7e97000 0xb7fd5000   0x13e000          0         /lib/libc-2.11.2.so
0xb7fd5000 0xb7fd6000     0x1000   0x13e000         /lib/libc-2.11.2.so
0xb7fd6000 0xb7fd8000     0x2000   0x13e000         /lib/libc-2.11.2.so
0xb7fd8000 0xb7fd9000     0x1000   0x140000         /lib/libc-2.11.2.so
                                      ...   

并从/lib/libc-2.11.2.so文件:

user@protostar:/opt/protostar/bin$ xxd -u /lib/libc-2.11.2.so |grep -B 1 bin/sh
011f3b0: 6600 696E 6974 7900 6E61 6E00 2D63 002F  f.inity.nan.-c./
011f3c0: 6269 6E2F 7368 0065 7869 7420 3000 6361  bin/sh.exit 0.ca

使用此信息/bin/sh在虚拟地址空间中查找字符串的静态地址

(gdb) x/s 0xb7e97000+0x011f3bf
0xb7fb63bf:  "/bin/sh"

我知道这不是您关于为什么 GDB find 在查找字符串时会显示此行为的第一个问题的答案。我找不到任何关于那件事的信息。我使用了Protostar Stack6 Challenge binary和exploit-exercises-protostar-2.iso环境,所以地址一定要一样。/bin/csh同一个共享对象文件中也有字符串。您可以尝试使用此方法查找该地址。