提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
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的常用命令使用方法,更多命令看官方手册。