[GUET-CTF2019]encrypt

我自己大致分析的是输入flag然后先 RC4加密再 base64加密,解了一下发现不对。

那就只能仔细分析了,看有没有魔改

嗯,可以动调试试,嗯就是要找其 key 的值 :0x10,0x20,0x30,0x30,0x20,0x10,0x40

aaaaaaaaaa--->dd426c16da58a81d4e1d

还不知道藏哪去了,找到了,还要加一个偏移的

好像真不是 RC4 啊,但看wp:说就是的

嗯,不好分析,一种做法就是直接调试,得到关键的变量值

第一个就是得到 v9 的值

记录每次 edx 的值

最后就是这个类似base64d了

_DWORD *__fastcall sub_4008FA(__int64 a1, int a2, const char *a3, _DWORD *a4)
{int v4; // eaxint v5; // eaxunsigned __int8 v6; // alint v7; // eaxunsigned __int8 v8; // alint v9; // eaxint v10; // edx_DWORD *result; // raxchar v13; // [rsp+2Dh] [rbp-13h]unsigned __int8 v14; // [rsp+2Eh] [rbp-12h]unsigned __int8 v15; // [rsp+2Fh] [rbp-11h]int v16; // [rsp+30h] [rbp-10h]int v17; // [rsp+34h] [rbp-Ch]v16 = 0;v17 = 0;while ( v17 < a2 ){v4 = v17++;v13 = *(_BYTE *)(v4 + a1);if ( v17 >= a2 ){v6 = 0;}else{v5 = v17++;v6 = *(_BYTE *)(v5 + a1);}v14 = v6;if ( v17 >= a2 ){v8 = 0;}else{v7 = v17++;v8 = *(_BYTE *)(v7 + a1);}v15 = v8;a3[v16] = ((v13 >> 2) & 0x3F) + 61;a3[v16 + 1] = ((((int)v14 >> 4) | (16 * v13)) & 0x3F) + '=';a3[v16 + 2] = ((((int)v8 >> 6) | (4 * v14)) & 0x3F) + '=';v9 = v16 + 3;v16 += 4;a3[v9] = (v15 & 0x3F) + '=';}if ( a2 % 3 == 1 ){a3[--v16] = 61;}else if ( a2 % 3 != 2 ){goto LABEL_15;}a3[v16 - 1] = 61;
LABEL_15:v10 = strlen(a3);result = a4;*a4 = v10;return result;
}

下面这是标准base64 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char base64_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";void base64_encode(const unsigned char *input, int length, char *output) {int i, j;for (i = 0, j = 0; i < length;) {uint32_t octet_a = i < length ? input[i++] : 0;uint32_t octet_b = i < length ? input[i++] : 0;uint32_t octet_c = i < length ? input[i++] : 0;uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c;output[j++] = base64_chars[(triple >> 3 * 6) & 0x3F];output[j++] = base64_chars[(triple >> 2 * 6) & 0x3F];output[j++] = base64_chars[(triple >> 1 * 6) & 0x3F];output[j++] = base64_chars[(triple >> 0 * 6) & 0x3F];}for (int k = 0; k < mod_table[length % 3]; k++)output[*output_length - 1 - k] = '=';output[j] = '\0';
}int main() {const char *input = "Hello, World!";char output[32]; // ensure it's large enoughbase64_encode((const unsigned char*)input, strlen(input), output);printf("Base64 Encoded: %s\n", output);return 0;
}

 自己简化一下再分析一下

v16 = 0;v17 = 0;while ( v17 < a2 ){v13=a1[v17++];if(v17>=a2){v6=0;v8=0;
} else {v6=a1[v17++];v8=a1[v17++];
}
v14=v6;
v15=v8;
a3[v16]=((v13>>2)& 0x3f)+61;
a3[v16+1]=((((int)v14 >> 4) | (16 * v13)) & 0x3F) + '=';
a3[v16 + 2] = ((((int)v8 >> 6) | (4 * v14)) & 0x3F) + '=';
v16+=4;
a3[v16+3]=(v15&0x3f)+61;
}
if (a2%3==1){a3[v16]=61;
}else if (a2%3!=2){
v10 = strlen(a3);result = a4;*a4 = v10;return result;
}a3[v16 - 1] = 61;
//别人更好看
v16 = 0;v17 = 0;while (v17 < a2){v13 = a1[v17++];v14 = a1[v17++];v15 = a1[v17++];//取三个字符a3[v16]     = ((          v13 >> 2            ) & 0x3F) + 61;a3[v16 + 1] = ((   (v14 >> 4) | ( v13 << 4)   ) & 0x3F) + 61;a3[v16 + 2] = ((   (v15 >> 6) | ( v14 << 2)   ) & 0x3F) + 61;a3[v16 + 3] =            (v15 & 0x3F)                   + 61;v16 += 4;}//等号填充if (a2 % 3 == 1){a3[--v16] = 61;}else if (a2 % 3 != 2){goto LABEL_15;}a3[v16 - 1] = 61;
LABEL_15:v10 = strlen(a3);result = a4;*a4 = v10;return result;
}
data=[0x5a, 0x60, 0x54, 0x7A, 0x7A, 0x54, 0x72, 0x44,0x7C, 0x66, 0x51, 0x50, 0x5B, 0x5F, 0x56, 0x56,0x4C, 0x7C, 0x79, 0x6E, 0x65, 0x55, 0x52, 0x79,0x55, 0x6D, 0x46, 0x6B, 0x6C, 0x56, 0x4A, 0x67,0x4C, 0x61, 0x73, 0x4A, 0x72, 0x6F, 0x5A, 0x70,0x48, 0x52, 0x78, 0x49, 0x55, 0x6C, 0x48, 0x5C,0x76, 0x5A, 0x45, 0x3D]
flag=''
for i in range(0,len(data),4):flag+=chr((((data[i]-0x3D)&0x3F)<<2)|(((data[i+1]-0x3D)&0x30)>>4))flag+=chr((((data[i+1]-0x3D)&0x0F)<<4)|(((data[i+2]-0x3D)&0x3C)>>2))flag+=chr(((data[i+3]-0x3D)&0x3F)|((data[i+2]-0x3D)&0x03)<<6)
j=0
l=[0x10,0x59,0x9C,0x92,0x06,0x22,0xCF,0xA5,0x72,0x1E,0x45,0x6A,0x06,0xCB,0x08,0xC3,0xE4,0x49,0x5A,0x63,0x0C,0xDF,0xF6,0x5F,0x08,0x28,0xBD,0xE2,0x10,0x15,0x1F,0x6E,0xAA,0x5A,0xCA,0xEC,0x80,0xAF,0x9B,0x16,0xBB,0x3D,0x13,0x2F,0x6A,0xA4,0xC7,0x2E,0xBC,0x4B,0x60,0x9A,0xAF,0xE9,0xCE,0xDA,0x67,0x39,0xBA,0x3B,0x85,0xEB,0xD2,0x6B,0xAB,0x06,0x6B,0x10,0x57,0x2C,0x88,0x70,0xF7,0x4F,0xAA,0x7F,0x12,0x47,0xD6,0xDE,0x74,0xB2,0x1D,0xA4,0xD7,0x76,0x9A,0xE0]
a=list(flag)
flag=''
for i in a:flag+=chr(ord(a[j])^l[j])j+=1
print(flag)

嗯,动静结合,这题感觉很妙啊!

[GUET-CTF2019]encrypt-CSDN博客

buuctf [GUET-CTF2019]encrypt纯静态做法_buuctf encrypt 3-CSDN博客

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

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

相关文章

MobaXterm使用私钥远程登陆linux

秘钥的形式使用MobaXterm 远程连接 linux 服务器 MobaXterm使用私钥远程登陆linux just填写远程主机 不指定用户 勾选使用私钥 选择私钥即可 1.使用秘钥连接 远程linux 服务器的好处 只需要第一次添加秘钥&#xff0c;并输入密码后&#xff0c;以后再连接就不需要再输入密码…

【每日刷题】Day47

【每日刷题】Day47 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 112. 路径总和 - 力扣&#xff08;LeetCode&#xff09; 2. 2404. 出现最频繁的偶数元素 - 力扣&am…

ubuntu20.04安装cmake3.22.1

背景 由于第一套上位机windows clion22 嵌入式ubuntu20.04的开发环境中&#xff0c;ubuntu20.04上安装的是cmake3.22.1, 为了保持一致&#xff0c;需要指定安装的cmake版本。 下载指定版本的cmake 进入cmake官网的download页面&#xff0c;https://cmake.org/download/&…

番外篇 | YOLOv8改进之更换主干网络MobileNetv3 + 添加CA注意力机制

前言:Hello大家好,我是小哥谈。MobileNetv3是一种轻量级网络,采用了深度可分离卷积等轻量化技术,具有较小的模型参数量和计算复杂度,适合在计算能力较弱的设备上运行。本节课就让我们结合论文来对YOLOv8进行组合改进(更换主干网络MobileNetv3 + 添加CA注意力机制),希望…

第06章 数据加载、存储与文件格式

以下内容参考自https://github.com/iamseancheney/python_for_data_analysis_2nd_chinese_version/blob/master/%E7%AC%AC05%E7%AB%A0%20pandas%E5%85%A5%E9%97%A8.md 《利用Python进行数据分析第2版》 用以学习和记录。 输入输出通常可以划分为几个大类&#xff1a;读取文本文…

【Linux学习】进程基础API

下面是有关进程基础API的相关介绍&#xff0c;希望对你有所帮助&#xff01; 小海编程心语录-CSDN博客 目录 1. 僵尸进程与孤儿进程 1.1 孤儿进程 1.2 僵尸进程 2. 监视子进程 2.1 wait() 2.2 waitpid() 3. 执行新程序 exec族函数 4. 守护进程 1. 僵尸进程与孤儿进程…

(5)SK插件

&#xff08;5&#xff09;SK插件 什么是AI插件&#xff1f; 使用人工智能插件的目的是通过利用人工智能能力来增强软件应用程序的功能。人工智能插件可以提供各种功能&#xff0c;如自然语言处理、图像识别、预测分析等。 通过将AI插件集成到应用程序中&#xff0c;您可用为…

通过 Spring 操作 Redis

要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff0c;推荐看通过 Java 操作 redis -- 连接 redis 创建项⽬ 勾选 NoSQL 中的 Spring Data Redis 当然, 把 Web 中的 Spring Web 也勾选⼀下.⽅便写接进⾏后续测试. 配置 redis 服务地址 在 application.…

基于springboot + vue实现工厂车间管理系统项目演示【附项目源码+论文说明】

基于springboot vue实现工厂车间管理系统演示 摘要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜…

springboot+jsp校园理发店美容美发店信息管理系统0h29g

前台管理:会员管理、会员预定、开单点单、收银结帐、技师提成 后台管理:数据维护、物料管理、数据查询、报表分析、系统设置等 灵活的付款方式&#xff0c;支持现金、挂帐、会员卡&#xff0c;同时支持多种折扣方式并可按用户要求设置多种结帐类型善的充值卡管理模块:支持优惠卡…

大创项目推荐 深度学习手势识别 - yolo python opencv cnn 机器视觉

文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…

某东-绑卡

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

Qt5 互动地图,实现无人机地面站效果

一、概述 本文主要通过Qt5opmapcontrol实现一个简单的无人机地面站效果。opmapcontrol是一个比较古老的QT开源地面站库&#xff0c;可选择谷歌地图&#xff0c;必应地图&#xff0c; 雅虎地图&#xff0c;GIS等。可直接使用源码&#xff0c;也可以编译生成库进行调用。实现效果…

Mujoco仿真【xml文件的学习 2】

承接上一篇的博客&#xff1a;Mujoco仿真【xml文件的学习 1】-CSDN博客 我们继续来学习Mujoco仿真中的xml文件&#xff0c;哦豁&#xff0c;gogogo&#xff01; 给出这次的xml文件案例【bimanual_viperx_transfer_cube.xml】&#xff1a; <mujoco><include file&qu…

LitCTF

[LitCTF 2023]enbase64 base 64 里面有一个换表的函数 写代码 #include<stdio.h> #include<string.h> #include<stdlib.h> int main() {char *result; char Destination[65]; int v3[65];int j;int i; char Source[]"ABCDEFGHIJKLMNOPQRSTUVWXYZabcde…

打造高效安全新标杆:智慧楼宇视频智能管理系统的建设探索

大数据、人工智能、5G等技术在城市中的不同应用也让人们看到了数字化和智能化技术赋予城市管理的巨大潜力&#xff0c;为更多城市数字化应用场景的发展带来机遇。在新基建的大背景下&#xff0c;人工智能、物联网等先进技术与基础设施的深度融合&#xff0c;将大力推进电网、楼…

ArcGIS批量更改所有符号的格式

这期谈一下&#xff0c;如何修改所有符号的样式。 比如&#xff0c;我们需要更改下图的面符号位无轮廓的 该如何批量修改的呢&#xff1f; 视频教学吧&#xff1a; ArcGIS批量更改所有符号的格式 ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放-CSDN博客文章浏览阅…

el-input 自动获取焦点

前言&#xff1a; 需求描述&#xff1a;在 Dialog 对话框中 使用 input 组件&#xff1b;当点击按钮&#xff0c;Dialog 对话框显示&#xff0c;且里面的 input 组件要自动获取焦点。因为页面上还存在其他的 input 组件&#xff0c;所以使用 自动获取焦点属性没用&#xff01;&…

基于Java的推箱子游戏设计与实现(论文 + 源码)

【免费】关于基于JAVA的推箱子游戏.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89325018 基于Java的推箱子游戏设计与实现 摘 要 社会在进步&#xff0c;人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。…

Centos7离线安装RabbitMQ教程

目录 安装包准备开始安装1. 创建目录2. 上传文件3. 安装erlang语言4. 安装socat5. 安装rabbitmq6. 启动、停止rabbitmq7. 设置开机启动8. 开启web界面管理工具9. 开启防火墙(root)10. 访问页面11. 附录 安装包准备 &#xff08;1&#xff09;准备RabbitMQ的安装包&#xff08;…