x64dbg 脚本常用命令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

x64dbg 有script和命令可以使用,辅助调试软件,下面介绍下常用命令和使用方法


提示:以下是本篇文章正文内容,下面案例可供参考

一、x64dbg命令是什么?

x64dbg命令类似 汇编语言混合些c函数,主要是汇编,循环和判断需要自己用汇编实现。

官方python插件只有python2的比较老旧,官方推荐第三方的python3插件的star比较少,担心不稳定,所以暂时没有用。

找插件和命令等手册可以直接在软件帮助中点击会跳到对应的网站。

二、使用步骤

1.变量定义

https://help.x64dbg.com/en/latest/introduction/Variables.html

应该是外部程序的变量

can only store one DWORD (QWORD on x64)

c 复制代码
mov myvar, 1234
mov $myvar, 1234
myvar = 1234
$myvar = 1234

myvar += 0x10
myvar |= 0x10
myvar++
myvar--

2.log打印

https://help.x64dbg.com/en/latest/introduction/Formatting.html

打印rip寄存器

c 复制代码
log "myvar = {rip}"

log "myvar = {dis.iscall(rip)}"

打印到 日志窗口中

3.申请内存

https://help.x64dbg.com/en/latest/commands/memory-operations/alloc.html

alloc size addr 返回值在 result默认变量 默认size 0x1000 默认地址随机

c 复制代码
alloc 64 0; myvar3 = result; log {myvar3};

//操作地址
mov [myvar3], 12
log {[myvar3]}
log {[myvar3+1]}
log {[myvar3 + var4]}

Fill/memset
memcpy

free addr 释放内存

4.单步执行命令

代码如下(示例):

c 复制代码
run  执行
run addr  类似f4执行到某一行断点
erun 传递第一个异常给程序

单步执行:
StepOver/step/sto/st  命令 步过  sto 3 单步执行3次,默认无参1次
esto   传递第一个异常给程序
sesto

5.打断点

c 复制代码
"ss" (single shot breakpoint), "long" (CD03), "ud2" (0F0B) and "short" (CC)
SetBPX/bp/bpx    参数addr name type
Example: "SetBPX 00401000,"entrypoint",ssud2"

硬件断点
SetHardwareBreakpoint/bph/bphws	参数:addr type size


内存断点:
SetMemoryBPX/membp/bpm

6.可用函数

https://help.x64dbg.com/en/latest/introduction/Expression-functions.html

c 复制代码
Strings:
utf8(addr[, count]) utf16(addr[, count]) strstr(str1, str2) strlen(str) streq(str1, str2)

Modules
获取模块基地址 mod.base(addr)
	mod.size(addr)	mod.entry(addr)	mod.rva(addr)	mod.offset(addr)	mod.fromname("ntdll.dll")

Process Information
peb()	teb()	tid()	

memory
mem.valid(addr)	mem.base(addr)	mem.size(addr)

Disassembly 获取汇编指令信息
dis.len(addr)

dis.isret(addr)	指令是否是ret
dis.iscall(addr)	指令是否是call
dis.isnop(addr)
dis.ismem(addr)

dis.next(addr)
dis.prev(addr)

Byte/Word/Dword/Qword/Ptr
byte(addr)
word(addr)
dword(addr)
qword(addr)
ptr(addr)

7.流程控制

c 复制代码
i = 0
loop:
  addr = ref.addr(i)
  log "reference {d:i} = {p:addr}"
  i++
  cmp i, ref.count()
  jne loop

自己可以写脚本运行,空格运行,tab单步

指令执行是否影响调试程序:

bash 复制代码
test 指令
$_EZ_FLAG is set to 1 when arg1 & arg2 == 0. $_BS_FLAG is always set to 0.
好像不影响调试程序的标志,用的是内部的flag

cmp 指令:
the comparison arg1>arg2 is made. If this evaluates to true, the $_BS_FLAG is set to 1, meaning the value is bigger. 
This command sets the internal variables $_EZ_FLAG and $_BS_FLAG. 
好像不影响调试程序的标志,用的是内部的flag

push val
入栈 直接操作调试进程的栈
pop val 出栈

有点不方便,感觉还是等用python3搞下,后面试下python3的插件。

总结

上面介绍了x64dbg的常用命令使用方法,更多命令看官方手册。

相关推荐
葡萄成熟时 !6 分钟前
泛型知识笔记
开发语言·笔记·python
新时代牛马28 分钟前
SPL-TPL 链式启动:spl.c 与CONFIG_TPL 三阶段加载
c语言·开发语言
布莱克60532 分钟前
链表详解:定义、作用、应用场景及与数组的区别(C/C++ 实战)
c语言·开发语言·c++·链表
2601_9669496540 分钟前
实时行情中的成交量 Volume 到底是什么?包含盘中撤单量吗?从交易数据语义到 QuantDash 实战解析
开发语言·人工智能·python·量化·quantdash·量化数据源
开开心心就好1 小时前
电子教鞭工具支持画框写字插图片功能齐全
android·开发语言·前端·javascript·人工智能·pdf·html
zx_741484811 小时前
【Python入门】爬虫实战:Requests + XPath 从基础到实战
开发语言·爬虫·python
吴声子夜歌2 小时前
Java——开发中通用的方法和准则(二)
java·开发语言·php
江屿风2 小时前
C++OJ题经验总结(竞赛)5
开发语言·c++
溪语流沙2 小时前
【Python项目实战】虚拟环境与依赖管理:venv / pip / requirements.txt实操
开发语言·python·pip
神威难绷泪2 小时前
Linux应用软件编程:线程分离属性 互斥机制 同步机制 死锁
linux·开发语言·算法·线程