Mini L-CTF 2025 WP

news/2025/9/26 19:18:48/文章来源:https://www.cnblogs.com/LSXXX/p/19110927

s1gn1n

ida打开发现存在花指令

在这里我一开始犯了一个错误我把jz和jnz进行nop没有nop C7
解释下为什么C7也要nop,因为把前面的跳转nop留下单独一条C7,CPU会继续往下读取字节,形成一个完整的指令。后面的正常的代码会当作 C7 指令的操作数去解码/执行 → 指令流被破坏、程序会异常或崩溃。

int __cdecl sub_4014D0(int a1)
{int v2; // [esp+8h] [ebp-68h]int v3; // [esp+Ch] [ebp-64h]unsigned int j; // [esp+10h] [ebp-60h]int v5; // [esp+18h] [ebp-58h]unsigned int i; // [esp+20h] [ebp-50h]int v7; // [esp+24h] [ebp-4Ch] BYREFunsigned int v8; // [esp+28h] [ebp-48h] BYREFchar v9[64]; // [esp+2Ch] [ebp-44h] BYREFmemset(v9, 0, sizeof(v9));v7 = 0;v2 = sub_4012E0(a1);sub_401470(v2, v9, &v7);                      // 中序遍历v5 = sub_401100(v9, &v9[strlen(v9) + 1] - &v9[1], &v8);// base64for ( i = v8 - 1; i; --i ){*(i + v5) ^= *(i + v5 - 1);*(i + v5) ^= byte_404060[i];}v3 = -28;for ( j = 0; j < v8; ++j )v3 = v3 + *(j + v5) - 1;return v3;
}
for ( i = v8 - 1; i; --i ){*(i + v5) ^= *(i + v5 - 1);*(i + v5) ^= byte_404060[i];}

得到x[i]=x[i]⊕x[i−1]⊕k[i]
其中:

  • x[i] 表示处理后的字节
  • k[i]=byte_404060[i]
v3 = -28;
for (j = 0; j < v8; ++j)v3 = v3 + *(j + v5) - 1;

得到

所有项展开得到

因为循环没有处理第一项它的形式是
x[0]⊕k[0]
所以最终的求和形式为:

因为它把v3当做求和值来进行返回,我们要让函数不进行jnz跳转,所以当v3的值为0时才不会跳转

补充:
jnz为0继续执行下一条指令,不为0执行跳转

因为Sum(x[i]^x[i-1]^k[i])+x[0]^k[0]==0 可以逆推出v9

exp

k = [  88, 105, 123, 6, 30, 56, 44, 32, 4, 15,  1, 7, 49, 107, 8, 14, 122, 10, 114, 114,  38, 55, 111, 73, 33, 22, 17, 47, 26, 13,  60, 31, 43, 50, 26, 52, 55, 127, 3, 68,  22, 14, 1, 40, 30, 104, 100, 35, 23, 9,  61, 100, 106, 105, 99, 24, 24, 10, 21, 112  
]  x = [0] * len(k)  
x[0] = k[0]  for i in range(1, len(k)):  x[i] = x[i-1] ^ k[i]  print("还原出来的 v9 数值序列:")  
print(x)  # 尝试转成 ASCIIprint("对应的 ASCII 字符串:")  
print("".join(chr(c) if 32 <= c < 127 else '.' for c in x))
X1JLRjFfbmlkZ197MG5GaV9pQGVycnRMfTNzM21ucmlDZ2VubkV2X1RJRXM=

进行base64解密得到
RKF1_nidg3s3mnriCgennEv_TIEs

利用加密前后字符位置的映射,还原目标正确位置

flag1 = []
flag2 = "_RKF1_nidg_{0nFi_i@errtL}3s3mnriCgennEv_TIEs"
s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr"
s2 = "fPgHhQiDjRkIlSmBnToJpUqErVKWAXLYFZMaCbNcGdOe"for i in range(44):c = s1[i]index = s2.index(c)flag1.append(flag2[index])
print("".join(flag1))# miniLCTF{esrevER_gnir33nignE_Is_K1nd_0F_@rt}

x96re

  v9 = 0;v10 = 0;v11 = 0;v12 = 0;v13 = 0;v14 = 0;v15 = 0;v16 = 0;v17 = 0;v18 = 0;v19 = 0;v20 = 0;v21 = 0;v22 = 0;v6[0] = 0x35323032;v6[1] = 0x696E696D;v6[2] = 0x6674636C;v6[3] = 0x21212121;                           // 2025minilctf!!!!*s = 0;v24 = 0;v25 = 0;v26 = 0;v27 = 0;v28 = 0;v29 = 0;v30 = 0;v31 = 0;v32 = 0;v33 = 0;v34 = 0;v35 = 0;v7[0] = 0xDCBEE7D4;v7[1] = 0x78FB2439;v7[2] = 0xC06E8000;v7[3] = 0xD3C34A2C;v7[4] = 0xF53837D5;v7[5] = 0xA9C8D88D;v7[6] = 0x20CBDAE5;v7[7] = 0x2551D478;puts("please input flag:");if ( !fgets(s, 50, stdin) )goto LABEL_7;v5 = strlen(s);if ( v5 ){if ( s[v5 - 1] == 10 )s[--v5] = 0;}if ( v5 == 32 ){
LABEL_7:init();whathappened();                             // xor 0x4cencode_fun(0x20u, v6, s, v8);               // sm4for ( i = 0; i <= 0x1Fu; ++i ){if ( *(v8 + i) != *(v7 + i) ){printf("try again~~~");return 1;}}printf("congratulation!!!");return 0;}else{printf("Invalid length!got %zu\n", v5);return 1;}
}

分析代码知道whathappened()先进行了运算,encode_fun()后面进行了sm4

动调拿到whathappened()函数的内容,进行与0x4c的异或,正常的范围为0-31但是索引计算公式是 (counter - 1),实际被异或的索引范围是:-1-30所以最后两个字节不进行异或。


flag为3ac159d665b4ccfb25c0927c1a23edb3

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

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

相关文章

美食网站开发与设计任务书国外移动端网站模板

近日&#xff0c;在 2022 云栖大会龙蜥峰会 eBPF & Linux 稳定性专场上&#xff0c;来自 eBPF 技术探索 SIG Maintainer 、浙江大学的郑昱笙分享了《eunomia-bpf&#xff1a;eBPF 轻量级开发框架》技术演讲&#xff0c;以下为本次演讲内容&#xff1a; 大家好&#xff01;…

电子商务网站建设案例wordpress更改作者信息

我们上一章简单先了解了ribbonx的基本内容,以及使用举例实现自己修改ribbox的内容,本章紧接上一章,先讲解一下ribbonx的button控件。 在功能区的按钮中,可以使用内置图像或提供自已的图像,可以指定大按钮或者更小的形式,添加少量的代码甚至可以同时提供标签。此外,可以利…

K8S APIServer压力高,导致控制器Leader续约失败而重启问题

K8S APIServer压力高,导致控制器Leader续约失败而重启问题 下图是控制器Leader成功续约的日志。 这中间续约卡住了,没有成功续约的日志。从最后一次成功续约日志到重启日志,中间有2分半钟(21:07:22-23:10:03). …

【2025-09-24】连岳摘抄

23:59信任他人是一种理性、善良、有效的选择。相信人性的光明,怀抱善意与人交往,试着多给他人些理解、体谅,我们自己也能从这段关系中得到正面的回馈与成长。——彭凯平一个孩子养得好,他的未来是无限的。两重无限…

详细介绍:基于STM32F103C8T6与HC-08蓝牙模块实现手机连接方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

外贸网站建设服务商学编程去哪个培训机构好

5 AGENTS VLN代理根据其核心特征和技术方法可分为四种主要类型:基于表示学习、基于决策和策略学习、面向任务和数据驱动。这种分类反映了VLN代理在处理多模式信息、执行复杂推理、解决数据短缺和适应环境变化方面的独特策略。每一类代理都为VLN任务的特定方面提供了解决方案…

8K 视频修复提速 50%!Topaz Video AI 7.0.0 实战指南:AI 增强 + 本地化模型 + GPU 加速全解析

作为开发者、内容创作者或影视后期从业者,你是否常被低分辨率视频模糊、老素材噪点多、高帧率转换耗时等问题困扰?Topaz Labs 推出的Topaz Video AI 7.0.0,凭借革命性深度学习算法与本地化技术升级,直接破解视频质…

Qwen 发布高精度实时音视频同传模型;AirPods 实时翻译功能新增中文丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度…

vivo 浏览器福利体系架构演进之路

vivo 浏览器为应对多场景金币激励需求及旧架构流量、IO等痛点,升级福利中心架构。服务层面拆分流量与业务,打造金币集散中心;数据层面分库分表、拆解大表并优化流水设计;通过仲裁系统和软事务保障数据一致性。改造…

2024JCR最新完整版期刊名单!【附带21-23年完整版表格】

2025年6月,2024JCR正式发布(注:2025年发布的是2024IF),最新完整版表格已经输出,感兴趣可直接获取了解! CA-A CANCER JOURNAL FOR CLINICIANS的IF腰斩,但凭借232.4的高分仍然高居榜首。其次是两本Nature综述子刊…

ESP8266+CH340+SG90舵机远程控制开关

因为晚上不想下去关灯,所以打算搞一个可以替代手关灯的操作,最后采用控制舵机的方式实现,物理层面实现远程开关 所需硬件ESP8266 是一款高性价比、低功耗的wifi模块,主要作用是使设备接入wifi网络,提供 GPIO、UAR…

python 数组的赋值和copy 和deepcopy

python 数组的赋值和copy 和deepcopy说明白这三个的区别. 数组的=是传指针 copy是最外层传值, 内层数组传指针, deepcopy是内外层全部传值. 所以如果要最稳妥的复制, 就用deepcopy. 他的字面含义也是, 每一个深度都进行…

套模板的网站为什么排名做不上去企业管理官网登录入口

【动态规划】抄近路 时间限制: 1 Sec 内存限制: 64 MB 提交: 105 解决: 68 [提交] [状态] [命题人:admin] 题目描述 “最近不知道怎么回事&#xff0c;感觉我们这个城市变成了一个神奇的地方&#xff0c;有时在路上走着走着人就消失了&#xff01;走着走着突然又有人出现了&…

【ACM出版、连续三届EI检索】第四届人工智能与智能信息处理国际学术会议(AIIIP 2025)

第四届人工智能与智能信息处理国际学术会议(AIIIP 2025) 2025 4th International Conference on Artificial Intelligence and Intelligent Information Processing 在这里看会议官网详情 会议亮点抢先看! 线下开会…

08_多线程编程

同步和互斥:互斥:多线程中互斥是指多个线程访问同一资源时同时只允许一个线程对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 同步:多线程同步是指在互斥的基础上(大…

VisionPro学习笔记- PMAlignTOOL

起因 之前按摸过Halcon、opencv、还有款国产的叫sci什么的图形化的视觉软件,大名鼎鼎的VisionPro还没摸过,于是,学一下,记个笔记。 PMAlignTOOL CogPMAlignTool这个名称是几个英文单词缩写组合而成,下表是它的完整…

FeignClient提示No subject alternative DNS name matching配置SSL

feignClient如果请求的是https域名地址,jvm信任库未添加证书的话可能会提示证书主机名不匹配问题 添加以下配置可忽略 @Slf4j public class FeignSSLTrustAllConfig {@Beanpublic Client feignClient() {return new C…

深入解析:SQL server 2022下载安装详细教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

公司做网站多少钱漯河市住房和乡镇建设局官方网站

原标题&#xff1a;小白开始学Python最著名的绘图库 这是菜鸟学Python的第101篇原创文章 数据分析里面可视化是重要的环节&#xff0c;辛苦把数据采集&#xff0c;然后经历了很多工序的清洗之后&#xff0c;最后要展现给用户&#xff0c;最好的方法就是数据可视化。数据可视化是…

【组合数学基础9】Catalan数(卡特兰数)笔记

https://www.bilibili.com/video/BV14P411T7TZ n个+1 和n个-1的序列问题这个是本质的模型折线图证明方法(对称思想值得学习) 括号序列计数问题: 由 n 对括号构成的合法括号序列数为 \(C_n\)\(n+1\)个数要加 \(n\) 对…