x32dbg动态调试--字符串搜索修补程序

2023-10-09 04:30

本文主要是介绍x32dbg动态调试--字符串搜索修补程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

观察程序

  1. 使用Detect It Easy检测目标程序为PE32

  2. 运行程序可以看到:程序有三个按钮:Serial/Name、Exit、Serial。我们先做“Serial”

  3. Nag提示框

  4. 到达下图的界面后我们随便输入“987654321”这个时候有个弹框显示“Try Again!!”。所以这里的Try Again!!”就是我们需要搜索的关键字符串

  5. IDA Pro载入目标程序可以搜索到上述字符串

分析过程

  1. 当我们把一个程序拖入到x64dbg中我们就可以看到下图的界面。这个时候我们需要注意的是它并不是在要调试程序的模块内
  2. 按F9运行直到显示下图的界面才真正进入目标程序内部,鼠标右键,再依次点击“搜索——>当前模块——>字符串”

修补程序:去掉Nag提示框

  1. 搜索nag提示框中的字符串
  2. 双击上图中的字符串跳转到地址空间处,并在0x42F797处设置软件断点
  3. 按F7单步步入“acid burn.42A170”函数空间内部,找到并将光标选择“call 0x004057A8(call <JMP.&MessageBoxA>)”所在行,鼠标右键选择“汇编”命令(或快捷键Space),填写nop,再勾选“保持大小”和“剩余字节以NOP填充”两个选项,再点击“确定”即可。
  4. 鼠标右键选择“补丁”命令(或快捷键Ctrl+P),点击“修补文件”,填写文件名,最后点击“保存”即可。

第一关Serial

  1. 在下方的搜索框搜索try字符串,x32dbg会自动筛选出所有类似的字符串。但是我们可以看到这里有三个字符串供我们选择
  2. 不知道具体是哪个字符串时,我们只需要给满足条件的字符串下断点就可以了,鼠标右键——>在所有命令上设置断点
  3. 按F9继续运行,接着在程序的文本框中输入“987654321”,点击“check it baby”按钮。程序会在下图的位置暂停下来。这个时候通过分析汇编代码,我们可以知道在“0x0042F4D0”这个函数为关键函数。
  4. 重新运行程序后,我们可以看到一个是我们输入的字符串,另一个是未知字符串而这个未知的字符串很有可能是“Serial”
  5. 再次重新运行并输入“Hello Dude!”,这个时候程序判断成功,执行“God Job dude!!”

第二关Serial/Name

  1. 重新运行程序,点击“Serial/Name”按钮,之后我们在名字部分输入“redbright”,注册码部分输入“9999999999”。之后运行程序,会在下图的位置断下。通过分析我们可以知道“0x0042FAFE”处调用比较函数

  2. 最后我们尝试输入“CW-9348-CRACKED”这个时候程序执行成功

算法破解

20 Serial中“CW-9348-CRACKED”中9348的计算方法:取Name第一个字母对应的ASCII值,比如说“redbright”中第一个字符r对应数字0x72,然后用它乘以0x29,结果再x2,将16进制数字转为10进制的字符串便是9348,然后再在前加上CW-,后加上-CRACKED,就组成了用户名对应的注册码

参考文献

  • x64dbg入门系列(二)-搜索字符串

这篇关于x32dbg动态调试--字符串搜索修补程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/170366

相关文章

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++