源码分析

首先需要破解的程序源码

#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 可以发现无论输入什么输出密码正确了

x64dbg破解一个简单的Demo教程相关推荐

  1. java 基础api实现上传,上传文件到7牛云存储的java api一个简单的demo实现

    最近在做一个项目,需要用到云存储,项目用的是七牛云.现在将项目过程中关于调用七牛云平台的java api来上传本地文件到七牛云空间的一个简单的demo展示给大家,希望对同样再用七牛云的童鞋们有所帮助. ...

  2. android 观察者模式的简单demo,一个简单的demo彻底搞懂观察者模式

    介绍 观察者模式也被称为发布-订阅(Publish/Subscribe)模式,它属于行为型模式的一种.观察者模式定义了一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听.当这个主题对象状态变 ...

  3. 一个简单的Julia教程

    原文链接:点击打开链接 摘要: 当前版本 v0.5 因为在知乎上写的量子计算札记会涉及到使用Julia语言的数值模拟,同时随着中国的Julian越来越多,而之前几个在JuliaCN活跃的老司机最近一直 ...

  4. (译)如何使用GameCenter制作一个简单的多人游戏教程:第一部分

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  5. Django----做一个简单网页的教程(适合初学者)

    这篇文字适合刚学习Django的同学,如果比较熟的就不用看了. 以下都是讲在windows上的部署情况: 准备: 1.python3.6 2.pycharm profession(专业版) 3.安装D ...

  6. 基于蒙特卡罗树搜索的智能行程规划系统设计(二)一个简单的DEMO

    @基于蒙特卡罗树搜索的智能行程规划系统设计 基于蒙特卡罗树搜索的智能行程规划系统设计DEMO0.1 github链接.https://github.com/blue-sky-sea/MCTS-TRAV ...

  7. 学习LSM(Linux security module)之二:编写并运行一个简单的demo

    转自:cnblog 各种折腾,经过了一个蛋疼的周末,终于在Ubuntu14.04上运行了一个基于LSM的简单demo程序. 一:程序编写 先简单的看一下这个demo: //demo_lsm.c #in ...

  8. Vue.js学习-搭建一个简单的demo

    原创申明:本文为博主原创,转载请注明出处! 这里主要记录vue.js+webpack在一个简单实例中的使用过程 说明:本次搭建基于Win 7平台 Node.js 安装 官网提供了支持多种平台的的LTS ...

  9. 一个简单的小教程:Envi中使用光谱指数提取目标地物面积——以NDWI提取水体为例

    本次实验使用Landsat8的海南省海口市影像(包括陆地和周边海域),因从GEE下载,相关预处理步骤已解决.此处为海口市的部分影像. 一.NDWI指数信息介绍 NDWI(Normalized Diff ...

最新文章

  1. c语言中求一个数的因数,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  2. 不要小看小小的 emoji 表情
  3. Leap Motion+第六感或引发人机交互革命
  4. 2021-02-07 接口测试工具-Postman使用详解
  5. auto-sklearn案例解析一
  6. zoj 1078 palindrom numbers
  7. mysql数据库应用模式与特点_MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述...
  8. Dart基础-运算符
  9. STM32F030 电压监测实现
  10. bos 文件上传-调研
  11. NOIP2014提高组 飞扬的小鸟
  12. 计算机相关知识——阻塞和非阻塞,同步和异步等相关概念
  13. 关于Maxon上位机EPOS Studio的配置
  14. 向日葵 服务器连接失败怎么办
  15. P1014 [NOIP1999 普及组] Cantor 表
  16. 6月楼市或迎降价潮 房企策略有调整
  17. 百度地图定位API,精度提高
  18. 将字符数组中存放的数字字符转换为数
  19. java的 内省机制_Java 内省机制
  20. Firefox 使用、设置和常见问题的解决方法

热门文章

  1. 高等数学考研笔记(八)
  2. 历年北京理工大学复试上机题
  3. asp.net园林绿化服务交易网站
  4. 【Java基础】UML类图及各种线代表的关系含义总结
  5. linux hdmi输出快捷键,Linux 下的投影仪 HDMI 输出设置
  6. CodeGear给卖了
  7. 初识人工智能身份证识别身份证号码
  8. 内网安全:内网渗透.(拿到内网主机最高权限 vulntarget 靶场 A)
  9. 北京奥运会Dashboard.Widgets
  10. Linux之常见的通配符