BUUCTF-RE-[2019红帽杯]easyRE

news/2025/2/24 13:37:00/文章来源:https://www.cnblogs.com/ylin07/p/18733820

这道题很难,但是并不难在他的解题要用到的方法和技巧上,而是难在它的题目设计。做的过程中真的有一种闯关的感觉,非常有趣
首先我们通过对字符的定位我们可以来到sub_4009C6函数

__int64 sub_4009C6()
{__int64 result; // raxint i; // [rsp+Ch] [rbp-114h]__int64 v2; // [rsp+10h] [rbp-110h]__int64 v3; // [rsp+18h] [rbp-108h]__int64 v4; // [rsp+20h] [rbp-100h]__int64 v5; // [rsp+28h] [rbp-F8h]__int64 v6; // [rsp+30h] [rbp-F0h]__int64 v7; // [rsp+38h] [rbp-E8h]__int64 v8; // [rsp+40h] [rbp-E0h]__int64 v9; // [rsp+48h] [rbp-D8h]__int64 v10; // [rsp+50h] [rbp-D0h]__int64 v11; // [rsp+58h] [rbp-C8h]char v12[32]; // [rsp+60h] [rbp-C0h] BYREFchar v13[32]; // [rsp+90h] [rbp-90h] BYREFint v14; // [rsp+B0h] [rbp-70h]char v15; // [rsp+B4h] [rbp-6Ch]char v16[72]; // [rsp+C0h] [rbp-60h] BYREFunsigned __int64 v17; // [rsp+108h] [rbp-18h]v17 = __readfsqword(0x28u);qmemcpy(v12, "Iodl>Qnb(ocy", 12);v12[12] = 127;qmemcpy(&v12[13], "y.i", 3);v12[16] = 127;qmemcpy(&v12[17], "d`3w}wek9{iy=~yL@EC", 19);memset(v13, 0, sizeof(v13));v14 = 0;v15 = 0;sub_4406E0(0LL, v13, 37LL);v15 = 0;if ( len_0(v13) == 36 ){for ( i = 0; i < (unsigned __int64)len_0(v13); ++i ){if ( (unsigned __int8)(v13[i] ^ i) != v12[i] ){result = 4294967294LL;goto LABEL_13;}}printf("continue!");memset(v16, 0, 65);sub_4406E0(0LL, v16, 64LL);v16[39] = 0;if ( len_0(v16) == 39 ){v2 = sub_400E44((__int64)v16);v3 = sub_400E44(v2);v4 = sub_400E44(v3);v5 = sub_400E44(v4);v6 = sub_400E44(v5);v7 = sub_400E44(v6);v8 = sub_400E44(v7);v9 = sub_400E44(v8);v10 = sub_400E44(v9);v11 = sub_400E44(v10);if ( !(unsigned int)sub_400360(v11, (__int64)off_6CC090) ){printf("You found me!!!");printf("bye bye~");}result = 0LL;}else{result = 4294967293LL;}}else{result = 0xFFFFFFFFLL;}
LABEL_13:if ( __readfsqword(0x28u) != v17 )sub_444020();return result;
}

我们看到"you found me!!!!"下意识的以为我们的flag就在旁边我们往上看看到一个Base加密,下意识的去解开它,结果得到一个网站

打开一看,发现是一篇关于出题的帖子,仔细一看,废了,被骗了

也就是说这个思路有问题,我们继续观察程序,发现上面有一段异或加密,我们尝试解密一下

if ( (unsigned __int8)(v13[i] ^ i) != v12[i] )

我们已知v12可以尝试解密v13

cipher = "Iodl>Qnb(ocy\0y.i\0d`3w}wek9{iy=~yL@EC"
flag = ""
for i in range(len(cipher)):flag += chr(ord(cipher[i])^i)
print(flag)


感觉还是不行啊,但是好歹拿到了一个提示密文的前四位是flag,到这里我们就不知道怎么办了,看看别人的帖子,提示我们要看看其他的函数有没有什么线索
我们注意到一个函数里面的信息:

unsigned __int64 sub_400D35()
{unsigned __int64 result; // raxunsigned int v1; // [rsp+Ch] [rbp-24h]int i; // [rsp+10h] [rbp-20h]int j; // [rsp+14h] [rbp-1Ch]unsigned int v4; // [rsp+24h] [rbp-Ch]unsigned __int64 v5; // [rsp+28h] [rbp-8h]v5 = __readfsqword(0x28u);v1 = sub_43FD20(0LL) - qword_6CEE38;for ( i = 0; i <= 1233; ++i ){sub_40F790(v1);sub_40FE60();sub_40FE60();v1 = sub_40FE60() ^ 0x98765432;}v4 = v1;if ( ((unsigned __int8)v1 ^ byte_6CC0A0[0]) == 'f' && (HIBYTE(v4) ^ (unsigned __int8)byte_6CC0A3) == 'g' ){for ( j = 0; j <= 24; ++j )sub_410E90((unsigned __int8)(byte_6CC0A0[j] ^ *((_BYTE *)&v4 + j % 4)));}result = __readfsqword(0x28u) ^ v5;if ( result )sub_444020();return result;
}

前面的v1是生成的key,很明显加密是利用key的前四位进行加密。而密文就是byte_6CC0A0,其长度刚好是25位,由此我们可以写出我们的加密脚本:

cipher = [0x40, 0x35, 0x20, 0x56, 0x5D, 0x18, 0x22, 0x45, 0x17, 0x2F, 0x24, 0x6E, 0x62, 0x3C, 0x27, 0x54, 0x48, 0x6C, 0x24, 0x6E, 0x72, 0x3C, 0x32, 0x45, 0x5B]
key = [0x40^ord('f'),0x35^ord('l'),0x20^ord('a'),0x56^ord('g')]
flag = ""
for i in range(len(cipher)):flag += chr(cipher[i]^(key[i%4]))
print(flag)

这里注意因为我们原来的前四位"flag"是key[4]和密文异或得到的,所以我们需要重新异或一遍得到key
综上解出本体

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

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

相关文章

2025年免费项目管理软件哪家强?5款零成本工具实测报告

在项目管理领域,众多团队尤其是初创企业和小型项目组,都渴望找到功能实用且零成本的软件来助力项目推进。2025 年,有 5 款免费项目管理软件表现突出,它们分别是禅道、Trello、Asana、Redmine 以及国内新兴的钉钉项目管理相关功能,下面将为大家带来详细的实测报告。一、禅道…

BT151-ASEMI电机控制专用BT151

BT151-ASEMI电机控制专用BT151编辑:ll 在当今科技飞速发展的时代,电子元件宛如繁星般点缀着各个领域,而 BT151 单向可控硅无疑是其中一颗极为耀眼的明星。 BT151-ASEMI电机控制专用BT151 型号:BT151 品牌:ASEMI 封装:TO-220F 正向电流:12A 反向电压:600V~800V 引脚数量…

销售必备60招

脸皮厚、嘴巴甜、手脚勤。先放下面子努力拿下客户,提高收入,往后在亲友面前抢着买单时,面子自然就有了。干销售得有狼性、野性和匪性,还要有胆量。推销是常识的运用,但只有将经实践验证的理念用于积极的客户身上,才会产生效果。想要取得惊人成绩,必须先做好枯燥乏味的准…

【H2O系列】关于H2O和OmniH2O代码安装及代码解读摘要`

0. 前言 这篇博客主要用于过程记录H2O代码部分的参数解读部分。 一方面便于日后自己的温故学习,另一方面也便于大家的学习和交流。 如有不对之处,欢迎评论区指出错误,你我共同进步学习! 1. 论文&项目 项目地址:https://omni.human2humanoid.com/ 我自己总结的论文摘要…

1小时搭建好的智能车间生产看板长什么样?

大家一提到生产看板搭建,可能脑袋里第一反应就是“哎,这个得花大钱买专业软件吧”或者“搭建起来肯定超级复杂”。 其实,真没那么难! 只要找对方法,学会用对工具,搭建一套生产看板其实很简单。 那天,我就亲自试了一下,结果不到两三小时,就做出了一套智能生产看板。 但…

MCN公司如何打造爆款内容?内容创新与品质提升的秘诀

MCN(多频道网络)管理优化是一个涉及多个方面的复杂过程,旨在提升MCN公司的运营效率、增强市场竞争力并实现可持续发展。以下是一些关键的MCN管理优化策略: 一、市场定位与品牌建设 精准市场定位 ○ 深入了解目标受众,包括他们的兴趣、需求和行为模式。 ○ 对自身资源和优势…

JavaScript代码混淆入门

JavaScript代码混淆是一种提升Web应用安全性的策略,旨在使代码难以阅读和理解,从而增加逆向工程的难度。这对于保护知识产权、防止抄袭及减少恶意攻击尤为重要。本文将深入浅出地介绍JavaScript代码混淆的基础概念、重要性、主要方法以及实际应用技巧。 JavaScript代码混淆的…

【解决Deepseek服务器繁忙问题】Chatbox + 硅基流动API调用deepseek-R1满血版教程,搭建本地AI助手

1. 解决Deepseek服务器繁忙问题,无需等待使用Deepseek:Chatbox本地部署 + 硅基流动API调用,绕过官方限流无限速调用 2. 两个简单步骤:从配置到运行全部有截图​ 一、硅基流动官网注册 + 获取密钥 官网链接:https://cloud.siliconflow.cn/i/kKzwdArg填写手机号,获取验证码…

LLM大模型:kimi k1.5 VS deepseek R1

2025春节期间IT圈最火爆的莫过于deepseek了,R1模型利用reinforcement learning掀起了滔天巨浪,一时间deepseek无人不知,无人不晓!但其实和R1同一时间发布的还有kimi k1.5,也是通过强化学习提升reasoning性能的,但可能是因为deepseek做了部分开源,而kimi没有,导致两者的热…

创建WinPE维护系统

电脑出现硬件问题啦,想使用以前备份实现恢复,希望成功....准备工作,做一个WinPE:下载: https://learn.microsoft.com/en-us/windows-hardware/get-started/adk-install#download-the-adk-101261002454-december-2024 (时间久远,有可以访问不到原有的内容)然后安装:安装…

用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用

作者:小鱼 引言 通义灵码是我一直使用的编码协助工具,我也愿称之为国内程序员的”饭搭子”。 通义灵码,作为国内首个 AI 程序员,从最开始的内测到公测,再到通义灵码正式发布第一时间使用,再到后来使用企业定制版的通义灵码,再再再到现在通义灵码2.0,我可以说“用着”通…

Esp32_Link调试笔记(Vol.3)

这是一个标题 前面两章网上大多都有教程且难度不大,重点是记录学习一下@FASTSHIFT大佬的"页面生命周期管理"和"消息订阅发布框架"。当然LVGL API从8.3升级至了9.2。 当然接下来的程序是基于屏幕正常显示,触摸驱动正常情况下。(即显示方向与期望相同,滑…