Вызов fopen в GDB - PullRequest
       22

Вызов fopen в GDB

0 голосов
/ 30 апреля 2018

Я переворачиваю скомпилированную программу (написанную на C), и она открывает файл (который у меня нет прав на чтение), например:

fopen("/home/user00/.pass", 'r')

затем проверяет возврат:

   ...
   0x4008a8 <main+148>: call   0x400700 <fopen@plt>
   0x4008ad <main+153>: mov    QWORD PTR [rbp-0x8],rax
=> 0x4008b1 <main+157>: cmp    QWORD PTR [rbp-0x8],0x0
   0x4008b6 <main+162>: jne    0x4008e6 <main+210>
   0x4008dc <main+200>: mov    edi,0x1
   0x4008e1 <main+205>: call   0x400710 <exit@plt>
   ...

Так что, если файл не открывается, программа завершается.

Я, очевидно, могу обмануть это, установив $rax=1, но тогда программа попытается прочитать файл и получит ошибку. Поэтому я подумал, что могу:

gdb call fopen("/a/file/I/can/read", 'r')

И продолжаю мою обратную работу, но, к сожалению, программа получает другой segfault, когда я выполняю эту команду.

Так что мне интересно, возможно ли каким-то образом (распределением или чем-то еще) позвонить fopen? Я уже безуспешно искал ответы в Интернете.

Эта программа является частью задачи моей школы по безопасности ISO CTF.

Спасибо!

1 Ответ

0 голосов
/ 01 мая 2018

к сожалению, при выполнении этой команды программа получает другой segfault.

Это потому, что у вас есть ошибка в вашей команде. Должно быть:

(gdb) call fopen("/a/file/I/can/read", "r")

(В отличие от Python, тип цитат, которые вы используете в C, имеет значение.)

...