x64dbg 2021是一款非常专业的程序逆向反汇编修改神器,内置强大且开源的win64、32位动态调试器,可以帮助大家实现对C表达式进行解析器,DLL文件和EXE文件调试,程序还内置IDA式的跳跃箭头与侧边栏、动态识别模块指令,还支持反汇编、自动化可调试的脚本语言等等极为专业化逆向分析功能。尤其是比起其他反编译程序,本软件界面实现百分百汉化,还在官方中文版的基础上对汉化错误及不一致处进行了全面的优化和修复,并与软件的帮助文档里面关键词进行了统一;同时还支持各类插件配合使用!不仅如此,x64dbg 2021还对GUI进行了优化,使其作为调试器的图形部分采用了Qt编程语言,用户交互界面可以说极为简洁。而Bridge作为DBG和GUI部分的通信库,现在已经无需更新汇编代码的其它部分也不会影响使用。
1、在本作下载好数据包后进行解压在“x64dbg”文件夹中运行“初始设置.bat”,输入“1”创建桌面快捷方式
2、任何回到你的电脑桌面运行软件快捷方式即可进入软件,开始免费使用
2、对Scylla插件等进行了全面汉化。
3、对帮助文档的主要内容进行了汉化,并按照最新版进行了修订、翻译。对界面字体以及布局重新进行了设置。将默认调用在线英文帮助更改为调用本地的中文帮助文件。
4、对软件官方中文版的汉化错误及不一致处进行了修订,并与帮助文档的关键词进行了统一。
5、对中文版界面字体进行了重新设置,使其更为美观。
6、集成中文字符串搜索插件、反反调试插件SharpOD_x64_v0.6b,除此之外无其它修改!
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、内置的十六进制编辑器
24、查找内存模式
软件正在不断的积极发展。
2、GPLv3
我们同时提供了可执行文件和源代码。随意作出贡献。
3、自定义
C ++编写的插件,改变颜色和调整你的喜好。
5、X64/X32支持
可以调试x64和X32的应用程序。只有一个接口。
6、建立在开源库
使用的Qt,TitanEngine,BeaEngine,青蟹,杨松,LZ4和XEDParse。
7、操作简单,功能强大的开发
使用C ++和Qt4的快速添加新的功能。
8、脚本化
拥有一个集成的,可调试,ASM-like脚本语言。
9、社区意识
有许多功能的倒车社会思想或创建的。
10、伸缩
编写插件来添加脚本命令或集成的工具。
1、命令
命令具有以下格式:命令 arg1 , arg2 , argN
2、变量
变量可选地以a开头,$并且只能存储一个DWORD。
3、注册
所有寄存器(所有大小)都可以用作变量。
备注:大多数寄存器的变量名称与它们的名称相同,但以下寄存器除外:x87控制字标志:该寄存器的标志名称如下:_x87CW_UM,除了在体系结构中的寄存器,x64dbg提供以下寄存器:CAX,CBX,CCX,CDX,CSP,CBP,CSI,CDI,CIP。这些寄存器映射到32位平台上的32位寄存器,以及64位平台上的64位寄存器。例如,CIP是EIP在32位平台上,并且是RIP在64位平台上。此功能旨在支持与体系结构无关的代码。
4、记忆位置
您可以使用以下表达式之一从/向内存位置读取/写入:
从中读取DWORD / QWORD addr。
n:从中读取n个字节addr。
seg:从一个段读取一个DWORD / QWORD addr。
byte:从中读取BYTE addr。
word:读一个WORD addr。
dword:从中读取一个DWORD addr。
qword:从addr(仅限x64)读取QWORD 。
备注:n 是要读取的字节数,在x32上可以是小于4且在指定时在x64上小于8,否则会出错。seg可以gs,es,cs,fs,ds,ss。只有fs并gs产生影响。
5、标志
调试标志(解释为整数)可用作输入。标志以a为前缀,_后跟标志名称。有效的标志是:_cf,_pf,_af,_zf,_sf,_tf,_if,_df,_of,_rf,_vm,_ac,_vif,_vip和_id。
6、数字
所有数字默认都被解释为十六进制!如果你想确定,你可以x或0x作为前缀。十进制数可以使用前缀来点数量:.123=7B。
7、表达式
有关更多信息,请参阅表达式部分。
8、标签/符号
用户定义的标签和符号是有效的表达式(它们解析为所述标签/符号的地址)。
9、模块数据
(1)DLL导出:键入GetProcAddress并自动将其解析为函数的实际地址。要明确定义从哪个模块加载API,请使用:.dll:或:。以类似的方式你可以解决序数,尝试:。另一个宏许您获取模块的加载基础。例如,当为空字符串时:GetProcAddress,将使用当前在CPU中选择的模块。
()2加载模块库:如果您要访问加载模块的基础上,你可以写::0,:base,:imagebase或:header。
10、RVA /文件偏移
如果您想访问模块RVA,您可以编写:0+,也可以编写:$。如果要将文件偏移量转换为VA,则可以使用:#。例如,当为空字符串时:0,将使用当前在CPU中选择的模块。
11、模块入口点
要访问一个模块的入口点,你可以写:entry,:oep或:ep。请注意,当存在带有名称的导出时entry,oep或者ep将返回这些名称的地址。
备注:您也可以使用a来代替分隔符,.如果您需要查询模块信息,:imagebase或者:entry建议您使用?as分隔符:?entry。在?没有分隔符后检查命名的出口,所以当有一个叫做出口将仍然工作entry的模块中。
12、最后的话
除非另有说明,否则参数输入始终可以使用上述任何形式。
二、表达式
调试器允许使用基本表达式。只需在命令窗口中键入表达式,结果将显示在控制台中。除了计算之外,它还允许使用类似C语法的快速变量更改。
1、输入
基本输入(数字/变量)可用作表达式中的常量,有关详细信息,请参阅输入。
2、运营商
您可以在表达式中使用以下运算符。它们按以下顺序处理:
括号/括号:(1+2),优先于其它操作。
unary minus / binary not / logical not :( -1negative 1),~1(binary not of 1),!0(logical not of 0)。
乘法/除法 :( 2*3常规乘法),2`3(得到乘法的高部分),6/3(常规除法),5%3(除法的模数/余数)。
加/减 :( 1+3加法),5-2(减法)。
左/右移/旋转 :( 1<<2 shl="" sal="" 10="">>1(右移,shl表示无符号,sal表示签名),1<<<2 1="">>>2(向右旋转)。
小(相等)/大(等于):4<10 3="">6,1<=2,6>=7(如果真解析为1,0,如果假)。
等于/不等于:1==1,2!=6(如果为真,则解析为1,如果为假,则解析为0)。
二进制和 :( 12&2常规二进制和)。
二进制xor :( 2^1常规二进制xor)。
二进制或 :( 2|8常规二进制或)。
logical和 :( 0&&3如果为true则解析为1,如果为false则解析为0)。
logical或 :( 0||3如果为true则解析为1,如果为false则解析为0)。
逻辑含义 :( 0->1如果为真则解析为1,如果为假则解析为0)。
3、快速分配
使用类似C的语法可以轻松完成更改内存,变量,寄存器或标志:
a?=b哪里?可以是任何非逻辑运算符。a可以是任何寄存器,标志,变量或内存位置。b可以是任何被认可为表达的东西。
a++/a--哪里a可以是任何寄存器,标志,变量或内存位置。
三、表达函数
您可以在表达式中使用函数。调试器定义了以下函数:
1、GUI交互
disasm.sel()/ dis.sel():在反汇编视图中获取所选地址。
dump.sel() :在转储视图中获取所选地址。
stack.sel() :在堆栈视图中获取所选地址。
2、来源
src.disp(addr):获取addr相对于最后一个源代码行的位移。
src.line(addr):获取源代码行数addr。
3、模块
mod.party(addr):参加模块派对addr。0是用户模块,1是系统模块。
mod.base(addr):获取模块的基址addr。
mod.size(addr):获取模块的大小addr。
mod.hash(addr):获取模块的哈希值addr。
mod.entry(addr):获取模块的入口地址addr。
mod.system(addr):如果模块位于addr系统模块,则为True 。没有模块是用户模块。
mod.user(addr):如果模块位于addr用户模块,则为True 。没有模块是用户模块。
mod.main():返回主模块(debuggee)的基础。如果这是一个DLL,它将返回,0直到加载。
mod.rva(addr):获得RVA addr。如果addr不在模块内,它将返回0。
mod.offset(addr):获取文件偏移量addr。如果addr不在模块内,它将返回0。
4、处理信息
peb() :获取PEB地址。
teb() :获取TEB地址。
tid() :获取当前的线程ID。
5、一般目的
bswap(value):字节交换value。
ternary(condition, val1, val2):如果条件非零,则返回val1,否则返回val2。
GetTickCount() :tick计数x64dbg。
6、记忆
mem.valid(addr):如果addr是有效的内存地址,则为True 。
mem.base(addr):返回内存页面的基数addr(可以根据您的内存映射模式更改)。
mem.size(addr):返回内存页面的大小addr(可以根据内存映射模式而改变)。
mem.iscode(addr):如果addr是可执行的页面,则为True 。
mem.decodepointer(ptr):相当于调用DecodePointerAPI ptr,仅适用于Vista +。
7、反汇编
dis.len(addr):获取指令的长度addr。
dis.iscond(addr):如果指令at addr是条件分支,则为True 。
dis.isbranch(addr):如果指令at addr是分支(jcc / call),则为True 。
dis.isret(addr):如果指令addr是a ,则为真ret。
dis.iscall(addr):如果指令addr是a ,则为真call。
dis.ismem(addr):如果指令at addr有内存操作数,则为True 。
dis.isnop(addr):如果指令at addr等于NOP ,则为真。
dis.isunusual(addr):如果指令处于addr异常状态,则为真。
dis.branchdest(addr):指令的分支目的地addr(如果按Enter键,它会跟随什么)。
dis.branchexec(addr):如果分支处于addr执行状态,则为True 。
dis.imm(addr):指令的立即值addr。
dis.brtrue(addr):指令的分支目的地addr。
dis.brfalse(addr):如果指令at addr是条件分支,则为下一条指令的地址。
dis.next(addr):来自的下一条指令的地址addr。
dis.prev(addr):上一条指令的地址addr。
8、跟踪记录
tr.enabled(addr):如果启用了跟踪记录,则为True addr。
tr.hitcount(addr):跟踪记录上的命中数addr。
tr.runtraceenabled() :如果启用了运行跟踪,则为True。
9、字节/字/双字/四字/ 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并返回值。
10、功能
func.start():函数的开始addr是零的一部分,否则为零。
func.end():函数结束addr是其中一部分,否则为零。
11、参考资料
ref.count() :当前参考视图中的条目数。
ref.addr(index):获取参考地址index。失败归零。
12、参数
这假设返回地址在堆栈上(例如,您在函数内)。
arg.get(index):获取index(从零开始)的参数。
arg.set(index, value):将参数设置为index(从零开始)为value。
13、插件
插件可以注册自己的表达式函数。
安装破解教程
(软件为绿色版本,无需安装破解)1、在本作下载好数据包后进行解压在“x64dbg”文件夹中运行“初始设置.bat”,输入“1”创建桌面快捷方式
2、任何回到你的电脑桌面运行软件快捷方式即可进入软件,开始免费使用
此版说明
1、为帮助用户更好地了解软件反汇编后的CPU汇编指令信息,对汇编指令的“助记符摘要”全部进行了汉化。由于本次更新幅度较大,更改的内容较多,所以对“助记符帮助”进行了部分汉化。汇编指令的汉化参考了“清华大学出版社”出版的《汇编语言程序设计教程》(第4版) 中术语,因此可能与其他软件的汉化术语略有不同。2、对Scylla插件等进行了全面汉化。
3、对帮助文档的主要内容进行了汉化,并按照最新版进行了修订、翻译。对界面字体以及布局重新进行了设置。将默认调用在线英文帮助更改为调用本地的中文帮助文件。
4、对软件官方中文版的汉化错误及不一致处进行了修订,并与帮助文档的关键词进行了统一。
5、对中文版界面字体进行了重新设置,使其更为美观。
6、集成中文字符串搜索插件、反反调试插件SharpOD_x64_v0.6b,除此之外无其它修改!
功能介绍
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、内置的十六进制编辑器
24、查找内存模式
功能亮点
1、积极发展软件正在不断的积极发展。
2、GPLv3
我们同时提供了可执行文件和源代码。随意作出贡献。
3、自定义
C ++编写的插件,改变颜色和调整你的喜好。
5、X64/X32支持
可以调试x64和X32的应用程序。只有一个接口。
6、建立在开源库
使用的Qt,TitanEngine,BeaEngine,青蟹,杨松,LZ4和XEDParse。
7、操作简单,功能强大的开发
使用C ++和Qt4的快速添加新的功能。
8、脚本化
拥有一个集成的,可调试,ASM-like脚本语言。
9、社区意识
有许多功能的倒车社会思想或创建的。
10、伸缩
编写插件来添加脚本命令或集成的工具。
使用帮助
一、输入1、命令
命令具有以下格式:命令 arg1 , arg2 , argN
2、变量
变量可选地以a开头,$并且只能存储一个DWORD。
3、注册
所有寄存器(所有大小)都可以用作变量。
备注:大多数寄存器的变量名称与它们的名称相同,但以下寄存器除外:x87控制字标志:该寄存器的标志名称如下:_x87CW_UM,除了在体系结构中的寄存器,x64dbg提供以下寄存器:CAX,CBX,CCX,CDX,CSP,CBP,CSI,CDI,CIP。这些寄存器映射到32位平台上的32位寄存器,以及64位平台上的64位寄存器。例如,CIP是EIP在32位平台上,并且是RIP在64位平台上。此功能旨在支持与体系结构无关的代码。
4、记忆位置
您可以使用以下表达式之一从/向内存位置读取/写入:
从中读取DWORD / QWORD addr。
n:从中读取n个字节addr。
seg:从一个段读取一个DWORD / QWORD addr。
byte:从中读取BYTE addr。
word:读一个WORD addr。
dword:从中读取一个DWORD addr。
qword:从addr(仅限x64)读取QWORD 。
备注:n 是要读取的字节数,在x32上可以是小于4且在指定时在x64上小于8,否则会出错。seg可以gs,es,cs,fs,ds,ss。只有fs并gs产生影响。
5、标志
调试标志(解释为整数)可用作输入。标志以a为前缀,_后跟标志名称。有效的标志是:_cf,_pf,_af,_zf,_sf,_tf,_if,_df,_of,_rf,_vm,_ac,_vif,_vip和_id。
6、数字
所有数字默认都被解释为十六进制!如果你想确定,你可以x或0x作为前缀。十进制数可以使用前缀来点数量:.123=7B。
7、表达式
有关更多信息,请参阅表达式部分。
8、标签/符号
用户定义的标签和符号是有效的表达式(它们解析为所述标签/符号的地址)。
9、模块数据
(1)DLL导出:键入GetProcAddress并自动将其解析为函数的实际地址。要明确定义从哪个模块加载API,请使用:.dll:或:。以类似的方式你可以解决序数,尝试:。另一个宏许您获取模块的加载基础。例如,当为空字符串时:GetProcAddress,将使用当前在CPU中选择的模块。
()2加载模块库:如果您要访问加载模块的基础上,你可以写::0,:base,:imagebase或:header。
10、RVA /文件偏移
如果您想访问模块RVA,您可以编写:0+,也可以编写:$。如果要将文件偏移量转换为VA,则可以使用:#。例如,当为空字符串时:0,将使用当前在CPU中选择的模块。
11、模块入口点
要访问一个模块的入口点,你可以写:entry,:oep或:ep。请注意,当存在带有名称的导出时entry,oep或者ep将返回这些名称的地址。
备注:您也可以使用a来代替分隔符,.如果您需要查询模块信息,:imagebase或者:entry建议您使用?as分隔符:?entry。在?没有分隔符后检查命名的出口,所以当有一个叫做出口将仍然工作entry的模块中。
12、最后的话
除非另有说明,否则参数输入始终可以使用上述任何形式。
二、表达式
调试器允许使用基本表达式。只需在命令窗口中键入表达式,结果将显示在控制台中。除了计算之外,它还允许使用类似C语法的快速变量更改。
1、输入
基本输入(数字/变量)可用作表达式中的常量,有关详细信息,请参阅输入。
2、运营商
您可以在表达式中使用以下运算符。它们按以下顺序处理:
括号/括号:(1+2),优先于其它操作。
unary minus / binary not / logical not :( -1negative 1),~1(binary not of 1),!0(logical not of 0)。
乘法/除法 :( 2*3常规乘法),2`3(得到乘法的高部分),6/3(常规除法),5%3(除法的模数/余数)。
加/减 :( 1+3加法),5-2(减法)。
左/右移/旋转 :( 1<<2 shl="" sal="" 10="">>1(右移,shl表示无符号,sal表示签名),1<<<2 1="">>>2(向右旋转)。
小(相等)/大(等于):4<10 3="">6,1<=2,6>=7(如果真解析为1,0,如果假)。
等于/不等于:1==1,2!=6(如果为真,则解析为1,如果为假,则解析为0)。
二进制和 :( 12&2常规二进制和)。
二进制xor :( 2^1常规二进制xor)。
二进制或 :( 2|8常规二进制或)。
logical和 :( 0&&3如果为true则解析为1,如果为false则解析为0)。
logical或 :( 0||3如果为true则解析为1,如果为false则解析为0)。
逻辑含义 :( 0->1如果为真则解析为1,如果为假则解析为0)。
3、快速分配
使用类似C的语法可以轻松完成更改内存,变量,寄存器或标志:
a?=b哪里?可以是任何非逻辑运算符。a可以是任何寄存器,标志,变量或内存位置。b可以是任何被认可为表达的东西。
a++/a--哪里a可以是任何寄存器,标志,变量或内存位置。
三、表达函数
您可以在表达式中使用函数。调试器定义了以下函数:
1、GUI交互
disasm.sel()/ dis.sel():在反汇编视图中获取所选地址。
dump.sel() :在转储视图中获取所选地址。
stack.sel() :在堆栈视图中获取所选地址。
2、来源
src.disp(addr):获取addr相对于最后一个源代码行的位移。
src.line(addr):获取源代码行数addr。
3、模块
mod.party(addr):参加模块派对addr。0是用户模块,1是系统模块。
mod.base(addr):获取模块的基址addr。
mod.size(addr):获取模块的大小addr。
mod.hash(addr):获取模块的哈希值addr。
mod.entry(addr):获取模块的入口地址addr。
mod.system(addr):如果模块位于addr系统模块,则为True 。没有模块是用户模块。
mod.user(addr):如果模块位于addr用户模块,则为True 。没有模块是用户模块。
mod.main():返回主模块(debuggee)的基础。如果这是一个DLL,它将返回,0直到加载。
mod.rva(addr):获得RVA addr。如果addr不在模块内,它将返回0。
mod.offset(addr):获取文件偏移量addr。如果addr不在模块内,它将返回0。
4、处理信息
peb() :获取PEB地址。
teb() :获取TEB地址。
tid() :获取当前的线程ID。
5、一般目的
bswap(value):字节交换value。
ternary(condition, val1, val2):如果条件非零,则返回val1,否则返回val2。
GetTickCount() :tick计数x64dbg。
6、记忆
mem.valid(addr):如果addr是有效的内存地址,则为True 。
mem.base(addr):返回内存页面的基数addr(可以根据您的内存映射模式更改)。
mem.size(addr):返回内存页面的大小addr(可以根据内存映射模式而改变)。
mem.iscode(addr):如果addr是可执行的页面,则为True 。
mem.decodepointer(ptr):相当于调用DecodePointerAPI ptr,仅适用于Vista +。
7、反汇编
dis.len(addr):获取指令的长度addr。
dis.iscond(addr):如果指令at addr是条件分支,则为True 。
dis.isbranch(addr):如果指令at addr是分支(jcc / call),则为True 。
dis.isret(addr):如果指令addr是a ,则为真ret。
dis.iscall(addr):如果指令addr是a ,则为真call。
dis.ismem(addr):如果指令at addr有内存操作数,则为True 。
dis.isnop(addr):如果指令at addr等于NOP ,则为真。
dis.isunusual(addr):如果指令处于addr异常状态,则为真。
dis.branchdest(addr):指令的分支目的地addr(如果按Enter键,它会跟随什么)。
dis.branchexec(addr):如果分支处于addr执行状态,则为True 。
dis.imm(addr):指令的立即值addr。
dis.brtrue(addr):指令的分支目的地addr。
dis.brfalse(addr):如果指令at addr是条件分支,则为下一条指令的地址。
dis.next(addr):来自的下一条指令的地址addr。
dis.prev(addr):上一条指令的地址addr。
8、跟踪记录
tr.enabled(addr):如果启用了跟踪记录,则为True addr。
tr.hitcount(addr):跟踪记录上的命中数addr。
tr.runtraceenabled() :如果启用了运行跟踪,则为True。
9、字节/字/双字/四字/ 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并返回值。
10、功能
func.start():函数的开始addr是零的一部分,否则为零。
func.end():函数结束addr是其中一部分,否则为零。
11、参考资料
ref.count() :当前参考视图中的条目数。
ref.addr(index):获取参考地址index。失败归零。
12、参数
这假设返回地址在堆栈上(例如,您在函数内)。
arg.get(index):获取index(从零开始)的参数。
arg.set(index, value):将参数设置为index(从零开始)为value。
13、插件
插件可以注册自己的表达式函数。
∨ 展开