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

相关推荐
军军君012 小时前
Three.js基础功能学习五:雾与渲染目标
开发语言·前端·javascript·学习·3d·前端框架·three
charlie1145141912 小时前
FreeRTOS:软件定时器(Software Timers)与时间管理
开发语言·笔记·学习·freertos·实时操作系统·工程
washingtin2 小时前
Get “https://registry-1.docker.io/v2/“: context deadline exceeded
java·开发语言
only-lucky2 小时前
Python版本OpenCV
开发语言·python·opencv
三万棵雪松3 小时前
【python-基础】
开发语言·python
一路往蓝-Anbo3 小时前
C语言从句柄到对象 (七) —— 给对象加把锁:RTOS 环境下的并发安全
java·c语言·开发语言·stm32·单片机·嵌入式硬件·算法
先做个垃圾出来………3 小时前
2610.转换二维数组
开发语言·python
天下皆白_唯我独黑3 小时前
php -S 启动项目访问路由报错处理
开发语言·php
清水迎朝阳3 小时前
Qt 小白成长系列 1-- 官方 文本搜索示例解析
开发语言·qt