逆向
Linux调试
gdb
基本命令
- 运行:run -r
- 继续执行:continue -c
- 设置程序参数:set args xxx
- 单步步过:n/next
- 单步步入:s/step
- 以汇编指令为单位执行:ni/si
- 直接按回车可以重复上一条命令
- break *0x400100 #在0x400100地址上下断点
- break main # 在main函数入口下断点(在main函数内部)
- info/del break # 显示/删除断点
- break line-or-function if expr # 条件断点
- save breakpoint bp_info # 保存断点信息
- source bp_info # 载入断点信息
- gdb program -x bp_info # gdb启动时载入断点数据
查看变量
- print $rax 查看寄存器内容
查看内存数据
命令格式:x/nfu address
n:是一个正整数,表示显示内存的长度,也就是说从当前地指向后显示几个地址的内容
f:表示显示的格式
u:表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes
自动显示
display /i $rip # 执行一个命令后自动以“指令”的形式显示rip的值
查看寄存器的值
info registers
info all-registers
gdb-peda
帮助
peda help
查找函数的交叉引用
xrefs proc|data
检查程序的安全编译选项信息
checksec [file]
查看代码、栈、寄存器信息
context_code [linecount] 根据当前eip的值显示附近指定行数的指令数据
context_stack [linecount] 从当前esp开始显示linecount条栈中数据
context_register 等同于inforegister,但是更加详细
开始调试
start
显示进程的pid
getpid
显示各模块的地址和范围
vmmap
查看详细信息
xinfo address 显示内存中的信息
xinfo register [reg1 reg2] 显示寄存器中的信息
显示内存内容
telescope [address] [linecount] 默认从当前esp开始显示8行(可以智能对内存数据进行解析)
hexdump address [count]以类似于OD的方式显示内存数据
生成填充数据
-
pattern create size [file]
生成填充数据,可以保存到file文件
-
pattern offset value
判断溢出所需的大小,可以根据溢后的eip值或者[ebp+4]的值作为value
-
pattern search
判断哪些寄存器和内存地址出现了pattern数据
生成shellcode
shellcode generate
只能生成x86shellcode,详细内容:peda help shellcode
内存搜索
find [string]
目前在ctf中的逆向,遇到加壳的几乎都可以使用
upx -d [file]
解决。
© 著作权归作者所有
发表评论