安洵杯 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] BYREF

  strcpy(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 & 1
    key |= 1 << 64
    for i in range(64):
        if value & 1:
            value = (value ^ key) >> 1
        else:
            value = value >> 1
    return value

out = 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 invert

n = 
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 //p
                    phi = (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 97
            encrypted_char = chr((ord(char) - ascii_offset + 22) % 26 + ascii_offset)
            encrypted_text += encrypted_char
        else:
            encrypted_text += char
    return 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) )
  • 然后,交给队友梭
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[c]扫雷

题目描述 扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。 玩家翻开一个非地雷格时&#xff0c;该格将会出现一个数字——提示周围格子中…

C语言沉浸式刷题【C语言必刷题】

1.猜凶手 某地发生了一起谋杀案&#xff0c;警察通过排查确定杀人凶手必为四个嫌疑犯的一个&#xff0c;以下是4个嫌犯的供词。已知&#xff08;请编写代码找出凶手&#xff09; A说&#xff1a;不是我。 B说&#xff1a;是C。C说&#xff1a;是D。D说&#xff1a;C再胡说。 程…

PCIe surprise down异常与DPC功能分析-part2

DPC是PCIe协议中的一项功能&#xff0c;旨在防止由于一个设备的错误而影响到整个系统。当一个PCIe设备检测到严重的、不可恢复的错误时&#xff0c;它可能会触发DPC过程。在这个过程中&#xff0c;PCIe开关会隔离受影响的下游端口&#xff0c;阻止任何进一步的数据传输和请求通…

百分百能遇到的接口自动化测试面试题,看完的现在已经在办理入职了...

1. 什么是接口自动化测试&#xff1f; 答&#xff1a;接口自动化测试是指使用自动化工具对接口进行测试&#xff0c;验证接口的正确性、稳定性和性能等方面的指标。 2. 为什么要进行接口自动化测试&#xff1f; 答&#xff1a;接口自动化测试可以提高测试效率&#xff0c;减…

NGUI基础-三大基础组件之Root组件

NGUI NGUI&#xff08;Next-Gen UI&#xff09;是一款用于Unity游戏引擎的UI插件&#xff0c;它提供了一套功能强大、灵活易用的界面开发工具。在NGUI中&#xff0c;Root&#xff08;根节点&#xff09;是一个重要的概念。 基础组件之Root Root是NGUI中的最高层级节点&#…

生物神经网络衍生出的算法

一个生物神经网络的基本结构&#xff1a; 生物神经网络由大量神经元组成&#xff0c;这些神经元之间通过突触相互连接。神经元可以接收来自其他神经元的信号&#xff0c;并根据信号的强度和类型来调整自己的输出信号。这种神经元之间的相互连接和信号传递形成了生物神经网络的基…

【汽车取证篇】GA-T 1998-2022《汽车车载电子数据提取技术规范》(附下载)

【汽车取证篇】GA-T 1998-2022《汽车车载电子数据提取技术规范》&#xff08;附下载&#xff09; GA-T 1998-2022《汽车车载电子数据提取技术规范》标准—【蘇小沐】 总结 公众号回复关键词【汽车取证】自动获取资源合集&#xff0c;如链接失效请留言&#xff0c;便于…

博主自制丨免费下载丨免费使用丨仅用于测试

链接&#xff1a;点我立即下载 提取码&#xff1a;0j6h

贴片晶振无源石英谐振器直插晶振

贴片晶振 贴片晶振3.579M~25MHz无源石英谐振器直插晶振 文章目录 贴片晶振前言一、贴片晶振3.579M~25MHz无源石英谐振器直插晶振二、属性三、技术参数总结前言 贴片晶振(Surface Mount Crystal Oscillator)是一种采用表面贴装技术进行安装的晶振。它的主要特点是封装小巧、安…

什么是DDOS,遇到DDoS攻击有什么办法处理

一、DDoS概述 DDoS攻击是由DoS攻击发展而来的&#xff0c;根据攻击原理和方式的区别&#xff0c;可以把DDoS攻击分为两个阶段&#xff0c;即从传统的基于网络层的DDoS攻击和现阶段较为常见的基于应用层的DDoS攻击&#xff0c;这两类攻击方式各有特点&#xff0c;都对网络的安全…

为什么要使用vite

vue ——&#xff09;webpack 全部读取完毕才显示&#xff1a; vite:只读取修改的部分&#xff0c;速度比较快

P6 音频格式—— AAC

目录 前言 01 AAC是什么&#xff1f; 02 为什么需要进行AAC进行音频压缩处理&#xff1f; 03 AAC的特点以及优势 04 AAC格式详解&#xff1a; 4.1. ADIF的数据结构&#xff1a; 4.1.1 ADIF Header具体的表格: 4.2. ADTS的结构&#xff08;重点&#xff09;&#xff1a; …

esp32使用lvgl,给图片取模显示图片

使用LVGL官方工具。 https://lvgl.io/tools/imageconverter 上传图片&#xff0c;如果想要透明效果&#xff0c;那么选择 输出格式C array&#xff0c;点击Convert进行转换。 下载.c文件放置到工程下使用即可。

Autojs 实践-抖音极速版福袋助手

前言 好久没更新博客了&#xff0c;最近做了个抖音极速版福袋脚本&#xff0c;想看看能不能自动抢到&#xff0c;于是在仿照其他脚本UI做了一个&#xff0c;哈哈。利用上班时间让它自己跑&#xff0c;测试大概2-3天&#xff0c;一个福袋没抢到(也不知道是不是被检测到了)&…

jQuery实现响应式瀑布流 - 实现灯箱效果

在这之前&#xff0c;有写过一篇关于实现瀑布流的文章&#xff0c;后期有人留言提出需要添加灯箱效果的功能&#xff0c;所以这次则讲述下如何实现此功能。由于该篇接上篇写的&#xff1a;jQuery实现响应式瀑布流效果&#xff08;jQueryflex&#xff09;_jquery瀑布流插件-CSDN…

python的import功能,你需要了解的导入机制

1 基本概念 概念 解释 import 即导入&#xff0c;方式就是在import位置将代码文件拷贝过去。 模块&#xff08;module&#xff09; python中一个.py文件定义为一个模块 常用的几种模块导入方式&#xff1a; import module_nameimport module_name.function_nameimport mod…

听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…

Web Components入门不完全指北

目前流行的各类前端框架&#xff0c;不管是react, angular还是vue&#xff0c;都有一个共同点&#xff0c;那就是支持组件化开发&#xff0c;但事实上随着浏览器的发展&#xff0c;现在浏览器也原生支持组件式开发&#xff0c;本文将通过介绍Web Components 的三个主要概念&…

分析冒泡排序

#include <stdio.h> int main() { int arr[10] { 2,5,1,3,6,4,7,8,9,0 }; int i 0; int j 0; for( i 0 ;i < sizeof(arr)/sizeof(arr[0]) - 1 ; i) 红色的代表数组一共有n个元素&#xff0c;则需要n-1次 { for( j 0 // 这里可以让数组从哪一…

设计模式--职责链模式

实验15&#xff1a;职责链模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解职责链模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用职责链模式解决实际问题。 [实验任务]&#xff1a;财务审批 某物资管理系统…