02 - pyrebox shell

Shell 环境基础

 

有两种不同的shell环境,一个是QEMU,另一个是pyrebox的shell。

 

启动虚拟机后,先启动的就是QEMU,然后键入sh进入shell环境。

shell环境中列出所有命令的命令是:

  • %list_commands
    • 列出所有pyrebox的命令,包括用户自定义在动态加载的脚本里的命令
  • %list_vol_commands
    • 列出所有volatility的命令
  • 所有命令都可以选择用%开头,也可以不用

 

脚本可以定义新的自定义命令,要运行自定义的命令需要键入%custom后面接着命令名字和该命令需要的参数

 

运行volatility的命令,需要键入%vol后面接着volatility的命令和参数;

pyrebox支持volatility插件扩展,只需要放到pyrebox目录中对应的volatility文件夹中

 

退出shell,可以键入quit、q、c、continue或直接ctrl-d

 

一些IPython特性

 

  • 按tab自动补全命令
  • ``CPU``对象:用sh启动一个新的shell时,CPU状态将作为一个名叫cpu的对象公开,这样可以检索cpu中每个寄存器的状态
  • pyrebox命令支持嵌入python代码:可以使用IPython的变量扩展功能(比如$和{ })来实现运行pyrebox命令时嵌入python代码,比如:bpr {hex(cpu.ESP - 0x10)}:0x20,将放置一个内存读取断点在当前的堆栈指针(ESP)周围内存中。{}符号之间的表达式将被解释为python代码
  • 列出可用对象。键入%who查看;除了cpu对象外,任何在IPython解释器中创建的变量将会被保留用于以后的会话
  • 获得关于命令或者API相关的帮助:键入help(command * | * api_function)或者command? | api_function?(问号后缀),就可以获取对象的文档;比如help(api)

 

QEMU环境下的命令

  • sh
  • import_module:导入一个pyrebox脚本或者模块
  • list_module
  • unload_module:卸载
  • reload_module:重新加载

 

shell环境下的命令

 

约定:

  1. 为了使用虚拟地址,直接使用十六进制地址,比如说0x7c871235;指定物理地址的方式:p0x00100000
  2. 涉及引用虚拟地址的命令需要处理进程上下文。使用proc命令可以将进程上下文设置成一个指定的正在运行的进程,可以通过进程全名(或部分名字)或PGD或者PID来指定进程

 

shell操作命令:

  • list_commands
  • list_vol_commands
  • vol comm:键入一个volatility命令
  • custom comm:键入一个自定义的命令
  • proc:给指定进程指定工作上下文,可以通过PID、CR3或者(部分)名字来指定。后续虚拟地址将引用该进程
  • mon:监控一个进程,许多事件只会被受监控的进程触发
  • unmon:停止监控进程
  • set_cpu:设置要操作的CPU编号(如果给QEMU配置了多个CPU的话)
  • quit、q、c、continue或直接ctrl-d:退出shell并且继续执行虚拟机
  • help(api | comm)或者api? | comm?:获得帮助文档

 

断点,当遇到断点的时候启动shell:

  • bd:禁用断点,breakpoint disable
  • bl:列出断点,breakpoint list
  • be:启用现有断点,enable existing breakpoint
  • bp:在一个地址处设置断点。该命令接受虚拟地址、物理地址和API名字,还接受一段内存范围(例如每当执行某些内存范围内的指令时中断)
  • bpr:在内存读取时设置断点,和bp类似,但是只在读取指定地址或者内存范围时触发
  • bpw:在内存写入时设置断点,和bp类似,但是只在写入指定地址或内存范围时触发

 

检查类指令:

  • ps:列出所有运行进程
  • lm:列出指定进程的模块,通过pid、名字或cr3指定进程。或者直接指定0、System或kernel来列出所有的内核模块

 

机器状态检查和操作:

  • print_cpu:展示CPU
  • dis:在PC中反汇编现在正在运行的进程
  • u:反汇编一个给定的地址
  • db,dw,dd,dq:在内存中展示byte、word、dword、qword数据
  • dump:显示内存中任意大小的数据
  • eb,ew,ed,eq:覆盖内存中byte、word、dword、qword数据,可以用HEX、ANSI字符串和Unicode字符串
  • write:覆盖内存中任意大小的数据,可以用HEX、ANSI字符串和Unicode字符串
  • r:展示或操控一个寄存器,看help里
  • ior[b | w | d]:读取io端口地址(byte、word、dword)
  • iow[b | w | d]:写入io端口地址(byte、word、dword)

 

标志:

  • ln:列出距离给定地址最近的symbols(API)
  • x:列出一个symbol(API)的地址。可以使用子串和通配符,格式为modulename!api,可以指定其中的一个或者都指定

 

其他:

  • strings:显示给定内存区域中的字符串
  • s:在给定的内存区域中搜索串(hex、ASCII或Unicode字符串)
  • savevm:保存虚拟机快照,需要指定快照的名字,名字要求是不带单引号的数字或字符串,比如:savevm 1或者savevm my_snapshot
  • loadvm:加载一个虚拟机快照,要求同上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值