サイズ: 2211
コメント:
|
サイズ: 3885
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 21: | 行 21: |
= x86 assembly = * Intel記法 * データはオペランドの右から左に流れる * 比較命令のオペランドの順序が命令名と一致しているためわかりやすい * 例{{{ mov -0x8(%rbp),%eax add DWORD PTR [rbp-0x4],eax add DWORD PTR [rbp-0x8],0x1 cmp DWORD PTR [rbp-0x8],0x9 jle 14 <f+0x14> mov eax,DWORD PTR [rbp-0x8] }}} * AT&T記法 * Intel記法のオペランドと逆順 * 例{{{ mov eax,DWORD PTR [rbp-0x8] add %eax,-0x4(%rbp) addl $0x1,-0x8(%rbp) cmpl $0x9,-0x8(%rbp) jle 14 <f+0x14> mov -0x8(%rbp),%eax }}} = x86/x86-64 ABI = チートシート = System call = * システムコールとは * プログラムがカーネルとやりとりする一元化された窓口 * プログラムの動作権限 * ユーザモード * 普通のプログラムが動作 * 基本的にプロセスのメモリ内で計算しかできない. * それ以外のことをするためにはシステムコールを呼ぶ * カーネルモード * カーネルが動作 * 任意の操作が可能 {{attachment:systemcall.png}} = How to call System calls = システムコールの呼び出し方 * x86 * int 0x80 * INTerrupt (ソフトウェア割り込み命令) * システムコール番号: eax * 引数: ebx, ecx, edx, esi, edi, ebp * x86-64 * syscall命令 * システムコール番号: rax * 引数: rdi, rsi, rdx, r10, r8, r9 ||<rowclass="header"> arch || instruction || syscall # || retval || arg1 || arg2 || arg3 || arg4 || arg5 || arg6 || || x86 || int 0x80 || eax || eax || ebx || ecx || edx || esi || edi || ebp || || x86-64 || syscall || rax || rax || rdi || rsi || rdx || r10 || r8 || r9 || |
|
行 33: | 行 90: |
= x86/x86-64 ABI = チートシート = System call = システムコールの呼び出し方 |
Pwn勉強会(Stack day 1)
Tools
- Disassembler
- udcli / ndisasm
- objdump
- METASM / Hopper / IDA Pro
- Assembler
- nasm
- Pwntools
- METASM?
- Debugger
- gdb-peda
- Pwn toolkit
- Pwntools
- Ruby系でなにか
Python(Pwntools)とRuby(METASM? ctfライブラリ?)好きな方を選んで作業を進めてもらう.
x86 assembly
- Intel記法
- データはオペランドの右から左に流れる
- 比較命令のオペランドの順序が命令名と一致しているためわかりやすい
例
mov -0x8(%rbp),%eax add DWORD PTR [rbp-0x4],eax add DWORD PTR [rbp-0x8],0x1 cmp DWORD PTR [rbp-0x8],0x9 jle 14 <f+0x14> mov eax,DWORD PTR [rbp-0x8]
AT&T記法
- Intel記法のオペランドと逆順
例
mov eax,DWORD PTR [rbp-0x8] add %eax,-0x4(%rbp) addl $0x1,-0x8(%rbp) cmpl $0x9,-0x8(%rbp) jle 14 <f+0x14> mov -0x8(%rbp),%eax
x86/x86-64 ABI
チートシート
System call
- システムコールとは
- プログラムがカーネルとやりとりする一元化された窓口
- プログラムの動作権限
- ユーザモード
- 普通のプログラムが動作
- 基本的にプロセスのメモリ内で計算しかできない.
- それ以外のことをするためにはシステムコールを呼ぶ
- カーネルモード
- カーネルが動作
- 任意の操作が可能
- ユーザモード
How to call System calls
システムコールの呼び出し方
- x86
- int 0x80
- INTerrupt (ソフトウェア割り込み命令)
- システムコール番号: eax
- 引数: ebx, ecx, edx, esi, edi, ebp
- int 0x80
- x86-64
- syscall命令
- システムコール番号: rax
- 引数: rdi, rsi, rdx, r10, r8, r9
arch |
instruction |
syscall # |
retval |
arg1 |
arg2 |
arg3 |
arg4 |
arg5 |
arg6 |
x86 |
int 0x80 |
eax |
eax |
ebx |
ecx |
edx |
esi |
edi |
ebp |
x86-64 |
syscall |
rax |
rax |
rdi |
rsi |
rdx |
r10 |
r8 |
r9 |
Shellcode
Shellcode(no /bin/sh)
Return-to-plt
ASLR
ASLRについて説明
Return-to-libc
Return-to-plt revisited(x86-64) with tiny ROP
ROP
実践
適当な問題を探す