IDA实用快捷键
- 空格:Graph overview 与 Text view 之间相关切换
- tap:伪代码与汇编代码快速切换
- alt+t:搜索字符串
- shift+e:将数据以指令方式提取出来
- ctrl+s:查看程序各个段的情况
- u:取消定义;a:数据转化为字符串
- p:数据转化为函数
- y:改变数据类型
- alt+d:改变数据类型
- alt+a:改变字符串的样式
- ?:计算表达式
GDB脚本的使用
执行gdb脚本有2中反方式,一:直接输入defien命令,输入指令,最后执行。二:单独写成一个脚本文件使用 source 来执行。
gdb脚本中的 查看内存内容的方法:x/<n/f/u>
n、f、u是可选的参数。 n:显示的内存单元的个数,f:表示显示的格式,其中:s:字符串显示,x:按十六进制格式显示,d:按十进制格式显示变量
u:按十六进制格式显示无符号整型,t:按二进制格式显示, o:按八进制格式显示,c:按字符格式显示变量。
最后的u表示每个单元的大小,其中:b表示单字节,h表示双字节,w表示四字 节,g表示八字节。
如: x/127xb 表示将 127个的单字节单元的数据按16进制格式显示出来。
脚本中的空格要求十分严格。
GDB常用命令
layout+制定显示内容:用于对我们要显示的内容进行分一个窗口显示,达到一边执行一边显示,如 layout asm
r:开始运行;c:继续运行;si:单步步入;n:单步步过;
disassemble main:查看main函数;x/2wx$esp:以16进制查看$esp地址处2个单位的内容,每个单位4个字节(上面有总结)
i r:查看寄存器的值;
starti:可以先将程序打开,但是不运行。
info file:查看文件的信息,比如程序入口点
layout src:显示源代码,layout asm:显示汇编窗口
layout regs:显示源代码/汇编/寄存器窗口
ctrl+x+1:但窗口模式,ctrl+x+2:双窗口模式,ctrl+x+a:回到传统模式
d+编号:删除编号处的断点
finish:执行到当前函数返回
bt:打印栈帧关系
i b:查看断点信息
gdb调试时要使用shell可以直接输入shell,使用完shell要回到gdb可直接输入exit。
对开启了PIE且去掉符号表的程序下断
在linux的 /proc目录中,每个进程都会在此目录下新建一个进程id为名的文件夹,在该文件夹下的map_files,存储着进程加载的基地址与动态链接的地址信息。
所以利用以上找到程序的基地址后,再通过修改ida载入的基地址,gdb就与ida中看到的地址对应了,方便调试。
IDA中运行脚本(idc python)
idc是ida中内置的脚本语言,一种解释性语言
运行脚本 alt+F7;单行执行python ctrl+F3;查看最近脚本文件:alt+F9
执行方法:使用shift+F2快捷键,输入语句后 run;或者直接(alt+F7)添加 script,然后执行。
idc中的语法大多与C语言类似。这里总结一些特殊的。
message与C语言printf 用法相同。
idc中的变量都定义为:auto 变量名;字符串可以直接用 + 号连接(auto s = “ida” + “idc”;);支持切片操作。
条件表达式中switch不支持。
idc中函数不需要指明类型,但必须都定义为静态(static main(){ })。
Python脚本
- shift+f2:打开写脚本的窗口
- alt+f7:载入执行一个脚本