x64dbg破解一个简单的Demo教程

源码分析

首先需要破解的程序源码

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <stdint.h>
#include <stdlib.h>


void main()
{
	while (true)
	{
		std::cout << "请输入密码:" << std::endl;
		std::string inputString;
		std::cin >> inputString;
		if (strcmp(inputString.c_str(),"qwe") == 0)
		{
			std::cout << "密码正确" << std::endl;
		}
		else
		{
			std::cout << "密码错误" << std::endl;
		}
	}
}

源码很简单 循环输入,如果输入qwe则输出密码正确,其他则输出密码错误

打开x64dbg 打开exe程序,单击右键,搜索->所有模块->字符串

 找到密码错误行

点击右键 在反汇编中转到

 

 可以转到EC11DD部分

 可以看到00007FF61FEC11CC 行有一句代码 jne dump.7FF61FEC11DD 说明是进入了错误判断,跳转到错误逻辑代码,可以在00007FF61FEC11CC 出F2打断点进行调试流程

一些代码流程说明

 00007FF61FEC11BE  mov rax,rbp [rax清0]

这里rax寄存器主要做比较字符串个数计数,比如密码是qwe所以比较的计数是4  qwe(3)加上一个\0 = 4

所以在00007FF61FEC11CE cmp rax,4 处有一个比较rax个数的判断

每一次循环比较strcmp时

00007FF61FEC11C5   inc rax  [rax 计数增加1]

每一个字符比较

00007FF61FEC11C8 cmp cl,byte ptr ds:[rsi+rax-1]  | 字符串和密码qwe做比较,一个字节一个字节的比较

00007FF61FEC11CC jne dump.7FF61FEC11DD  如果某一个字符比较失败,则字节跳转到失败地址7FF61FEC11DD

00007FF61FEC11CE cmp rax,4  比较成功的字符个数  小于4(qwe加\0) 在跳转到7FF61FEC11C1开始比较下一个字符,如果成功只进入成功处理00007FF61FEC11D4出

另外我们可以看到我们是一个while死循环

所以在00007FF61FEC1201 cmp rdi,10  编译器做的死循环 RDI是16 永远不是10,然后跳转到7FF61FEC1160开头的地方

00007FF61FEC1205 jb dump.7FF61FEC1160    这样就开始了一次循环

如何破解

上面代码简单的分析了如果一个字符比较失败

00007FF61FEC11CC jne dump.7FF61FEC11DD 会跳转到失败错误处理,我们在这里修改跳转的地址就可以了

修改地址为EC11D4让他跳转到正确的地址 

 

 

 然后生成新的exe文件

然后运行新的exe 可以发现无论输入什么输出密码正确了

 

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!感谢您的提问。下面是一个简单x64dbg使用教程: 1. 下载和安装x64dbg:您可以从x64dbg的官方网站下载最新版本的软件,并按照安装向导进行安装。 2. 打开目标程序:启动x64dbg后,点击“File”菜单,然后选择“Open”或“Attach”以打开目标程序。如果您选择“Open”,则浏览并选择要调试的可执行文件。如果您选择“Attach”,则选择目标程序的进程。 3. 设置断点:在目标程序中设置断点以便在特定位置暂停执行。您可以通过单击左侧窗格中的空白处或按下F2键来设置断点。还可以使用右键菜单设置条件断点、硬件断点等。 4. 开始调试:点击工具栏上的“Start”按钮或按下F9键开始调试目标程序。程序将在达到断点或触发其他调试事件时暂停执行。 5. 查看寄存器和内存:在调试过程中,您可以查看和修改寄存器和内存中的值。寄存器窗格显示了当前寄存器的值,内存窗格显示了指定地址的内存内容。 6. 跟踪代码:使用调试工具栏上的“Step Into”、“Step Over”和“Step Out”按钮来逐行跟踪代码执行。这些按钮分别用于逐行跟踪代码、跳过当前函数和从当前函数返回。 7. 查看堆栈:通过点击调试工具栏上的“Stack”按钮,可以查看当前函数调用的堆栈。堆栈窗格显示了调用堆栈的地址和参数。 8. 动态分析:x64dbg还提供了一些动态分析功能,如跟踪API调用、查找字符串、查看进程内存等。您可以通过菜单栏和右键菜单来使用这些功能。 这只是一个简单x64dbg使用教程,希望对您有所帮助!请注意,在进行任何调试操作之前,请确保您有合法的授权和使用权限。如果您需要更详细的指导,建议查阅官方文档或参考其他学习资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值