安洵杯 re + 其他部分题解

  • 第11,比较小丑,差了一步
  • 队伍wp应该会发吧,不知道,我先放点跟我有关系的

Re

mobilego

  • so的check看了一会比较南崩,但是看flag的密文形式很像简单位置替换
  • 所以直接输编码表,jeb动调然后得到替换表
  • 解密就行

flag密文的话有string.cmp,直接追踪资源就行

ori = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ab'
key = 'V8L3ObJT4PK2MYZFQBSHUCXWI0AGa51D679NER'
v =   '49021}5f919038b440139g74b7Dc88330e5d{6'
for i in ori:print(v[key.index(i)],end='')
# D0g3{4c3b5903d11461f94478b7302980e958}

在这里插入图片描述

你见过蓝色的小鲸鱼

  • 交给队友的一题:(
  • 题目提示了blowfish加密,那么第一步要做的就是确认代码是否是一个正常的加密
  • 然后密钥UzBtZTBuZV9EMGcz
  • 密文dump出来:11A51F049550E2508F17E16CF1632B47
  • 在线网站直接解密
    [图片]
  • 拼接即可:D0g3{UzBtZTBuZV9EMGczQHRoZWJsdWVmMXNo}

感觉有点点简单

  • 文件sys挺吓人,实际就一个改了的RC4和base64,都不需要运行
  • base改了爆破就行了,逆还得动脑子
#include <bits/stdc++.h>
using namespace std;int encode(char *a1, char *a2, int len)
{int v4; // [rsp+0h] [rbp-88h]int v5; // [rsp+4h] [rbp-84h]char table[80]; // [rsp+10h] [rbp-78h] BYREFstrcpy(table, "4KBbSzwWClkZ2gsr1qA+Qu0FtxOm6/iVcJHPY9GNp7EaRoDf8UvIjnL5MydTX3eh");v4 = 0;v5 = 0;while ( v4 < len ){a1[v5] = table[a2[v4] & 0x3F];a1[v5 + 1] = table[(4 * (a2[v4 + 1] & 0xF)) | ((a2[v4] & 0xC0) >> 6)];a1[v5 + 2] = table[(16 * (a2[v4 + 2] & 3)) | ((a2[v4 + 1] & 0xF0) >> 4)];a1[v5 + 3] = table[(a2[v4 + 2] & 0xFC) >> 2];v4 += 3;v5 += 4;}if ( len % 3 == 1 ){a1[v5 - 2] = '=';a1[v5 - 1] = '=';}else if ( len % 3 == 2 ){a1[v5 - 1] = '=';}string temp = "4Uw=";if (temp[0] == a1[0] && temp[1] == a1[1] && temp[2] == a1[2] && temp[3] == a1[3]){return 1;}return 0;
}
int main()
{string t = "4KBbSzwWClkZ2gsr1qA+Qu0FtxOm6/iVcJHPY9GNp7EaRoDf8UvIjnL5MydTX3eh";char a1[100];char a2[2] = {};for(int i = 0; i < 126; i++){for(int j = 0; j < 126; j++){for(int k = 0;k < 126; k++){a2[0] = i;a2[1] = j;if(encode(a1,a2,2) == 1){cout <<(int)a2[0] <<"," <<(int)a2[1]<<",";return 0;}}}}}
//92,33,123,51,81,51,56,40,58,43,48,64,22,44,51,37,54,4,56,70,81,60,37,74,19,51,57,59,105,39,77,41,51,20,51,70,48,49,50,64,108
  • RC4 64改写
#include <bits/stdc++.h>
typedef unsigned longULONG;
using namespace std;
/*初始化函数*/
void rc4_init(unsigned char*s, unsigned char*key, unsigned long Len)
{int i = 0, j = 0;char k[64] = { 0 };unsigned char tmp = 0;for (i = 0; i<64; i++){s[i] = i;k[i] = key[i%Len];}for (i = 0; i<64; i++){j = (j + s[i] + k[i]) % 64;tmp = s[i];s[i] = s[j];s[j] = tmp;}
}/*加解密*/
void rc4_crypt(unsigned char*s, unsigned char*Data, unsigned long Len)
{int i = 0, j = 0, t = 0;unsigned long k = 0;unsigned char tmp;for (k = 0; k<Len; k++){i = (i + 1) % 64;j = (j + s[i]) % 64;tmp = s[i];s[i] = s[j];s[j] = tmp;Data[k] ^= (i ^ j) & s[(((i ^ j) + s[i] + s[j]) % 64)];}
}int main()
{unsigned char s[64] = { 0 };char key[64] = {0x74, 0x68, 0x65, 0x5F, 0x6B, 0x65, 0x79, 0x5F};char pData[512] = {92,33,123,51,81,51,56,40,58,43,48,64,22,44,51,37,54,4,56,70,81,60,37,74,19,51,57,59,105,39,77,41,51,20,51,70,48,49,50,64,108};unsigned long len = strlen(pData);rc4_init(s, (unsigned char*)key, strlen(key));rc4_crypt(s, (unsigned char*)pData, 90);for(int i = 0; i < len; i++){printf("%c",pData[i]);}return 0;
}//D0g3{608292C4-15400BA4-B3299A5C-704C292D}

PE

  • 有点可惜,但也正常,太久不看的人是这样的
  • 动调call恢复function可以进入主逻辑,加密过程也很简单
  • 就剩一张当时截的图,v5 < 0,8个字节一组进行处理
    在这里插入图片描述
  • 巨佬的脚本
def decrypt(value, key):assert key & 1key |= 1 << 64for i in range(64):if value & 1:value = (value ^ key) >> 1else:value = value >> 1return valueout = bytes.fromhex('4db87629f5a99e595556b1c42f212c30b3797817a8edf7dbe153f0dbe903515e09c100dff096fcc1b5e6629501000000')
flag = b''
for i in range(0, len(out), 8):v = int.from_bytes(out[i: i + 8], 'little')flag += decrypt(v, 0x54aa4a9).to_bytes(8, 'little')print(flag)

牢大想你了

  • 混淆的挺好,下次别混淆了
  • manager/data定位核心dll,dotpeek反编译
  • 找到Tea的密文和密钥,直接解密【花里胡哨的没用代码一大坨】
    在这里插入图片描述
  • 继续交给队友:(
void decrypt(unsigned int v[], unsigned int k[]) {unsigned int v0 = v[0];unsigned int v1 = v[1];unsigned int delta = 2654435769;unsigned int sum1 = delta * 32;int i;for (i = 0; i < 32; i++) {v1 -= ((v0 << 4) + k[2]) ^ (v0 + sum1) ^ ((v0 >> 5) + k[3]);v0 -= ((v1 << 4) + k[0]) ^ (v1 + sum1) ^ ((v1 >> 5) + k[1]);sum1 -= delta;}for (i = 0; i < 4; i++) {printf("%c", (v0 >> (8 * i)) & 0xff);}for (i = 0; i < 4; i++) {printf("%c", (v1 >> (8 * i)) & 0xff);}
}int main() {unsigned int data[] = {3363017039, 1247970816, 549943836, 445086378, 3606751618, 1624361316, 3112717362, 705210466,3343515702, 2402214294, 4010321577, 2743404694};unsigned int key[] = {286331153, 286331153, 286331153, 286331153};int i;for (i = 0; i < sizeof(data) / sizeof(unsigned int); i += 2) {decrypt(&data[i], key);}return 0;
}

ok,re结束

Crypto

010101

  • nc得到三个参数npc
  • 然后看逻辑就是p替换了两个bit输出来了,爆破就行了【这个地方比赛环境当时有点问题,我卡了有半个小时,脚本没动,数据不对】
from Crypto.Util.number import long_to_bytes
from gmpy2 import invertn = 
s = '1101100101111101001110011011001110011101111100000010100010100010110110100000001001110011111...'
c = 
e = 0x10001
s1 = s[:1024]
s2 = s[1024:]
print(s1)
print(s2)
for i in range(len(s1)):if s1[i] == '0':for j in range(len(s2)):if s2[j] == '1':temp = s1[:i] + '1' + s1[i+1:] + s2[:j] + '0' + s2[j+1:]p = int(temp, 2)if n % p == 0:q = n //pphi = (p-1) * (q-1)d = invert(e,phi)m = pow(c,d,n)print(long_to_bytes(m))

Misc

疯狂的麦克斯

  • docx变zip,后面文字是rot22,加上提示base64
  • 直接把列表所有元素rot22然后base64,再放进去zip爆破
s = 
import base64
result = []def sort_by_numbers(item):return int(item[0])def rot22_encrypt(text):encrypted_text = ""for char in text:if char.isalpha():ascii_offset = 65 if char.isupper() else 97encrypted_char = chr((ord(char) - ascii_offset + 22) % 26 + ascii_offset)encrypted_text += encrypted_charelse:encrypted_text += charreturn encrypted_text# 打印结果
for i in s:m = str(base64.b64encode(rot22_encrypt(i).encode()))print(m[2:-1])

在这里插入图片描述

Nahida

  • 逆转搞出图片
# 打开输入文件和输出文件
with open('Nahida!', 'rb') as input_file, open('output.jpg', 'wb') as output_file:# 读取输入文件的所有字节data = input_file.read()for i in data[::-1]:output_file.write(int.to_bytes(((i >> 4) | (i << 4))&0xff) )
  • 然后,交给队友梭
    在这里插入图片描述

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

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

相关文章

CnosDB:深入了解时序数据处理函数

CnosDB 是一个专注于时序数据处理的数据库&#xff0c;旨在解决时序数据存储与分析问题&#xff0c;为用户提供高效的时序数据管理与查询便利。为了实现这一目标&#xff0c;CnosDB 实现了一系列专用函数&#xff0c;快来和CC一起来看看吧&#xff01; CnosDB&#xff1a;深入了…

PHP下载安装以及基本配置

目录 引言 官网 下载 配置 1. 鼠标右键“此电脑”>“属性” 2. 打开高级系统设置 3. 打开环境变量 4. 双击系统变量中的path 5. 新建新的path 6. 将刚刚安装的位置加入环境变量 7. 检查是否安装成功 引言 PHP&#xff08;"PHP: Hypertext Preprocessor"…

Python-基于fastapi实现SSE流式返回(类似GPT)

最近在做大模型对话相关功能&#xff0c;需要将对话内容流式返回给前端页面&#xff08;类似GPT的效果&#xff09;。下面直接说下如何实现&#xff1a; 1.首先导入fastapi和sse流式返回所需要的包 from fastapi import APIRouter, Response, status from sse_starlette.sse …

指针的含义

我们还取前面图片解释的道理&#xff1a; pa表示的意思就是这个地址&#xff0c;并不会显示出10这个数字 *pa就是指针&#xff0c;最后指向了a10&#xff0c;所以他最后程序输出是10 &pa这个含义就是取pa的地址&#xff0c;那么pa是一个虚拟的地址&#xff0c;只是简单的…

鸿蒙开发语言介绍--ArkTS

1.编程语言介绍 ArkTS是HarmonyOS主力应用开发语言。它在TypeScript (简称TS)的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 2.TypeScript简介 自行补充TypeScript知识吧。h…

AndroidStudio无法新建aidl文件解决办法

我用的 AS 版本是 Android Studio Giraffe | 2022.3.1 Build #AI-223.8836.35.2231.10406996, built on June 29, 2023 右键新建 aidl 文件&#xff0c; 提示 (AIDL File)Requires setting the buildFeatures.aidl to true in the build file 解决办法 修改 app 的 build.…

python画图【03】泰坦尼克号数据分析

导包 import numpy as np import pandas as pdimport matplotlib import matplotlib.pyplot as plt %matplotlib inlineplt.rcParams[font.sans-serif] "Microsoft YaHei"import seaborn as sns加载数据集 titanic sns.load_dataset("titanic")titanic…

分布式事务2PC二阶段提交详解

文章目录 概述和概念执行过程和工作流程特点优劣势应用场景总结demo代码样例 概述和概念 二阶段提交&#xff08;2PC&#xff09;是一种用于确保在分布式系统中的所有节点在进行事务提交时保持一致性的算法 二阶段提交&#xff08;Two-Phase Commit&#xff0c;2PC&#xff09…

【c++】string类的使用

目录 一、标准库中的string类 1、简单介绍string类 2、string类的常用接口注意事项 2.1、string类对象的常用构造 2.2、string类对象的容量操作 2.3、string类对象的访问及遍历操作 2.4、string类对象的修改操作 二、string类的模拟实现 一、标准库中的string类 1、简…

听GPT 讲Rust源代码--src/tools(25)

File: rust/src/tools/clippy/clippy_lints/src/methods/suspicious_command_arg_space.rs 在Rust源代码中&#xff0c;suspicious_command_arg_space.rs文件位于clippy_lints工具包的methods目录下&#xff0c;用于实现Clippy lint SUSPICIOUS_COMMAND_ARG_SPACE。 Clippy是Ru…

备份至关重要!如何解决iCloud的上次备份无法完成的问题

将iPhone和iPad备份到iCloud对于在设备发生故障或丢失时确保数据安全至关重要。但iOS用户有时会收到一条令人不安的消息&#xff0c;“上次备份无法完成。”下面我们来看看可能导致此问题的原因&#xff0c;如何解决此问题&#xff0c;并使你的iCloud备份再次顺利运行。 这些故…

rk3588 之启动

目录 uboot版本配置修改编译 linux版本配置修改编译 启动sd卡启动制作spi 烧录 参考 uboot 版本 v2024.01-rc2 https://github.com/u-boot/u-boot https://github.com/rockchip-linux/rkbin 配置修改 使用这两个配置即可&#xff1a; orangepi-5-plus-rk3588_defconfig r…

luceda ipkiss教程 53:在版图上加中文

要在版图上加中文&#xff0c;如&#xff1a; 可以通过如下方法实现&#xff1a; 首先&#xff0c;可以在ppt中加入文本框&#xff0c;在文本框中输入想要加到版图上的中文内容&#xff0c;如&#xff0c;复旦大学&#xff0c;并将文本框存为windows位图。 其次&#xff0c;通…

小狐狸ChatGPT系统 不同老版本升级至新版数据库结构同步教程

最新版2.6.7下载&#xff1a;https://download.csdn.net/download/mo3408/88656497 小狐狸GPT付费体验系统如何升级&#xff0c;该系统更新比较频繁&#xff0c;也造成了特别有用户数据情况下升级时麻烦&#xff0c;特别针对会员关心的问题出一篇操作教程&#xff0c;本次教程…

web架构师编辑器内容-改进字体下拉菜单

前面说到我们可以通过面板配置来更新画布上面的一些属性&#xff0c;如果我们有这样一个需求&#xff1a;在右侧面板配置里面需要查看字体的样式效果我们应该怎么做呢&#xff1f; 我们一开始字体的渲染&#xff1a; const fontFamilyArr [{value: "SimSun","…

Android画布Canvas裁剪clipRect,Kotlin

Android画布Canvas裁剪clipRect&#xff0c;Kotlin private fun mydraw() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.A…

插入排序之C++实现

描述 插入排序是一种简单直观的排序算法。它的基本思想是将一个待排序的数据序列分为已排序和未排序两部分&#xff0c;每次从未排序序列中取出一个元素&#xff0c;然后将它插入到已排序序列的适当位置&#xff0c;直到所有元素都插入完毕&#xff0c;即完成排序。 实现思路…

为什么有的开关电源需要加自举电容?

一、什么是自举电路&#xff1f; 1.1 自举的概念 首先&#xff0c;自举电路也叫升压电路&#xff0c;是利用自举升压二极管&#xff0c;自举升压电容等电子元件&#xff0c;使电容放电电压和电源电压叠加&#xff0c;从而使电压升高。有的电路升高的电压能达到数倍电源电压。…

相机内参标定理论篇------张正友标定法

一、为什么做相机标定&#xff1f; 标定是为了得到相机坐标系下的点和图像像素点的映射关系&#xff0c;为摄影几何、计算机视觉等应用做准备。 二、为什么需要张正友标定法&#xff1f; 张正友标定法使手工标定相机成为可能&#xff0c;使相机标定不再需要精密的设备帮助。…

DockerFile常用保留字指令及知识点合集

目录 DockerFile加深理解&#xff1a; DockerFile常用保留字指令 保留字&#xff1a; RUN&#xff1a;容器构建时需要运行的命令 COPY&#xff1a;类似ADD&#xff0c;拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 …