вы можете взглянуть на gcore:
$ gcore
usage: gcore [-o filename] pid
поэтому вы можете сбросить ядро процесса, используя его pid:
$ gcore 792
warning: Could not load vsyscall page because no executable was specified
0x00007f5f73998410 in ?? ()
Saved corefile core.792
а затем откройте его в gdb:
$ gdb -c core.792
GNU gdb (GDB) Fedora 8.0.1-30.fc26
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
[...]
[New LWP 792]
Missing separate debuginfo for the main executable file
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/09/b9d38bb6291b6282de4a2692e45448828d50da
Core was generated by `./a.out'.
#0 0x00007f5f73998410 in ?? ()
(gdb) info registers
rax 0xfffffffffffffe00 -512
rbx 0x0 0
rcx 0x7f5f73998410 140047938061328
rdx 0x1 1
rsi 0x7ffd30683d73 140725415591283
rdi 0x3 3
rbp 0x7ffd30683d90 0x7ffd30683d90
rsp 0x7ffd30683d68 0x7ffd30683d68
r8 0x1d 29
r9 0x0 0
r10 0x3 3
r11 0x246 582
r12 0x4006d0 4196048
r13 0x7ffd30683e70 140725415591536
r14 0x0 0
r15 0x0 0
rip 0x7f5f73998410 0x7f5f73998410
eflags 0x246 [ PF ZF IF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
или даже используя бинарное изображение из /proc для получения некоторых символов:
gdb -c core.792 /proc/792/exe
Возможно, вы знаете, что вы можете передавать скрипты в gdb, это может упростить взаимодействие с ним из вашего двоичного файла (man gdb для более подробной информации).
если вы не хотите использовать gdb напрямую, вы можете попробовать использовать ptrace()
напрямую, но это наверняка больше работы.
Что касается методов защиты от отладки, ну... они работают, и, насколько я знаю, нет простого способа справиться с ними напрямую, каждый из них можно обойти вручную (исправление двоичного кода, дизассемблирование с невыровненных адресов вручную, установив затем в objdump , и т.д...)
Я не эксперт в этой области, надеюсь, это вам немного поможет.
person
OznOg
schedule
10.11.2017