week2--RE--刷题记录

news/2025/11/26 18:14:40/文章来源:https://www.cnblogs.com/x0rrrrr/p/19272092

week2刷题

目录
  • week2刷题
      • 1. [Zer0pts2020]easy strcmp
      • 2. [buuctf] findKey
          • 方法一:
          • 方法二:
      • 3. [FlareOn5]Ultimate Minesweeper

1. [Zer0pts2020]easy strcmp

​ 下载后直接IDA打开题目,结构非常的简单,直接看main函数
img

只有一个赤裸裸的strcmp,进去看看有什么操作:
img

此时这个strcmp大概率就是被hook了。

在ELF当中,init会比main先执行,可以看看init里面的函数做了什么:

img

也就是这三个函数:
img

逐个查看,发现在sub_795当中hook的strcmp:
img

而hook函数就是sub_6EA,接下来看看这个函数怎么回事:

__int64 __fastcall sub_6EA(__int64 a1, __int64 a2)
{int i; // [rsp+18h] [rbp-8h]int v4; // [rsp+18h] [rbp-8h]int j; // [rsp+1Ch] [rbp-4h]for ( i = 0; *(_BYTE *)(i + a1); ++i );v4 = (i >> 3) + 1;for ( j = 0; j < v4; ++j )*(_QWORD *)(8 * j + a1) -= qword_201060[j];return qword_201090(a1, a2);
}

​ 这里就是先进行了 - qword_201060的加密,然后调用原来的strcmp,这里是将输入的字符串,每8个字节减去qword_201060当中的一个数,最后得到最开始的strcmp的字符串,知道这个就能直接写exp了,这里使用C/C++写比较好,python对这种整型类型处理不太方便,容易出错:

#include <stdio.h>
int main()
{char enc[] = "zer0pts{********CENSORED********}";unsigned long long key[] = {0, 0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A064A35282B};for(int i = 0; i < 4;i++){((unsigned long long*)enc)[i]  = ((unsigned long long*)enc)[i] + key[i];}for(int i = 0;i < 32;i++){printf("%c",enc[i]);}
}

最后解出flag为:zer0pts{l3ts_m4k3_4_DETOUR_t0d4y}

2. [buuctf] findKey

​ 这题是我认为比较有意思的一道题,首先下载下来的题目运行一下,是一个win32写的题目:
img
img

一共有两个对话框,然后有一个是在help当中的About选项当中。这个时候还不知道要怎么解这个题。那么直接IDA打开题目:
img

很快就找到了主对话框的回调函数,不过加了花指令,需要整理一下才能够反编译,反编译之后是这样的:
img

img

方法一:

​ 分为了上下两个部分,先来看上部分的if,这里就是如果窗口接收到0x111,也就是WM_COMMAND的消息就进入if。517和520分别是0x2050x208,对应的消息是鼠标左键抬起鼠标右键抬起,如果接收到0x205就进入String1的判断流程,具体判断流程如下:

  1. 判断String1是否为空

  2. 不为空则将String1丢到sub_40101E函数当中运算,经过分析为md5

  3. 接着将字符串

    "0kk`d1a`55k222k2a776jbfgd`06cjjb"
    

    SS进行sub_401005的运算,这里其实是xor

  4. String1加密后的值与上面字符串xor后的字符串进行比较,如果不正确则弹出对话框

  5. 如果正确则使用sub_401005将求出的flag输出出来。(这里的v18String1原来的值,而v10为密文)

经过上面的推断已经可以写出exp解出脚本了,
img
img

这里解出String1的值就是123321。然后再使用python解就能解出flag

enc = bytes.fromhex("57 5E 52 54 49 5F 01 6D 69 46 02 6E 5F 02 6C 57 5B 54 4C")
key = b"123321"
for i in range(len(enc)):print(chr(enc[i]^key[i % 6]),end="")# flag{n0_Zu0_n0_die}

​ 到这一步就已经解出来了。

方法二:

​ 有趣的部分并不在上面过程,对于整个程序的逻辑也没有理清楚。String1还不知道是从哪里来的,再来继续往下分析。看到下面的部分
img

这里当消息当中的wParam为104的时候会创建一个Dlg,那么很容易就能猜到是这个About对话框了,而这个DialogFunc就是这个About对话框的回调函数,跟进分析一下:

img

​ 整个回调函数逻辑很简单,就是判断接收到的消息是否是对应的消息,如果是对应的消息就进行相应的操作,而这里的0x202,0x205,0x208,分别就是左键抬起,右键抬起,中键抬起。然后给String1赋值,原来String1是从这里来到。而这个程序算是用鼠标事件激活的一个CrackMe,通过使用鼠标事件来将String1拼接成123321,然后当作输入解出flag,所以我们可以通过这个方法来解出flag,脚本如下:

void decrypt()
{HWND hWnd = FindWindow(NULL, TEXT("find flag"));if (!hWnd){printf("[+] : 没有找到指定窗口\r\n");return;}printf("[+] : 已经找到find flag窗口\r\n");printf("[+] : find flag窗口句柄 = %x\r\n", hWnd);::PostMessageA(hWnd, 0x111, 0x68, 0);   // 打开aboutprintf("[+] : 打开About成功\r\n");Sleep(5000);HWND hAbout = FindWindow(TEXT("#32770"), TEXT("About"));if (!hAbout){printf("[+] : 没有找到指定窗口\r\n");return;}printf("[+] : 已经找到About窗口\r\n");printf("[+] : About窗口句柄 = %x\r\n", hAbout);printf("[+] : 即将发送消息.....\r\n");UINT msg[] = { 0x202,0x208,0x205,0x205, 0x208 ,0x202 };for (int i = 0; i < 6; i++){::SendMessageA(hAbout, msg[i], 0, 0);//Sleep(500);printf("[+] : 已向子窗口发送消息 %x\r\n", msg[i]);}::SendMessageA(hAbout, 0x111, 1, 0);printf("[+] : About窗口处理完成\r\n");::SendMessageA(hWnd, 0x205, 50, 50);printf("[+] : 开始校验...");
}

​ 这个脚本要注意的是,最后向主窗口发送0x205的时候,lParam需要包含鼠标的X和Y坐标,如果直接填0,则设置成(0,0)。在窗口客户区的左上角,需要移动一下位置才能收到这个消息。

​ 通过脚本向指定窗口发送消息,这样就能够让这个题目直接将flag输出出来了:

img

3. [FlareOn5]Ultimate Minesweeper

​ 这是一道C#的程序,打开之后就是一个扫雷:
img

​ 随机点击一个格子,如果踩到雷就会失败:
img

​ 这个题目可以网上找些挂一把梭了,但是这里不准备这样做。

那么直接使用dnSpy来反编译这个程序,进来就看到一个SuccessPopup的方法了,直接跟过去
img

然后通过分析找出调用SuccessPopUp这个函数的地方:
img

这里可以看到判断是判断了当MineField当中的一个值为0的时候就调用这个成功的函数,而上面的if看名称应该就是踩到炸弹的判断了,进去看看这个雷是专门判断的:
img

可以看到是通过遍历MinesPresentMinesVisible来判断的,而这两个东西猜测就是地图,一个是雷,另一个应该是遮住雷的方块。只有当这两个都为true的时候才算踩到雷,那么换个角度其实就是当true是雷和遮挡,分析一个这两个成员的set的方法,看看在哪里初始化:
img

可以看到是在这个MineField当中被初始化的。那么通过动态调试就可以直接看出这个内存当中的雷在什么位置了。那么就直接启动调试:
img

不过经过调试之后发现,这个雷的map全是false,那就是说明这里只是申请了空间,并没有埋雷,那么就继续步过看看什么时候变成的true:
img

​ 没走两步经过这里之后就看到了MinesPresent当中已经被赋值成true了,那么赋值应该就是在这个AllocateMemory当中赋值的,进入里面看看情况:
img

​ 这个就是给雷区赋值的了,注意这里是将展现给玩家的map,行列互换之后再赋值到MinesPresent当中的,所以MinesPresent找出来的坐标映射到真正的地图上时要交换坐标,其次还需要行列+1才是真正的map的位置,直接断点打在这个GarbageCollect,然后就能找到坐标了:

img

img

img

然后就能通过扫雷解出flag了:
img

选中就是flag了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/977501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

API自动化与单元测试

一、API测试 (重点) HTTP(超文本传输协议)详解 为什么说HTTP是超文本传输协议? 这个名称精确地概括了HTTP的核心本质,我们可以拆解来看:超文本“文本” 指的是文字、字符等基本信息。 “超”意味着“超越”或“链…

2025年11月婚纱摄影哪家好推荐:成都西安北京天津太原宁波婚纱摄影推荐拍摄核心优势!

当白纱遇上挚爱,每一个眼神交汇、每一次牵手相拥,都值得被永久珍藏。婚纱照作为爱情最直观的纪念载体,不仅是画面的定格,更是情感的沉淀。三川优觅影像深耕婚纱照领域,以真实、自然、有温度的拍摄理念,为新人记录…

netcore 项目健康检查(healthcheck)

一、netcore healthcheck创建项目$ dotnet new web -n Apricot.HealthCheck.WebApi安装依赖$ dotnet add package AspNetCore.HealthChecks.UI --version 9.0.0 $ dotnet add package AspNetCore.HealthChecks.UI.Cli…

2025年市场上四川住人集装箱厂家最新用户好评榜

2025 年市场上四川住人集装箱厂家最新用户好评榜在绿色建筑理念深入人心、移动空间需求多元化的 2025 年,四川住人集装箱市场迎来爆发式增长,四川住人集装箱、四川移动式住人集装箱、四川工地住人集装箱等核心关键词…

2025年11月干燥机厂家推荐榜:闪蒸喷雾桨叶流化床干燥机厂家行业适配能力!

随着工业生产向高效、低碳、智能转型,干燥机作为物料处理核心设备,其技术成熟度与适配性成为企业降本增效的关键。2025 年,干燥机行业呈现 “节能化、定制化、数字化” 三大趋势,热泵技术、AI 运维系统应用率显著提…

2025年质量好的四川轻集料混凝土热门厂家排行榜单

2025 年质量好的四川轻集料混凝土热门厂家排行榜单在绿色建筑与新型建材产业蓬勃发展的 2025 年,轻集料混凝土凭借 “轻质高强、保温隔热、环保节能” 的核心优势,成为建筑工程、交通基建等领域的刚需材料。四川轻集…

2025年市面上四川净化板厂家最新权威推荐排行榜

2025 年市面上四川净化板厂家最新权威推荐排行榜在医疗、食品、电子等行业洁净需求升级的 2025 年,净化板作为洁净空间的核心建材,其品质稳定性与环保性能直接决定工程质量。四川净化板、四川彩钢净化板、四川硅岩净…

2025年市面上成都房屋拆除建渣清运最新权威推荐排行榜

2025 年市面上成都房屋拆除建渣清运最新权威推荐排行榜在城市更新提速、装修市场蓬勃发展的 2025 年,房屋拆除与建渣清运作为装修前期的关键环节,其专业性、安全性与高效性直接影响后续工程进度。成都拆哥、旧装修房…

RAG 分块策略:从原理到实战优化,喂饭级教程不允许你踩坑

一、引言 为什么同样是做 RAG,有的效果拔群,有的却差强人意?分块(Chunking)策略可能是那个被你忽略的关键环节。 什么是Chunk? AI中的分块是指将大型文档分割成称为“chunk”的较小片段。这些片段可以是段落、句…

2025 年试验箱厂家终极推荐!六大特色厂商破解采购难题,技术与服务双优

在工业制造升级与科研创新提速的背景下,试验箱已成为产品可靠性验证的 “刚需设备”,广泛应用于电子、新能源、航空航天、材料、医疗等多个领域。不同行业、不同规模的企业,对试验箱的温湿度范围、控制精度、容积大…

发现大量关键漏洞的秘诀 - Alex Chapman访谈

本期视频采访了全职漏洞赏金猎人Alex Chapman,他分享了独特的黑客技术风格、源代码审查技巧、高质量漏洞报告撰写方法,以及在桌面应用程序中发现漏洞的专业经验。视频信息标题: 发现大量关键漏洞的秘诀 - Alex Chapm…

【LVGL】微调器部件

引言 仅作笔记使用,无参考价值。 微调器部件(lv_spinbox)微调器部件相关 api 函数示例程序 static lv_obj_t *spinbox; static lv_obj_t *btn1; static lv_obj_t *btn2;static void event_cb(lv_event_t* e) {lv_ob…

2025年下半石材雕刻机/墓碑雕刻机/绳锯机品牌综合推荐指南TOP10

2025年下半年石材雕刻机品牌综合推荐指南:十大优质厂商深度解析 石材雕刻机应用场景 摘要 随着建筑装饰行业和碑石雕刻市场的持续发展,2025年下半年石材雕刻机行业迎来新一轮技术升级浪潮。本文基于市场调研和用户反…

DC-DC转换器DIO8016驱动适配

说明 型号:DIO8016 调试: i2cdump -f -y 2 0x28 开启LDO_EN i2ctransfer -y -f 2 w2@0x28 0x0e 0x0f 开启OUT_DIS i2ctransfer -y -f 2 w2@0x28 0x02 0x0f 设置AVDD1为1.8V i2ctransfer -y -f 2 w2@0x28 0x05 0x30内…

用“分区”来面对超大数据集和超大吞吐量

1. 为什么要分区? 分区(partitions) 也被称为 分片(sharding),通常采用对数据进行分区的方式来增加系统的 可伸缩性,以此来面对非常大的数据集或非常高的吞吐量,避免出现热点。 分区通常和复制结合使用,使得每…

2025年下半年石材雕刻机、墓碑雕刻机、绳锯机厂家综合推荐指南:十大优质厂商深度解析

摘要 随着石材加工行业向智能化、精密化方向发展,2025年下半年石材雕刻机市场呈现出技术升级加速的趋势。本文基于行业调研数据,为您推荐十家值得关注的石材雕刻机品牌(排名不分先后),重点介绍各企业在技术创新、…

2025年11月溶剂油墨、玻璃油墨、水性油墨、UV油墨、溶剂耗材厂家综合推荐指南:十大优质供应商盘点

摘要 随着2025年下半年印刷行业的快速发展,溶剂油墨市场呈现出环保化、高性能化的发展趋势。本文基于市场调研和用户反馈,整理出十家值得关注的溶剂油墨品牌推荐清单,排名不分先后,旨在为行业用户提供参考。特别说…

【多所高校组织】第七届水利与土木建筑工程国际学术会议(HCCE 2025)

第七届水利与土木建筑工程国际学术会议(HCCE 2025) 2025 7th International Conference on Hydraulic, Civil and Construction Engineering (HCCE 2025) 在这里看会议官网详情 大会时间:2025年12月19-21日 大会地点…

【前端从0到1实战】第7篇:构建“深色模式切换”与本地存储 (Dark Mode LocalStorage)

欢迎来到本系列的第7篇。在之前的文章中,我们主要关注组件的内部逻辑。今天,我们将把视野扩大到整个网站的架构。 深色模式(Dark Mode)不仅仅是一个“开关”,它涉及到 CSS 架构设计的核心思想——变量化。同时,为…

价值原语化与LLM协同驱动:法律智能的构建路径与范式探析

价值原语化与LLM协同驱动:法律智能的构建路径与范式探析 摘要:本文旨在探讨人工智能元人文视域下,价值原语化理论与大型语言模型如何协同驱动下一代法律智能体系的构建。研究首先解析了价值原语化作为衔接法律抽象价…