x64dbg是一款专业的程序调试软件。程序调试工具中的佼佼者x64dbg。该工具主要在QT平台上编写,用于调试x64和X32应用程序。整个用户界面不清楚,功能模块分布整齐;它具有所有用户都将使用的内置功能。它为用户提供了一个DBG模块。该模块主要是为调节器而设置的,它可以在调试器中组织数据并为GUI提供所需的数据信息。内部GUI构建在子QT之上,可以为用户提供数据交互。该程序系统为用户提供可执行文件和源代码,可以随时为您提供服务。用户可以在使用此工具时编写脚本。它具有集成的,可调试的且类似于ASM的脚本语言。需要它的用户可以下载Experience
软件功能:
1.开源
2.直观,熟悉的新用户界面
3.类C表达式解析器
4.DLL和exe文件全功能调试(TitanEngine)
5.类似IDA的侧边栏和跳跃箭头
6.类似IDA的指令令牌突出显示(突出显示寄存器等)
7.内存映射
8.象征主义
9.线程视图
10.内容敏感的注册视图
11.完全可自定义的配色方案
12.动态识别模块和字符串
13.进口重建一体化(蓝蟹)
14.快速拆卸(BeaEngine)
15.用户数据库(JSON),用于注释,标签,书签等。
16.支持不断增长的API插件
17.可扩展和可调试的脚本语言自动化
18.多种数据类型的内存转储
19.基本调试符号(PDB)支持
20.动态堆栈视图
21.内置程序集(XEDParse)
22.查看补丁并将其保存到磁盘
23.内置十六进制编辑器
安装步骤:
1.用户可以单击本网站提供的下载路径下载相应的程序安装包
2.只需使用解压功能打开压缩包,双击主程序进行安装,弹出程序安装界面
3.只需单击与您的计算机系统相同的处理位,即可在32位和64位之间选择
软件特色:
1.搜索记忆模式
2.积极发展
3.x64_dbg正在持续积极的发展中
4.GPLv3
5.我们还提供可执行文件和源代码。随时贡献
6.定制
7.用C ++编写的插件,更改颜色并调整您的首选项
8.X64 / X32支持
9.x64_dbg可以调试x64和X32应用程序。只有一个界面
10.建立在开源库上
11.x64_dbg使用了Qt,TitanEngine,BeaEngine,蓝蟹,Yang Song,LZ4和XEDParse
12.操作简单,开发功能强大
13.x64_dbg使用C ++和Qt4快速添加新功能
14.脚本
15.x64_dbg具有集成的,可调试的,类似于ASM的脚本语言
16.社区意识
17.x64_dbg具有许多逆转社会思想或创造的功能
18.伸缩
19.编写插件以添加脚本命令或集成工具
使用说明:
表达式函数您可以在表达式中使用函数。调试器定义以下功能:
GUI交互式disasm.sel()/ dis.sel():在反汇编视图中获取选定的地址。
Dump.sel():在转储视图中获取选定的地址。
Stack.sel():在堆栈视图中获取选定的地址
源src.disp(addr):获取addr相对于最后一个源行的位移。
Src.line(addr):获得的源行号addr。
Module mod.party(addr):获取模块的聚会地址。 0是用户模块,1是系统模块。
Mod.base(addr):获取模块的基址addr。
Mo.size(addr):获取模块的大小地址。
Mod.hash(addr):获取模块的哈希值addr。
Mo.entry(addr):获取模块的入口地址addr。
Mod.system(addr):如果at的模块addr是系统模块,则为true。没有模块是用户模块。
Md.user(addr):如果at的模块addr是用户模块,则为true。没有模块是用户模块。
Mod.main():返回主模块的基础知识(调试)。如果这是一个DLL,它将在加载之前返回0。
Mod.rva(addr):获得的RVA地址。如果addr不在模块内部,它将返回0。
Mod.offset(addr):获取的文件偏移量addr。如果addr不在模块内部,它将返回0。
Mod.isexport(addr):如果addr是从模块导出的函数,则为true。
处理信息peb():获取PEB的地址。
Teb():获取TEB地址。
Tid():获取当前线程ID。
常规bswap(值):字节交换值。
三元(condition,val1,val2):如果condition不为零,则返回val1,否则返回val2。
GtTickCount():x64dbg的刻度计数。
memory mem.valid(addr):如果addr是有效的内存地址,则为True。
Mm.base(addr):返回的内存页面的基本addr(可以根据您的内存映射模式进行更改)。
Mem.size(addr):返回的内存页面大小addr(可以根据您的内存映射模式进行更改)。
Mem.iscode(addr):如果addr页是可执行的,则为true。
Mm.decodepointer(ptr):等效于在DecodePointer上调用API ptr,仅在Vista +上有效。
反汇编dis.len(addr):获取指令的长度addr。
Dis.iscond(addr):如果at处的指令addr是条件分支,则为true。
Dis.isbranch(addr):如果at处的指令addr是分支(jcc / call),则为true。
Dis.isret(addr):如果at的指令是,则addr为true ret。
Dis.iscall(addr):如果at的指令是,则addr为true调用。
Dis.ismem(addr):如果指令addr具有存储操作数,则为true。
Dis.isnop(addr):如果at的指令addr等效于NOP,则为true。
Dis.isunusual(addr):如果at的命令addr异常,则为true。
Dis.branchdest(addr):指令的跳转目标位于addr(如果在其上按Enter,将显示以下内容)。
Dis.branchexec(addr):如果addr要执行分支,则为true。
Dis.imm(addr):指令的立即值addr。
Dis.brtrue(addr):指令的分支目标是addr。
Dis.brfalse(addr):如果下一条指令addr是条件分支,则下一条指令的地址。
Dis.next(addr):addr的下一条指令的地址。
Dis.prev(addr):上一条指令的地址addr。
Dis.iscallsystem(addr):如果at命令addr进入系统模块,则为true。
跟踪记录tr.enabled(addr):如果启用了跟踪记录,则它是真实的addr。
Tr.hitcount(addr):记录在跟踪地址中的命中数。
Tr.runtraceenabled():如果启用了运行跟踪,则为True。
字节/字/双字/四字/ PTR ReadByte,Byte,byte(addr):从中读取字节addr并返回值。
ReadWord,Word,word(addr):从其中读取一个单词(2个字节)addr并返回值。
ReadDword,Dword,dword(addr):从中读取一个双字(4字节)addr并返回值。
ReadQword,Qword,qword(addr):从其中读取一个qword(8个字节)addr并返回值(仅在x64上可用)。
ReadPtr,ReadPointer,ptr,Pointer,pointer(addr):从中读取指针(4/8字节)addr并返回值。
func.start()函数:函数addr的开头是一部分,否则为零。
Func.end():函数addr的结尾是其中的一部分,否则为零。
参考ref.count():当前参考视图中的条目数。
Ref.addr(index):在此处获取参考地址索引。零故障。
参假定返回地址在堆栈上(例如,您在函数内部)。
Argget(index):从索引获取参数(从零开始)。
Ag.set(index,value):将index(从零开始)的参数设置为value。
异常这是一组函数,用于获取有关最后一个异常的信息。它们可用于异常断点以构建更高级的条件。
Ex.firstchance():最后一个异常是否是第一次机会异常。
Ex.addr():最后一个异常地址。
Ex.code():最后一个异常代码。
Ex.flags():最后一个异常标志。
Ex.infocount():最后一次异常信息计数(参数数量)。
Ex.ifo(index):最后一个异常信息,如果索引超出范围,则为零。
变量该程序支持变量。变量分为三种:
USER:用户使用var命令创建的变量。这些变量没有访问限制。
SYSTEM:可以读写系统创建的变量,但不能删除。
READONLY:可以读取系统创建的变量,但不能写入或删除。
保留变量有一些保留变量:
$ res / $ result:一般结果变量。
$ resN / $ resultN:其他可选结果变量(N = 1-4)。
$ pid:调试后的可执行文件的进程ID。
$ hp / $ hProcess:用于调试的可执行句柄。
$ lastalloc:alloc命令的最终结果。
$ breakpointcondition:控制条件断点命令中的暂停行为。
$ breakpointcounter:在评估条件断点的条件之前设置断点的命中计数器。
$ breakpointlogcondition:条件断点的日志条件。它不能用于控制日志记录行为。
条件断点
操作概述遇到断点时,x64dbg将执行以下操作:
如果断点是异常断点,则将系统变量$ breakpointexceptionaddress设置为异常地址;否则,将系统变量$ breakpointexceptionaddress设置为异常地址。否则,将系统变量设置为异常地址。
增加命中计数器;
将系统变量$ breakpointcounter设置为值o
f点击柜台;
如果设置了中断条件,则对表达式求值(默认为1);否则为0。
如果设置了快速恢复,并且中断条件的值为0:
恢复调试对象的执行(跳过后续步骤)。这也将跳过插件回调和GUI更新的执行。
如果设置了日志条件,则对表达式求值(默认为1);否则为0。
如果设置了命令条件,则对表达式求值(默认为中断条件);
如果中断条件的值为1(或除“ 0”以外的任何值):
打印标准日志消息; (如果将断点设置为静默,则禁止使用标准日志消息。)
执行插件回调。
如果设置了日志文本,并且日志条件评估为1(或“ 0”以外的任何值):
格式化并打印日志文本(请参阅字符串格式)。
如果设置了命令文本,并且命令条件评估为1:
设置系统变量$ breakpointcondition
设置为中断条件;
将系统变量$ breakpointlogcondition设置为log condition;
在命令文本中执行命令;
断点条件将设置值$ breakpointcondition。因此,如果您在脚本中修改此系统变量,则可以控制调试对象是否将中断。
如果中断条件的值为1(或除“ 0”以外的任何值):
中断调试目标并等待用户恢复。
点击计数器点击计数器记录达到断点的次数。即使在此断点上启用了快速恢复,它也会无条件地增加。可以在断点视图中查看它,并使用ResetBreakpointHitCount对其进行重置。
record可以使用x64dbg格式的日志来记录程序的当前状态。有关如何格式化日志字符串,请参阅格式化。
注意可以使用GUI来设置条件断点,方法是先设置软件断点(键F2),然后右键单击指令,然后从上下文菜单中选择“编辑断点”命令。根据需要填写条件表达式和/或其他信息,然后确认并关闭对话框
例如,您不应在breakpoint命令中运行可更改调试对象的运行状态的命令,因为在此处使用这些命令时,它们是不稳定的。您可以改用中断条件,命令条件或$ breakpointcondition。
如果您不知道条件将在哪里变为真,请尝试使用条件跟踪!
条件断点示例,永不中断
损坏条件:0
仅在EAX和ECX都等于1时才中断的条件断点。
损坏条件:EAX == 1 && ECX == 1
仅当EAX是有效地址时才会中断的条件断点
损坏条件:mem.valid(EAX)
条件断点,在第三次命中时被中断
中断条件:$ breakpointcounter == 3或($ breakpointcounter%3)== 0
一个条件断点,只有在执行线程1C0时才会被中断
条件跟踪
操作概述执行跟踪步骤时,x64dbg将执行以下操作:
增加跟踪计数器;
将系统变量$ tracecounter设置为跟踪计数器的值;
如设置了中断条件,则对表达式求值(默认为0);否则为0。
执行插件回调(允许插件更改中断条件);
如果设置了日志条件,则对表达式求值(默认为1);否则为0。
如设置了命令条件,则对表达式求值(默认为中断条件);
如果设置了开关条件,则对表达式求值(默认为0)
如果设置了日志文本,并且日志条件评估为1:
格式化并打印日志文本(请参阅字符串格式)。要将日志重定向到文件,请使用TraceSetLogFile。
如果设置了命令文本,并且命令条件评估为1:
将系统变量$ tracecondition设置为中断条件;
将统变量$ tracelogcondition设置为log condition;
将系统变量$ traceswitchcondition设置为切换条件;
在命令文本中执行命令;
断条件将设置值$ tracecondition。因此,如果您在脚本中修改此系统变量,则可以控制调试对象是否将中断。
的开关状态将设置为$ traceswitchcondition的值。因此,如果您在脚本中修改此系统变量,则可以控制是否切换步骤类型。
如果中断条件的值为1:
打印标准日志消息;
中断调试目标并等待用户恢复。
如果将切换条件评估为1:
切换(反向)步进类型。如果您想跟踪,它将切换到输出(反之亦然)。例如,这允许您不跟踪有条件的系统模块调用或不跟踪某些调用。 mod.party(dis.branchdest(cip))== 1
record可以使用x64dbg格式的日志来记录程序的当前状态。有关如何格式化日志字符串,请参阅格式化。如果要查找记录的地址和所有已跟踪指令的反汇编,则可以使用它。要将日志重定向到文件,请使用TraceSetLogFile。 {p:cip} {i:cip}
跟踪记录如果使用了基于跟踪记录的跟踪选项之一,则对中断条件的初始评估包括您指定的跟踪记录跟踪的类型。正常中断条件可用于在满足跟踪记录条件之前进行中断。如果要在条件中包括跟踪记录以进行完全控制,则可以使用表达式函数。
注意您可以通过“调试”菜单中的“直到条件跟踪” /“直到条件跟踪条目”命令开始条件跟踪。
您不应在breakpoint命令中运行可更改调试对象的运行状态的命令
(例如),因为在此处使用这些命令时不稳定。 您可以改用中断条件,命令条件或$ tracecondition。