x64dbg入门学习

作者:朱金灿
来源:clever101的专栏

简介

  通过逆向一个C++程序来简单介绍如何使用x64dbg进行逆向。

编写一个C++示例程序

  打开VS2013,创建一个C++控制台工程:CrackDemo,并输入如下代码:

#include "stdafx.h"

int check(int key)
{
	if (1234 == key)
		return 1;
	else
		return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	printf("please input the key:\n");
	while (1)
	{
	  int key = 0;
	  scanf("%d", &key);
	  if (check(key))
	  {
		   printf("You got it.\n");
		   break;
	   }
	  else
	  {
		  printf("Sorry,try again\n");
	  }
	}
	return 0;
}

  这个程序就是一个简单的猜数游戏:当用户输出数字1234时就提示正确并退出程序,否则提示不断输入数字。

x64dbg上场练习

  现在我们需要使用x64dbg来逆向一下这个程序,使之输入什么数都能输出:You got it.我使用的x64dbg版本是Jul 1 2021。程序逆向的基本步骤如下:1.查找常量字符串;2.通过常量字符串分析汇编代码逻辑;3.修改汇编代码;4.验证逆向程序。

查找常量字符串

  按F9把程序运行起来,进入主模块,然后CPU(反汇编)窗口->鼠标右键->搜索->选择模块(根据个人需求选择,一般选择当前模块,前提是得先执行到主模块)->字符串,分别搜索:You got it和Sorry,try again两个字符串,找到相关的代码段,如下图:汇编代码

分析汇编代码逻辑

  分析一下上图的汇编代码:

call qword ptr ds:[<&scanf>]  ; 调用scanf函数,这里应该是让用户输入一个数
cmp dword ptr ss:[rsp+40],4D2 ; 输入的数和4D2比较,注意这个4D2是一个16进制数,换成10进制数就是1234
je crackdemo.7FF7D90D104F  ;如果为0,就跳转到7FF7D90D104F处的代码
lea rcx,qword ptr ds:[7FF7D90D21B0]     | 00007FF7D90D21B0:"Sorry,try again\n" ;给寄存器rcx送一个常量字符串Sorry,try again\n,也就是C++的赋值语句了
call qword ptr ds:[<&printf>]  ;打印这个常量字符串
jmp crackdemo.7FF7D90D1020  ; 无条件跳转到7FF7D90D1020代码处
lea rcx,qword ptr ds:[7FF7D90D21A0]     | 00007FF7D90D21A0:"You got it.\n" ;给寄存器rcx送一个常量字符串You got it.\n
call qword ptr ds:[<&printf>] ;打印这个常量字符串

应该说这段代码还是比较好阅读的。

修改汇编代码

  通过分析,我们发现cmp dword ptr ss:[rsp+40],4D2和je crackdemo.7FF7D90D104F是一处关键的跳转。因此一个取巧的办法是改变跳转的判断依据,将不等于0作为跳转一句。具体做法是选择je 0x00007FF7D90D104F这行代码,然后单击右键,在右键菜单中选择“汇编”菜单项,弹出如下窗口:汇编窗口
  在上面窗口中将je crackdemo.7FF7D90D104F改为jnz crackdemo.7FF7D90D104F,意思为不等于0的时候跳转,如下:修改汇编代码
(这一步如有继续弹出修改汇编代码的窗口可以单击取消按钮退出)
然后在CPU窗口中的右键菜单中选择“补丁”->“修补文件”:修补文件
  这里简单提下修改汇编代码的两个原则:一是修改汇编代码得尽量遵循取小不取大的原则,就是修改后的汇编指令占用的字节数最好小于等于原有的指令,不然就会破坏原有的程序结构,也就是在上图中把保持大小的选项选上,选上改选项后假如超出原有指令大小会有提示;二是上图还把剩余字节以NOP填充,这是什么意思呢?就是说假如修改的指令占用字节小于原有指令,那就用90 填充,90 就是 NOP。

验证逆向程序

  在控制台窗口运行CrackDemo破解.exe,效果图如下:
验证程序

  可以看到,我们的逆向是成功的!

### 回答1: x64dbg是一款开源的64位调试器,它提供了强大的功能来帮助研究和分析二进制代码。虽然它的官方文档主要是英文的,但是也可以通过一些方法获得中文帮助。 首先,你可以在x64dbg的官方网站上找到一些中文用户手册和教程。这些手册包含了关于x64dbg的基本介绍、安装步骤和常用功能的详细说明。你可以通过阅读这些手册来了解如何使用x64dbg进行调试和逆向工程。 其次,你还可以在一些技术论坛或社区里寻求中文帮助。这些论坛上有许多热心的用户和专家,他们对x64dbg非常熟悉并且乐于帮助他人解决问题。你可以在论坛上提问、分享经验或参与讨论,以获取更多关于x64dbg的中文帮助。 此外,你还可以找到一些中文的博客或教程。这些博客通常由技术爱好者或安全研究人员撰写,他们会分享自己使用x64dbg的经验和技巧。通过阅读这些博客,你可以学习到更多关于x64dbg的实用技巧和调试方法。 总之,虽然x64dbg的官方文档主要是英文的,但是通过一些方法,我们仍然可以获得一些中文帮助。使用这些方法,你可以更好地掌握x64dbg的使用技巧,并且更加高效地进行二进制代码的研究和分析。 ### 回答2: x64dbg是一款强大的开源调试工具,用于分析和调试64位Windows应用程序。它可以帮助开发者和研究人员了解应用程序的内部工作原理,发现并修复其中的问题。 x64dbg提供了中文帮助文档,方便用户快速入门和深入了解该工具的各种功能和用法。该帮助文档详细描述了x64dbg的界面布局和各个窗口的功能,以及常用的调试命令和操作。用户可以通过翻阅中文帮助文档了解如何设置断点、跟踪执行流程、查看内存和寄存器状态等。 对于初学者,中文帮助文档提供了一步步的教程,引导用户从基础的调试概念开始,逐渐掌握x64dbg的使用方法。用户可以学习如何加载可执行文件,如何设置断点和条件断点,如何单步执行程序等。 对于研究人员和高级用户,中文帮助文档还提供了一些高级主题的介绍,如动态修改内存、反汇编代码、分析函数调用等。用户可以通过阅读中文帮助文档,进一步了解如何使用x64dbg进行更深入的调试和分析。 总之,x64dbg中文帮助文档是用户学习和使用这款调试工具的重要参考资料。它通过清晰的描述和示例,帮助用户了解和掌握x64dbg的各种功能和技巧,提高调试效率和分析能力。无论是初学者还是高级用户,都可以从中文帮助文档中找到需要的帮助和指导。 ### 回答3: x64dbg是一款功能强大的开源调试工具,用于逆向工程和调试64位应用程序。它支持多种CPU架构和操作系统,可以帮助安全研究人员和开发人员分析和调试复杂的二进制文件。 x64dbg的中文版本是为了方便使用者更好地理解和使用该工具而推出的。中文帮助文档提供了对x64dbg各个功能模块的详细解释和说明,包括调试器、寄存器、内存、线程、断点等等。用户可以通过中文帮助文档快速上手和掌握x64dbg的各项功能,从而更好地进行逆向分析和调试工作。 通过x64dbg的中文帮助文档,用户可以学习如何设置断点、观察变量、跟踪程序执行流程等等。同时,该文档还提供了一些常见问题的解决方案和调试技巧,帮助用户快速定位问题并解决。 除了文档本身,x64dbg的中文帮助还提供了一个活跃的社区支持和交流平台。用户可以在该平台上分享经验、提问问题和获取解答,与其他使用者一起学习和进步。 总之,x64dbg中文帮助为用户提供了一个详尽而易懂的指南,使用户能够更加高效地使用这个强大的调试工具。无论是初学者还是经验丰富的安全研究人员,都可以从中获得帮助和启发,更好地开展逆向工程和调试工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clever101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值