2017-11-10 17 views
0

ヒューリスティックなデータ解析手法を使用して悪意のある命令を分析するためにPIDで実行中のプロセスのマシンコードを取得します。デバッガを接続せずにPIDでプロセスのマシンコードを取得

私が知る必要があるのは、現在の機械命令とレジスタ値(EIP、EAX、EBX ...)のリストです。私は自分のアプリケーションからのgdbと対話する方法がわからない

LinuxのPIDによってこの情報を取得する方法はありますか?それともWindows?

答えて

0

あなたはgcoreをする顔をしていることがあります。

$ 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 

$ gcore 
usage: gcore [-o filename] pid 

はそうあなたがそのPIDを使用してプロセスのコアをダンプすることができます/ procのバイナリイメージを使っていくつかのシンボルを取得することさえできます:

gdb -c core.792 /proc/792/exe 

gdbにスクリプトを渡すことができます。これは、バイナリ(gdbのmandbの詳細)とやりとりする必要がないためです。

gdbを直接使用したくない場合は、直接ptrace()を試してみてください。しかし、もっと多くの作業が確実です。

アンチ・デバッギング・テクニクスでは、うまくいきます。私が知る限り、それらを直接処理する簡単な方法はありません。それぞれが手作業で作業することができます(バイナリのパッチを当て、 objdumpなどで設定)

私はドメインのエキスパートではありません。これは少し助けてくれることを願っています。

+0

ありがとうございました。 –

関連する問題