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) |