第二届CN-fnst re题wp

news2025/2/28 12:12:42

题目附件名称amazingbruteforce

首先查壳,发现有upx壳(主页有教程,这边就不说了),脱掉壳,64位程序,拖进ida64进行反编译,如下图

很简单的逻辑,v5一个数组,v4是一个字符串,进行一个异或函数加密,看似很简单,进入异或加密函数进行查看,注意这边函数传入的第三个参数为16,进入函数如图

这个for循环一共有16次,a2为已知,a1代表数组v5,这边回头数一下数组v5,发现总共是32个十六进制数,那就好办了,两两为一组,正好和这边的16次循环搭配上,这边还有一个注意的点就是,v5数组要倒过来两位两位的取(等会儿看实现代码就知道怎么操作了),像我这种菜鸟选手思路大致就差不多了,可能会写出如下实现代码


#include<iostream>
using namespace std;
int main()
{
	int num[] = { 0x08, 0x05, 0x0a, 0x02, 0x15, 0x23, 0x3e, 0x36, 0x3a, 0x36, 0x2f,
		0x55, 0x31, 0x58, 0x3f, 0x18 };
	char v4[] = "^[a-z]{4}$";
	int len = strlen(v4);
	for (int i = 0; i < 16; i++)
	{
		num[i] ^= v4[i % len];
		printf("%c", num[i]);
	}
	return 0;
}

然后输出的东西显然不是flag,那就是出错了,可是细想一下,思路也没啥问题,然后就进行动调了,发现也不是smc什么的,就卡在这里了,最后问了ai才知道,我们将v4的参数复制下来,问一下ai,会得到如图答复

这是一个正则表达式,这边v4的实际值其实只有四个,这四个值从a~z中取,v5的数据是没有错的,这道题关键点就在这个正则表达式上,那想要求得这个v4数组,爆破就好了,我是用c和c++写的脚本,看别的佬都是python写的,python是要简单一些,代码如下


#include<iostream>
using namespace std;
int main()
{
	int num[] = { 0x08, 0x05, 0x0a, 0x02, 0x15, 0x23, 0x3e, 0x36, 0x3a, 0x36, 0x2f,
		0x55, 0x31, 0x58, 0x3f, 0x18 };
	int n[4];
	int a, b, c, d, m;
	 a = 0x08, b = 0x05, c = 0x0a , d=0x02,m=0x15;
		for (int q = 97; q <= 122; q++)
		{
			n[0] = q;
			for (int w = 97; w <= 122; w++)
			{
				n[1] = w;
				for (int e = 97; e <= 122; e++)
				{
					n[2] = e;
					for (int r = 97; r <= 122; r++)
					{
						n[3] = r;
						a ^= n[0 % 4];
						b ^= n[1 % 4];
						c ^= n[2 % 4];
						d ^= n[3 % 4];
						m ^= n[4 % 4];
						if (a == 'f' && b == 'l' && c == 'a' && d == 'g' && m == '{')  //根据前五位查找flag
						{
							for (int i = 0;; ++i)
							{
								if (i >= 16) {
									break;
								}
								num[i] ^= n[i % 4];
							}
							goto out;
						}
						else
						{
							a = 0x08, b = 0x05, c = 0x0a, d = 0x02, m = 0x15; //这边要赋回原值
						}
					}
				}
			}
		}
		out:
		for (int k = 0; k < 16; k++)
		{
			printf("%c", num[k]);
		}
	return 0;
}

写出来确实很长的代码啊,但是c可能更容易懂吧,最后运行一下次就可得到flag,这边学到的一个知识点,就是这个正则表达式了,确实也是第一次接触到,以后再做到想不通的题,把可疑的参数丢给ai问问也不失为一种好办法。

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

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

相关文章

Python系统教程008-条件判断(二)

知识回顾 1、if语句的基本语法&#xff1f; 2、常用 的比较运算符有哪些&#xff1f; 3、注释的分类以及格式 4、else处理条件不满足的情况 练习&#xff1a; 地板上有n个石子&#xff0c;猫头鹰和小兔子正在玩取石子的游戏&#xff0c;从猫头鹰开始&#xff0c;轮流取石子&a…

爬虫逆向学习(十四):分享一下某数通用破解服务开发经验

阅前须知 这篇博客不是教大家怎么实现的&#xff0c;而且告知大家有这个东西&#xff0c;或者说一种趋势&#xff0c;借此分享自己大致的实现经验。具体的实现我也不好整理&#xff0c;毕竟是在别人的基础上缝缝补补。 前言 使用补环境方式破解过某数的同学都知道&#xff0…

知识分享第二十八天-数学篇一

组合.二项式定理.常见导数 组合 让我们通过一个具体的例子来理解组合&#xff08;Combinations&#xff09;的概念 假设你有一个装有5个不同颜色球的袋子&#xff1a;红、蓝、绿、黄和紫。你想从中随机抽取3个球&#xff0c; 不考虑顺序&#xff0c;那么你可以有多少种不同的…

Kruskal最小生成树算法正确性证明

Kruskal: 每次考虑最短一条边, 如果会形成回路则不选择该边, 如果不会形成回路则选择该边, 直到选出了n-1条边 要点: 每次都选择不会形成回路的最短边 数学归纳法 ① n<2时, 显然成立 ② 设n k时成立, 则当n k1时: 将图划分为 子图A(k) 和 B(1) ∵ n k时成立 ∴ A(k)可…

Liveweb视频汇聚平台支持WebRTC协议赋能H.265视频流畅传输

随着科技的飞速发展和网络技术的不断革新&#xff0c;视频监控已经广泛应用于社会各个领域&#xff0c;成为现代安全管理的重要组成部分。在视频监控领域&#xff0c;视频编码技术的选择尤为重要&#xff0c;它不仅关系到视频的质量&#xff0c;还直接影响到视频的传输效率和兼…

iPhone苹果相册视频怎么提取音频?

在数字时代&#xff0c;视频已成为我们记录生活、分享故事的重要方式。然而&#xff0c;有时候我们只想保留视频中的音频部分&#xff0c;比如一段动人的背景音乐或是一段珍贵的对话。那么&#xff0c;苹果相册视频怎么提取音频呢&#xff1f;本文将介绍三种简单且实用的方法&a…

【图像配准】方法总结

图像配准(Image registration)就是将不同时间、不同传感器&#xff08;成像设备&#xff09;或不同条件下&#xff08;天候、照度、摄像位置和角度等&#xff09;获取的两幅或多幅图像进行匹配、叠加的过程&#xff0c;就是找到1幅图像像素到另1幅图像像素间的空间映射关系它已…

专业140+总分400+北京理工大学826信号处理导论考研经验北理工电子信息与通信工程,真题,大纲,参考书。

考研总分400&#xff0c;专业826信号处理导论&#xff08;信号与系统和dsp&#xff09;140&#xff0c;成功上岸北理工&#xff0c;虽然已经一段时间&#xff0c;但是后劲很大&#xff0c;每每回想还是昨日事&#xff0c;群里同学多次要求分享自己的一些经验&#xff0c;感谢大…

ReactPress最佳实践—搭建导航网站实战

Github项目地址&#xff1a;https://github.com/fecommunity/easy-blog 欢迎Star。 近期&#xff0c;阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress&#xff0c;ReactPress一个基于 Next.js 的博客和 CMS 系统&#xff0c;可查看 demo站点。&#xff08;…

Windows 环境实战开源项目GFPGAN 教程

GFPGAN GFPGAN&#xff08;Generative Facial Prior-GAN&#xff09;是由腾讯ARC&#xff08;Applied Research Center&#xff09;开发的一种实用的真实世界人脸修复算法。它专门设计用于人脸图像的生成和优化&#xff0c;尤其在低质量人脸图像的超分辨率恢复方面表现出色。以…

链表的应用

尾删 int tail_del (linkListPtr S) { if(NULL S || empty(S)) { printf("失败\n"); return 0; } linkListPtr q S; for(int i0 ; i<S->len-1;i) { qq->next; } free(q->next); q->n…

一个小工具

院内感染监控系统 开发工具Delphi7 报表工具FastReport unit U_Ymjg;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, RzButton, ExtCtrls, RzPanel, ImgList, Grids, RzGrids, StdCtrls,RzCmboBx, DB, ADODB;typeTFrm_ym…

Python:程序中如何引用环境变量

应用场景&#xff1a;具有安全性的信息&#xff08;如密钥&#xff09;&#xff0c;为方式代码提交被同时提交到公共环境&#xff08;如git&#xff09;&#xff0c;可以通过环境变量配置后&#xff0c;在代码中直接引用。 优点&#xff1a;安全、复用性强、持久化&#xff08…

电力场景绝缘子缺陷识别分割数据集labelme格式1099张3类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;1099 标注数量(json文件个数)&#xff1a;1099 标注类别数&#xff1a;3 标注类别名称:["brokenpart","brokeninsulator…

C++ -- 哈希表封装实现unordered_map 和 unordered_set

本章内容分为源码看框架讲解和结构模拟实现两部分&#xff0c;源码框架是让我们了解容器结构在设计时的思路&#xff0c;模拟实现才是重点。因此如果在看源码结构式感到疑惑&#xff0c;不妨继续往下看&#xff0c;相信一切都会慢慢了解~ 源码及框架分析 在C98 / SGI-STL30版本…

修改vscode中emmet中jsx和tsx语法中className的扩展符号从单引号到双引号 - HTML代码补全 - 单引号双引号

效果图 实现步骤 文件 > 首选项 > 设置搜索“”在settings.json中修改&#xff0c;增加 "emmet.syntaxProfiles": {"html": {"attr_quotes": "single"},"jsx": {"attr_quotes": "double","…

CSS学习记录12

CSS浮动 CSSfloat属性规定元素如何浮动 CSSclear属性规定哪些元素可以在清除的元素旁边以及在哪一侧浮动。 float属性 float属性用于定位和格式化内容&#xff0c;例如让图像向左浮动到容器的文本那里。 float属性可以设置以下值之一&#xff1a; left - 元素浮动到其容器…

IDEA搭建SpringBoot,MyBatis,Mysql工程项目

目录 一、前言 二、项目结构 三、初始化项目 四、SpringBoot项目集成Mybatis编写接口 五、代码仓库 一、前言 构建一个基于Spring Boot框架的现代化Web应用程序&#xff0c;以满足[公司/组织名称]对于[业务需求描述]的需求。通过利用Spring Boot简化企业级应用开发的优势&…

Redis应用—4.在库存里的应用

大纲 1.库存模块设计 2.库存缓存分片和渐进式同步方案 3.基于缓存分片的下单库存扣减方案 4.商品库存设置流程与异步落库的实现 6.库存入库时"缓存分片写入 渐进式写入 写入失败进行MQ补偿"的实现 7.库存扣减时"基于库存分片依次扣减 合并扣减 扣不了…

25. 深浅拷贝

一、什么是浅拷贝 只对对象的最顶层进行的拷贝称为 浅拷贝。我们可以用 copy 模块中的 copy() 方法实现浅拷贝。 import copya [11, 22, 33] b [44, 55, 66] c [a, b] d copy.copy(c)print(f"c: {c}") print(f"d: {d}") print(f"c d: {c d}&q…