誰のためですか?
1)リバースエンジニアリングの特性を知っていて、GDBのようなデバッガーを学びたい初心者のリバースエンジニア
2)IDA、Ghidra、またはその他の強力で信頼性の高いツールを常に使用している人へのヒントとして、ただし特定の状況により、GDBを使用して問題を解決する方が簡単かつ迅速であり、公式ドキュメントにアクセスしてすべてをもう一度覚えておきたくありません。
基本的なコマンド
ランニング
分析する実行可能ファイルを選択するための一般的な構文
gdb program_name
プログラムの実行を開始します
run | r
gdbserverに参加する
target remote host:port
プロセスに参加し、プロセスから切断します
attach PID / detach
gdbを終了します
quit | q CTRL + D
set disassembly-flavor intel/att
,
info file
info functions | i func
asm-
disas func_name disas address
( -g3 gcc) ,
list func_name
set args show args
info proc mappings
registers
step | s
next | n
,
until | u number_of_list_string until | u *func_name+offset until | u *address
, ( , )
info args info locals info frame
info threads thread number
breakpoints
b func_name b *func_name+offset b *address
, , breakpoint
info break disable/enable breakpoint_number delete breakpoint_number ignore breakpoint_number n // n
breakpoint-
continue | c
telescope telescope $rsp+64
x, "/"
x/i - x/x - hex x/s - x/a -
x/b - 8-bit x/h - 16-bit x/w - 32-bit x/g - 64-bit
x/64bx x/i $pc
run $(python -c "print('A'*32 + '\xde\xad')") run $(echo "asdf\\xde\xad")
run <<< $(python -c "print('A1'*3)") run <<< $(echo "asdf\xde\xad")
Gdb
gdb
gdbserver host:port program
Reverse Debug
, , CFG .. , gdb Reverse Debug, .
, gdb, reverse debug
record
reverse-step reverse-next
( )
dump memory output_file start_addr end_addr
, display
display/5i $pc display/g $rax display/g $rbx display/g $rcx
GEF
gdb gef, , , . .
aslr, /
aslr aslr on/off
ASLR, Canary, PIE ..
checksec
heap chunks
,
canary
, info proc mappings
vmmap
フラグのレジスタを表示し、それらを変更します
flags flags -Flag_name +Flag_name
フォーマット文字列の脆弱性を見つけるためのヘルプ(ブレークポイントの設定、見つかった関数に関する情報)
format-string-helper
パターンを作成して見つける
pattern create 128 pattern search 0x61616167 pattern search $rbp
パターンで文字列を検索
search-pattern pattern
パッチ
patch byte/word/dword/qword address value
pythonコードでコピーするのに便利な形式で配列を印刷します。Bパラメータは8/16/32/64である必要があり、lはアレイの長さを制御します
例
print-format -b 64 -l 1 $rsp
パターンでシェルコードを検索するには
shellcode search pattern shellcode get shellcode_number
メモリとレジスタのXorim値
xor display address/register size xor_key xor patch address/register size xor_key