BUUCTFYoungter-drive

发布时间:2026/10/26 7:53:17

BUUCTFYoungter-drive 考点多线程查壳脱壳进入ida直接进入main函数sub_4110FF是输入flag的部分flag有36个字符main函数8-13行有两个线程hObject、Thread这段代码是使用C语言风格的Windows API函数来创建互斥体Mutex、线程以及关闭句柄的操作。下面是对每行代码的详细解释::hObject CreateMutexW(0, 0, 0);这行代码在全局命名空间中创建一个互斥体Mutex。CreateMutexW是Windows API中的一个函数用于创建一个内核对象用于同步多个线程对共享资源的访问确保同一时间只有一个线程可以访问资源。参数说明第一个参数为LPSECURITY_ATTRIBUTES lpMutexAttributes指定了互斥体的安全属性默认设为0表示使用默认安全属性。第二个参数为BOOL bInitialOwner指定创建线程是否立即拥有该互斥体。设为0意味着调用者不立即拥有互斥体。第三个参数为LPCWSTR lpName为互斥体指定一个名称这里也是0表示创建一个未命名的本地互斥体。::hObject是一个全局或静态变量用于存储新创建的互斥体的句柄。j_strcpy(Destination, Source);这行代码似乎是用来复制字符串的但j_strcpy并不是标准库中的函数可能是自定义的或特定库中的函数其作用类似于strcpy将Source指向的字符串复制到Destination指向的缓冲区中。hObject CreateThread(0, 0, StartAddress, 0, 0, 0);创建一个新的线程。CreateThread是Windows API中的函数用于创建一个新的线程并执行指定的函数。参数说明第一个参数为LPSECURITY_ATTRIBUTES lpThreadAttributes同上指定线程的安全属性这里为0使用默认设置。第二个参数为SIZE_T dwStackSize指定线程栈的大小设为0表示使用系统默认大小。第三个参数为LPTHREAD_START_ROUTINE lpStartAddress是指向线程开始执行的函数地址这里是StartAddress。第四个参数为LPVOID lpParameter传递给线程函数的参数这里为0没有传递参数。第五个参数为DWORD dwCreationFlags控制线程创建的标志设为0表示无特殊标志。第六个参数为LPDWORD lpThreadId输出参数返回新线程的ID这里没有使用所以传入了0。hObject被重新赋值为新创建线程的句柄。Thread CreateThread(0, 0, sub_DA119F, 0, 0, 0);同样是创建一个线程但这次执行的函数是sub_DA119F。Thread变量用于存储这个新线程的句柄。CloseHandle(hObject);关闭之前创建的互斥体或线程的句柄。CloseHandle是Windows API中的函数用于释放与句柄关联的系统资源。这里关闭的是第一个线程的句柄尽管变量名是hObject但根据上下文应该是线程句柄。CloseHandle(Thread);关闭第二个线程的句柄释放与之关联的系统资源。总结来说这段代码首先创建了一个互斥体然后创建了两个线程每个线程都去执行不同的函数StartAddress和sub_DA119F最后关闭了这两个线程的句柄以及可能误标为互斥体的句柄。注意互斥体创建后并未显示地在代码中使用也没有进行线程间的同步操作这可能是个疏忽或者示例代码片段的一部分。此外字符串复制操作与线程创建看起来是独立的操作没有直接关联。sub_411190函数off_418004可查看是”TOiZiZtOrYaToUwPnToBsOaOapsyS“Destination就是原始flagflag经加密后得”TOiZiZtOrYaToUwPnToBsOaOapsyS“回到main函数10-11行分析加密过程线程1进入StartAddresssub_41112C总结线程1处理了flag中的29位从后往前逐个进行sub_41112C处理。对照键盘标QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnmflag字符为大写时候新字符 键盘表[ 原大写字母 - 38 ]小写时新字符 键盘表[ 原大写字母 - 96 ]线程2进入sub_41119F线程2就是纯干扰线程没有加密只是递减dword_418008线程1中也有Sleep(100u)休眠100ms和--dword_418008所以两个线程是交替进行的猜测下标为奇数或者偶数时加密验证#include Stdio.h #include String.h //参数一目标字符 参数二目标字符串 int find(char yuan,char Aim_array[]){ for(int i 0;i strlen(Aim_array);i){ if(Aim_array[i] yuan) return i; } } int main(){ char source[] TOiZiZtOrYaToUwPnToBsOaOapsyS; //flag 加密后的结果 char off_418000[] QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm; //替换表 //在 off_418000 中找到与 source[i] 相同的字符取出下标 与 96 或 38 进行加减操作 char flag[29] ; for(int i 0;i 29;i){ //先执行哪个线程我们不知道所以就都试一遍i % 2 1或i % 2 0 if(i % 2 1){ if(source[i] A source[i] Z){ //大写执行 //因为原先的小写字符执行完变成大写了 所以不能像IDA中的代码 flag[i] find(source[i],off_418000) 96; }else{ //小写执行 flag[i] find(source[i],off_418000) 38; } }else{ flag[i] source[i]; } } for(int i 0;i 29;i){ printf(%c,flag[i]); } return 0; }i % 2 1是对的所以下标为奇数从0开始时进行线程1加密flag运行得ThisisthreadofwindowshahaIsESflag{ThisisthreadofwindowshahaIsES}只有35个字符因为线程1只操作了30位。但是flag有36个字符差一个未知的每个字母都猜一遍flag{ThisisthreadofwindowshahaIsESE}参考 文章BUUCTF逆向题Youngter-drive-CSDN博客Youngter-drive-CSDN博客
延伸阅读

更多相关文章

2026/10/26 7:52:59

BUUCTF [UTCTF2020]basic-re

查壳 没有 进入ida看了之后发现与flag好像没关系,shiftF12发现可疑字符串,提交试一下成功了,flag{str1ngs_1s_y0ur_fr13nd}

2026/10/24 3:07:19

TLA2518与PIC18F86K22构建高精度数据采集系统

1. TLA2518与PIC18F86K22的硬件选型考量在工业控制和精密测量领域,模拟信号到数字信号的可靠转换是系统设计的关键环节。德州仪器的TLA2518作为一款12位1MSPS采样率的SAR型ADC,与Microchip的PIC18F86K22单片机组合,能够构建高性价比的数据采集…

2026/10/26 7:51:22

深度学习设备故障诊断:从数据链路到PyTorch实现与部署

简介:这是一套面向毕业设计、课程实践与工业研发场景的机械设备故障诊断Python实现,基于深度学习网络分析滚动轴承、齿轮箱等振动频谱特征,完成故障类型智能识别。代码按数据预处理、特征提取、模型训练、性能评估模块化组织,包含…

2026/10/26 7:51:22

Xcode与iOS版本兼容性全解析及实战指南

1. Xcode与iOS版本兼容性全景解析作为苹果生态的核心开发工具,Xcode版本与iOS系统版本的匹配关系直接影响着开发者的工作效率和项目兼容性。我在实际团队协作中经常遇到这样的场景:新同事用最新版Xcode编译的项目,在老版本设备上出现各种兼容…

2026/10/26 7:51:22

固定翼容错控制与控制分配:QP分配器与Simulink仿真全解析

简介:面向固定翼飞行器容错控制与控制分配研究的MATLAB代码与Simulink模型套件,适用于航空控制领域的研究生、工程师及对多操纵面重构控制感兴趣的技术人员。资源共99个文件、约5.84MB,以mat数据文件为主(60个)&#x…

2026/10/26 7:51:22

分布式事务核心原理与实践指南

1. 分布式事务的本质挑战在单体应用时代,我们习惯用数据库的ACID特性来保证数据一致性。但当我们把系统拆分成多个服务后,一个业务操作可能涉及多个数据库的修改,这就引出了分布式事务的核心问题:如何确保跨服务的多个数据操作要么…

2026/10/26 7:51:22

OpenMontage 深度解析:用智能体重构视频生产流水线

1. 当视频剪辑遇上智能体:OpenMontage 到底在解决什么问题第一次看到 OpenMontage 这个名字,我下意识把它归类成又一个"套壳剪辑工具"。真正翻完它的设计思路之后才发现,这东西的野心根本不在"帮你剪得快一点"&#xff0…

2026/10/26 7:46:22

MATLAB手写CNN实现:从零搭建可调试卷积神经网络

简介:本资源是一份面向深度学习初学者与MATLAB实践者的CNN原理教学与模拟实现包,聚焦卷积神经网络的核心机制理解与基础训练流程复现。压缩包共30个文件,全部为MATLAB源码(.m文件),涵盖网络初始化&#xff…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑