工具使用总结

记录一下平时使用工具的知识点。

IDA实用快捷键

  • 空格:Graph overview 与 Text view 之间相关切换
  • tap:伪代码与汇编代码快速切换
  • alt+t:搜索字符串
  • shift+e:将数据以指令方式提取出来
  • ctrl+s:查看程序各个段的情况
  • u:取消定义;a:数据转化为字符串
  • p:数据转化为函数
  • y:改变数据类型
  • alt+d:改变数据类型
  • alt+a:改变字符串的样式
  • ?:计算表达式

GDB脚本的使用

  1. 执行gdb脚本有2中反方式,一:直接输入defien命令,输入指令,最后执行。二:单独写成一个脚本文件使用 source 来执行。

  2. 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进制格式显示出来。

  3. 脚本中的空格要求十分严格。

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

  1. 执行方法:使用shift+F2快捷键,输入语句后 run;或者直接(alt+F7)添加 script,然后执行。

  2. idc中的语法大多与C语言类似。这里总结一些特殊的。

    • message与C语言printf 用法相同。

    • idc中的变量都定义为:auto 变量名;字符串可以直接用 + 号连接(auto s = “ida” + “idc”;);支持切片操作。

    • 条件表达式中switch不支持。

    • idc中函数不需要指明类型,但必须都定义为静态(static main(){ })。

Python脚本

  • shift+f2:打开写脚本的窗口
  • alt+f7:载入执行一个脚本
-------------本文结束感谢您的阅读-------------