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的常用命令使用方法,更多命令看官方手册。

相关推荐
星火开发设计1 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
TTGGGFF1 小时前
控制系统建模仿真(一):掌握控制系统设计的 MAD 流程与 MATLAB 基础运算
开发语言·matlab
2501_944424121 小时前
Flutter for OpenHarmony游戏集合App实战之贪吃蛇食物生成
android·开发语言·flutter·游戏·harmonyos
Lhuu(重开版2 小时前
JS:正则表达式和作用域
开发语言·javascript·正则表达式
仙俊红3 小时前
Java Map 家族核心解析
java·开发语言
浅念-3 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
code_li4 小时前
聊聊支付宝架构
java·开发语言·架构
少控科技4 小时前
QT高阶日记01
开发语言·qt
无限进步_5 小时前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
“抚琴”的人5 小时前
C#上位机工厂模式
开发语言·c#