x64dbg2020是一款优化好用的反汇编程序,兼容32位和64位操作系统,软件与我们经常使用的OllyDbg调试工具类似,软件可以有效地加载相应的文件进行调试,支持dll、exe、ocx等文件,除此之外,软件还具备集成的、可调试的、类似于ASM的脚本语言,软件操作也很容易上手,不需要学习复杂的汇编就可以操作,可谓是相当实用。
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 ++编写的插件,改变颜色和调整你的喜好。
4、X64/X32支持
可以调试x64和X32的应用程序。只有一个接口。
5、建立在开源库
使用的Qt,TitanEngine,BeaEngine,青蟹,杨松,LZ4和XEDParse。
6、操作简单,功能强大的开发
使用C ++和Qt4的快速添加新的功能。
7、脚本化
有一个集成的,可调试,ASM-like脚本语言。
8、社区意识
有许多功能的倒车社会思想或创建的。
9、伸缩
编写插件来添加脚本命令或集成的工具。
1、安装winsnap之后,点击注册属性可以看到软件版本为“未注册版”,如下图所示:
2、点击“x64dbg.exe”运行x64dbg程序,因为是64位程序,也不知道怎么查壳(实际上是没有加壳的),就直接把主程序载入即可:
3、载入以后,先运行一下“断点”模块(那个向右的箭头 → ),它会断下来,也可以理解为它会断在系统领空,我们先把它原来的所有断点都给删除掉,如下图:
4、我们的思路是先搜索字符串看看,找到关键的注册字符。但是在搜索之前,因为它默认断在系统的dll文件,所以我们要先选择我们要调试的进程名称,要不然搜索出来的不是我们所需的信息
5、选择以后,又会回到CPU反汇编窗口,这里才是真正的主程序,我们再来搜索
6、找到了很多字符串了,根据我们的经验,一般注册的关键词诸如reg之类的,我们看到,这里有一个regname、regcode,也就是注册名、注册码。我们选择这个双击一下回到反汇编窗口
7、同时通过分析得出,它是把注册信息保存到注册表里面,向上滑动鼠标,可以看到关键的代码:一个CALL下面紧接着是一个判断,通过al的值决定是否跳转
8、我们在这个CALL这一行下断:
9、然后运行一下,程序运行了,我们随便输入注册信息,程序断在我们下好的断点:
10、通过我们单步调试,如果al的值是0的时候,跳转会实现,跳向注册失败。那如果al=1呢?也就不会跳,会注册成功
11、我们重新载入一次,再次运行一次,和开始一样,会断在我们下好的断点这里,现在我们的目标已经很明确了,要把al的值强行赋值为1
12、进入call以后,我们开始修改了:
13、和od一样,在第一行双击即可修改:
14、修改以后,保存:
15、点pathes按钮,出现:
16、至此就破解完成了
17、注册信息保存位置:
18、破解后:
首先运行x64dbg后,发现是全英文版的,但是它的操作界面和32位的OD还是很相似的,有一些操作也是相同的,比如F2下断等。所以对一般用过OD的人来说,上手应该也是很快的。不多说了,开始吧。
1.因为是64位程序,也不知道怎么查壳(实际上是没有加壳的),就直接把主程序载入x64_dbg。
2.载入以后,先运行一下(那个向右的箭头 → ),它会断下来,也可以理解为它会断在系统领空,我们先把它原来的所有断点都给删除掉。
3.我的思路是先搜索字符串看看,找到关键的注册字符。但是在搜索之前,因为它默认断在系统的dll文件,所以我们要先选择我们要调试的进程名称,要不然搜索出来的不是我们所需的信息。
4.选择以后,又会回到CPU反汇编窗口,这里才是真正的主程序,我们再来搜索。
5.找到了很多字符串了,根据我们的经验,一般注册的关键词诸如reg之类的,我们看到,这里有一个regname,regcode,也就是注册名、注册码。我们选择这个双击一下回到反汇编窗口。6.同时通过分析得出,它是把注册信息保存到注册表里面,向上滑动鼠标,可以看到关键的代码:一个CALL下面紧接着是一个判断,通过al的值决定是否跳转。
7.我们在这个CALL这一行下断点。
8.然后运行一下,程序运行了,我们随便输入注册信息,程序断在我们下好的断点。
9.通过我们单步调试,如果al的值是0的时候,跳转会实现,跳向注册失败。那如果al=1呢?也就不会跳,会注册成功。
10.我们重新载入一次,再次运行一次,和开始一样,会断在我们下好的断点这里,现在我们的目标已经很明确了,要把al的值强行赋值为1。
11.进入call以后,我们开始修改了。
12.和od一样,在第一行双击即可修改。
13.修改以后,保存。
14.点pathes按钮。
一、输入
使用软件时,您通常可以使用各种内容作为输入。
1、命令
命令具有以下格式:
命令 arg1 , arg2 , argN
2、变量
变量可选地以a开头,$并且只能存储一个DWORD(x64上的QWORD)。
3、注册
所有寄存器(所有大小)都可以用作变量。
备注:
大多数寄存器的变量名称与它们的名称相同,但以下寄存器除外:
x87控制字标志:该寄存器的标志名称如下:_x87CW_UM
除了在体系结构中的寄存器,x64dbg提供以下寄存器:CAX,CBX,CCX,CDX,CSP,CBP,CSI,CDI,CIP。这些寄存器映射到32位平台上的32位寄存器,以及64位平台上的64位寄存器。例如,CIP是EIP在32位平台上,并且是RIP在64位平台上。此功能旨在支持与体系结构无关的代码。
4、记忆位置
您可以使用以下表达式之一从/向内存位置读取/写入:
[addr]从中读取DWORD / QWORD addr。
n:[addr]从中读取n个字节addr。
seg:[addr]从一个段读取一个DWORD / QWORD addr。
byte:[addr]从中读取BYTE addr。
word:[addr]读一个WORD addr。
dword:[addr]从中读取一个DWORD addr。
qword:[addr]从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、模块数据
DLL导出:
键入GetProcAddress并自动将其解析为函数的实际地址。要明确定义从哪个模块加载API,请使用:[module].dll:[api]或[module]:[api]。以类似的方式你可以解决序数,尝试[module]:[ordinal]。另一个宏允许您获取模块的加载基础。例如,当[module]为空字符串时:GetProcAddress,将使用当前在CPU中选择的模块。
加载模块库:
如果您要访问加载模块的基础上,你可以写:[module]:0,[module]:base,[module]:imagebase或[module]:header。
10、RVA /文件偏移
如果您想访问模块RVA,您可以编写[module]:0+[rva],也可以编写[module]:$[rva]。如果要将文件偏移量转换为VA,则可以使用[module]:#[offset]。例如,当[module]为空字符串时:0,将使用当前在CPU中选择的模块。
11、模块入口点
要访问一个模块的入口点,你可以写[module]:entry,[module]:oep或[module]:ep。请注意,当存在带有名称的导出时entry,oep或者ep将返回这些名称的地址。