BUUCTF-RE-[BJDCTF2020]BJD hamburger competition

[BJDCTF2020]BJD hamburger competition

先查壳

先查壳,发现根本没有壳
在这里插入图片描述

静态分析

因为这是Unity3D 游戏 所以可以参考
简单的Unity3D逆向
发现其实关键的代码就藏在/BJD hamburger competition_Data/Managed/Assembly-CSharp.dll里面
所以我们将这个.DLL文件丢入dnspy

其实我们可以发现,ButtonSpawnFruit这个函数里面,有一些加密函数我们可以点进去看下
在这里插入图片描述

分析关键代码

经过分析我们可以发现其实就是将某一段字符串经过sha1加密=="DD01903921EA24941C26A48F2CEC24E0BB0E8CC7"这一段字符串
我们先将段进行sha1解密

在这里插入图片描述
然后再经过md5加密就可打印出flag
在这里插入图片描述
其实经过查询我们可以得知,X2表示的是大写 Substring(0,20)其实就是截取前20个字符

get flag

那么我们的flag应该是1001 md5加密大写之后的前20个字符
B8C37E33DEFDE51CF91E1E03E51657DA

flag{B8C37E33DEFDE51CF91E}

<think>好的,我现在需要处理用户关于BUUCTF中[BJDCTF2020]JustRE题目的动态调试问题,使用x64dbg工具。首先,我得先回忆一下这个题目的基本情况。可能是一个逆向工程题目,需要分析一个可执行文件,找出flag。用户希望了解如何使用x64dbg进行动态调试来解题。 首先,我需要确定用户的需求。他们可能已经尝试过静态分析但遇到了困难,或者想通过动态调试来观察程序运行时的行为,比如寄存器、内存变化,或者找到关键函数的位置。接下来,我应该考虑这个题目的常见解法,可能涉及输入验证、字符串解密、或者某些特定的反调试技巧。 用户提到的是x64dbg,所以这是一个Windows平台下的64位程序。可能需要检查是否有加壳,但通常CTF题目不会太复杂,可能只是简单的混淆或直接验证。我需要引导用户进行步骤,比如加载程序,设置断点,分析字符串,跟踪输入处理流程。 首先,步骤应该是准备环境:下载题目文件,安装x64dbg,可能还需要准备一些输入样本,比如测试字符串。然后打开x64dbg,加载程序,运行到入口点。接着,寻找关键函数,可能通过字符串参考,比如程序输出的提示信息,或者错误信息,找到引用这些字符串的代码位置,设置断点。 在动态调试过程中,用户需要观察程序执行时的寄存器状态、栈变化、内存数据。例如,输入可能被处理后与某个预设值比较,或者在内存中进行某种运算,如异或、加减等。这时候需要跟踪这些操作,找到flag生成的部分。 可能的挑战包括处理反调试技术,比如检测调试器存在,导致程序行为异常。这时候需要指导用户如何绕过,比如修改标志位,或者使用插件。但CTF题目可能不会涉及太复杂的反调试,所以可能不需要这些步骤。 另外,可能需要分析程序的输入处理函数。比如,用户输入被读取后存放在某个缓冲区,之后经过一系列操作,与正确flag进行比较。这时候需要找到比较的位置,查看比较的数据,可能直接得到flag或需要进一步解密。 可能的错误点:用户可能没有正确设置断点,或者在错误的位置分析代码。需要提醒他们在关键函数(如main函数,或获取输入的函数)设置断点,并逐步执行,观察程序流程。 总结步骤可能包括:加载程序,定位关键字符串,回溯到引用处,设置断点,运行程序,输入测试数据,跟踪处理过程,分析内存或寄存器中的值,从而找到flag。 需要确保回答结构清晰,分步骤说明,同时注意LaTeX格式的正确使用,尤其是行内数学表达式和独立公式的格式。例如,在提到内存地址时,可能需要用$...$包裹,如地址0x401000应写作$0x401000$。如果有数学运算,如异或操作,用$...$包含,例如$x \oplus 0x12$。 另外,确保使用中文回答,避免专业术语过于晦涩,必要时进行解释。比如,解释断点是什么,如何设置,寄存器窗口的作用等。 最后,可能需要验证答案的正确性,比如在动态调试后得到的字符串是否符合flag格式,如BJD{...},并提醒用户常见的flag格式,避免遗漏。</think>以下是针对BUUCTF题目**[BJDCTF2020]JustRE**使用x64dbg进行动态调试的详细步骤: --- ### 一、准备工作 1. **下载题目文件** 从BUUCTF平台下载`JustRE.exe`(通常为32/64位Windows可执行文件)。 2. **安装x64dbg** 确保安装最新版x64dbg(含x64和x86调试器),本题可能为32位程序,需启动`x32dbg`。 3. **准备测试输入** 题目可能需要输入字符串,准备测试值如`123456`或`BJD{test}`。 --- ### 二、初步静态分析 1. **检查程序行为** 直接运行程序,观察输出(如提示输入、错误信息等)。 2. **查找关键字符串** 使用x64dbg的字符串搜索功能(`Ctrl+A`分析代码后,`右键 -> 搜索 -> 所有模块 -> 字符串`),定位如`"Wrong!"`、`"Correct!"`或`flag`相关字符串。 - 例:若发现字符串`"Please input your flag:"`,记录其地址(如`$0x404000$`)。 --- ### 三、动态调试步骤 1. **加载程序** - 打开x64dbg,拖拽`JustRE.exe`到窗口,或通过`文件 -> 打开`加载。 - 程序暂停在入口点(`EntryPoint`),按`F9`运行至程序初始化完成。 2. **定位关键函数** - **方法1**:通过字符串引用回溯 双击找到的提示字符串(如`"Wrong!"`),跳转到其代码引用位置,向上查找函数头部(`push ebp`),按`F2`在此处设断点。 - **方法2**:跟踪输入函数 在`GetDlgItemTextA`(获取输入内容)或`strcmp`(字符串比较)等API设断点,触发后回溯调用栈。 3. **分析输入处理逻辑** - 触发输入框后,输入测试字符串(如`123456`),程序暂停在输入处理函数。 - **单步执行**:按`F7`逐指令跟踪,观察: - **寄存器变化**:如`EAX`存储返回值,`ECX`可能为循环计数器。 - **内存操作**:如`[ebp-0x10]`可能存储输入内容,`mov`、`xor`等指令处理数据。 - **关键操作示例**: ```assembly ; 输入字符与固定值异或 XOR AL, 0x12 ; 比较处理后的值与预设值 CMP [EDI], AL JNZ WRONG_LABEL ``` 4. **提取Flag** - **直接获取**:若发现内存中存在完整Flag(如`BJD{...}`),直接复制。 - **计算推导**:若为逐字符处理,记录预设值(如`0x45`)及操作(如`XOR 0x12`),反推原始字符: $$ \text{原始字符} = \text{预设值} \oplus \text{操作数} $$ 例:$0x45 \oplus 0x12 = 0x57 \rightarrow \text{字符'W'}$。 --- ### 四、注意事项 1. **反调试绕过** 若程序检测调试器(如`IsDebuggerPresent`),在x64dbg中: - 修改相关标志位(`右键 -> 断点 -> 硬件断点 -> 删除`)。 - 使用插件(如`ScyllaHide`)隐藏调试器。 2. **函数调用约定** 注意`stdcall`或`cdecl`约定,正确分析参数传递(如`push`顺序)。 --- ### 五、答案示例 假设调试发现输入字符需与`0x12`异或,预设值为`[0x45, 0x36, ...]`,则: 1. 计算每个字符:$0x45 \oplus 0x12 = 0x57$('W'),$0x36 \oplus 0x12 = 0x24$('$')... 2. 组合结果得到Flag:`BJD{...}`。 --- 通过以上步骤,可逐步定位关键验证逻辑并提取Flag。实际调试中需结合程序具体行为调整策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值