gpt4 book ai didi

linux - 在不附加调试器的情况下通过 PID 获取进程的机器码

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:41 25 4
gpt4 key购买 nike

我想通过数据分析的启发式方法,通过他的PID获取运行进程的机器码,用于分析恶意指令。

我只需要知道当前机器指令列表和寄存器值(EIP、EAX、EBX...)。

我可以使用 gdb 来达到这个目标 gdb output , 但有几个问题:

有什么方法可以在 Linux 中通过 PID 获取此信息?或者可能是 Windows?

最佳答案

你可以看看 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 等...)

我不是该领域的专家,希望这对您有所帮助。

关于linux - 在不附加调试器的情况下通过 PID 获取进程的机器码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47230174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com