vim
普通模式 | |
---|---|
G(普通模式) | 來的文字最下方 |
g+g(普通模式下) | 回到文字的開頭 |
f+目標單詞的首字母(find普通模式) | 移動到目標單詞 |
d(delete) | 刪除當前行 |
u(undo) | 撤銷 |
文字模式 | |
I | 從當前行開頭進行輸入 |
A | 當前行文末輸入 |
ida
F7 | 單步執行,遇到call或者函式呼叫就進入 |
---|---|
F8 | 單步執行,遇到call或者函式呼叫就跳過 |
F9 | 開始除錯一直執行 |
F2 | 下一個0xCC的軟體斷點 |
F4 | 執行到游標初 |
U | 取消函式,程式碼,資料的定義 |
C | 把位元組碼翻譯為彙編語句 |
p | 定義函式 |
D | 資料長度型別轉化,1/2/4/8 |
H | 數字->16進位制 |
a | (資料)->字串 |
R | 數字->字元(‘120’打了單引號是個字元y,要ask碼轉換) |
y | 修改資料型別宣告 |
n | 對函式或者變數重新命名(函式名為sub_234875) |
g | 去往某一個地址 |
CTRL F7 | 一直執行 |
shift +f12 | 找出所有字串 |
/ | 在反彙編後介面寫註釋,組合語言介面也可用 |
ctrl+x | 檢視函式或變數的交叉引用(透過flag.txt字串找函式) |
tab | 彙編程式碼與c程式碼視角轉換 |
ctrl+s | 段表資訊 |
telescope+0x地址 | 用stack段的形式檢視記憶體中地址資訊 |
ctrl+t | 查詢特定指令和字串 |
gdb(除錯一定先下斷點)
n | 不進入函式的單步執行 |
---|---|
s | 進入被呼叫(call)函式 |
finish | s步入函式後用會執行完此函式 |
c | 直接執行到下一個斷點。 |
k(kill) | kill當前程序 |
r(run) | 執行程式 |
gdb+檔案 | 動態除錯檔案 |
vmmap | gdb檢視rwx |
b *0x地址 | 打斷點 |
ni | 下一條彙編指令 |
disable b +數字 | 去掉第幾個斷點 |
i r | 檢視暫存器 |
set *0x地址=數字 set $暫存器=數字 | 賦值 |
u64(io.recvline().strip().ljust(8,b'\0')) | |
search + “字串” | 顯示目info b |
info b | 檢視當前斷點 |
bt | 檢視函式呼叫棧 |
info r | 檢視所有暫存器的值。 |
list | 檢視原始碼。 |
vis | 檢視堆塊 |
tel +地址 | 類似檢視stack資訊的格式 |
x/[n/u/f] [addr] :檢視任意記憶體位置的值
n:是正整數,表示需要顯示的記憶體單元的個數,即從當前地址向後顯示n個記憶體單元的內容,一個記憶體單元的大小由第三個引數u定義。
f:表示addr指向的記憶體內容的輸出格式,s對應輸出字串,此處需特別注意輸出整型資料的格式:
x 按十六進位制格式顯示變數.
d 按十進位制格式顯示變數。
u 按十進位制格式顯示無符號整型。
o 按八進位制格式顯示變數。
t 按二進位制格式顯示變數。
a 按十六進位制格式顯示變數。
c 按字元格式顯示變數。
f 按浮點數格式顯示變數。
u:就是指以多少個位元組作為一個記憶體單元unit,預設為4。u還可以用被一些字元表示:
如b=1 byte, h=2 bytes,w=4 bytes,g=8 bytes.
addr:表示記憶體地址。
其他工具快捷鍵
快捷鍵 | 效果 |
---|---|
ROPgadget --binary 檔案 --only 'pop|ret' | grep 'eax' | 在正常終端下即可 |
ROPgadget --binary 檔案 --string '/bin/sh' | 找字串地址 |
ROPgadget --binary=動態連結庫 --only 'pop|ret' |grep '' | 在庫中找 |
cyclic(數字) | 生成垃圾資料 |
所求地址名 = elf.plt/(got)/(symbols)/(search位元組序列 (b"名字))["所求地址名"] | 在python3下先elf = ELF("")連線檔案 |
strings 檔名 | grep 字串 | |
objdump -d -M intel ./檔案 | grep 函式名 | 正常終端下找函式地址 |
fmtarg 地址 | 顯示此處是格式化字串函式的第幾個引數 |
./檔名 | 執行程式 |
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other | 共享資料夾 |
info(f"libc base value: {hex(libc_base)}") | 列印 |
print("stack"+hex(flg)) | 列印 |
seccomp-tools dump ./檔名 | 檢視函式禁用 |
gdb.attach(s,"b *0x函式地址\nc") | gdb直接定位在目標地址 |
shellcode編寫 | shellcode=shellcraft.open("./flag") shellcode+=shellcraft.read(3,0xcafe0000+0x100,0x50) shellcode+=shellcraft.write(1,0xcafe0000+0x100,0x50) shellcode=asm(shellcode) |