[BJDCTF2020]BJD hamburger competition-buuctf

这是一道unity逆向

unity逆向不管咋样,第一步找到多少位

直接告诉了

64位

dnspy打开

找到这里

简单的加密

sha1和md5

md5在线解密破解,md5解密加密 (cmd5.com)

一个网站解决

        

你输入可以发现不对

在MD5的函数中

你可以发现

appendX2

和读入20位

学到了

主要是这个X ,是用大写,那么是不是小x就是小写呢

嗯呢

flag='b8c37e33defde51cf91e1e03e51657da'
for i in range(20):
    if(flag[i].islower()):
        print(flag[i].upper(),end='')
        continue
    else:
        print(flag[i],end='')

我还想尝试一下改代码

在这里编辑方法

using System;
using UnityEngine;

// Token: 0x02000004 RID: 4
public partial class ButtonSpawnFruit : MonoBehaviour
{
	// Token: 0x0600000C RID: 12 RVA: 0x000021C8 File Offset: 0x000003C8
	public void Spawn()
	{
		FruitSpawner component = GameObject.FindWithTag("GameController").GetComponent<FruitSpawner>();
		if (component)
		{
			if (this.audioSources.Length != 0)
			{
				this.audioSources[UnityEngine.Random.Range(0, this.audioSources.Length)].Play();
			}
			component.Spawn(this.toSpawn);
			string name = this.toSpawn.name;
			if (name == "汉堡底" && Init.spawnCount == 0)
			{
				Init.secret += 997;
			}
			else if (name == "鸭屁股")
			{
				Init.secret -= 127;
			}
			else if (name == "胡罗贝")
			{
				Init.secret *= 3;
			}
			else if (name == "臭豆腐")
			{
				Init.secret ^= 18;
			}
			else if (name == "俘虏")
			{
				Init.secret += 29;
			}
			else if (name == "白拆")
			{
				Init.secret -= 47;
			}
			else if (name == "美汁汁")
			{
				Init.secret *= 5;
			}
			else if (name == "柠檬")
			{
				Init.secret ^= 87;
			}
			else if (true)
			{
				Init.secret ^= 127;
				string str = Init.secret.ToString();
				if (true)
				{
					this.result = "BJDCTF{" + ButtonSpawnFruit.Md5(str) + "}";
					Debug.Log(this.result);
				}
			}
			Init.spawnCount++;
			Debug.Log(Init.secret);
			Debug.Log(Init.spawnCount);
		}
	}
}

还没没成功,没深究,掌握了改代码就行

需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参与需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解与结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备一定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统与需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计与仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建与算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
<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
发出的红包

打赏作者

name_name123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值