当前位置: 首页 > news >正文

[ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)

目录

  • 【Misc】misc666
  • 【Crypto】crypto967
  • 【Reverse】re547

【Misc】misc666

在这里插入图片描述
flag{NiuDaoxiaoshi666}

【Crypto】crypto967

m = 696376465415968446607383675953857997
c =75351884040606337127662457946455960228423443937677603718170904462378938882502061014476822055783421908392386804380503123596242003758891619926133807099465797120624009076182390781918339985157326114840926784410018674639537246981505937318380179042568501449024366208980139650052067021073343322300422190243015076307
n =135413548968824157679549005083702144352234347621794899960854103942091470496598900341162814164511690126111049767046340801124977369460415208157716471020260549912068072662740722359869775486486528791641600354017790255320219623493658736576842207668208174964413000049133934516641398518703502709055912644416582457721
G = Zmod(n)
factors = [587, 28142457071, 395710839697]
order = n - 1
m = G(m)
c = G(c)
dlogs = []
for i in factors:
    t = order // i
    y = c ^ t
    g = m ^ t
    dlog = discrete_log(c ^ t, m ^ t)
    dlogs.append(int(dlog))
    print(dlog)
x=crt(dlogs, factors)
print(x)
x=17271504622210389511

在这里插入图片描述

from Crypto.Util.number import *

x = 17271504622210389511
c1 =209941170134628207830310059622280988835086910150451946264595015050300510031560522999562095124692878755896950865676914790595999182721583547184333760954091880805688518459046880395477235753285839380764579025127254060855545
c2 =4803339369764546990337396010353372745379378328671778873584350940089623041410194355125962064067657967062926344955874581199853582279928946579389671271191196
p =6809372619970287379746941806942051353536181082328454067824596651780784704823185066486367854653297514943018290212240504418345108411269306758069486928594027
g =12575636661436726898107254102531343862656456137827822292892883099464907172061178954026138165159168595086335202285503403441736394399853074532771428483593753
k =4521228602593215445063533369342315270631623025219518143209270060218625289087470505221974748605346084266802332207199304586313352026660695691783656769488472

print(long_to_bytes(c1 * pow(c2, -x, p) % p))

在这里插入图片描述

flag{th1s_1s_so_3a2y_rlgh4}

【Reverse】re547

IDA打开后有个_main函数
v27密文↓
在这里插入图片描述
rc4加密:

for ( i = 0; i < 256; ++i )
{
    v26[i] = i;
    v24[i] = v25[i % v3];
}
  
for ( j = 0; j < 256; ++j )
{
    v7 = v26[j];
    v4 = (v7 + v24[j] + v4) % 256;
    v26[j] = v26[v4];
    v26[v4] = v7;
}

v8 = 0;
v9 = 0;

for ( k = 0; k < 42; ++k )
{
    v8 = (v8 + 1) % 256;
    v11 = v26[v8];
    v9 = (v11 + v9) % 256;
    v26[v8] = v26[v9];
    v26[v9] = v11;
    Arglist[k] ^= v26[(unsigned __int8)(v11 + v26[v8])];
}

v12 = 0;
v23 = 0;

tea加密:

do
{
    v13 = 0;
    v14 = *(_DWORD *)&Arglist[8 * v12];
    v22 = &Arglist[8 * v12];
    v21 = &Arglist[8 * v12 + 4];
    v15 = 32;
    v16 = *(_DWORD *)v21;
    
    do
    {
        v13 -= 0x61C88647;
        v14 += (16 * v16 + 0x1234) ^ (v13 + v16) ^ ((v16 >> 5) + 0x5678);
        v16 += ((v14 >> 5) + 0x8265) ^ (v13 + v14) ^ (16 * v14 + 0x4523);
        --v15;
    }
    while ( v15 );
    *(_DWORD *)v22 = v14;
    *(_DWORD *)v21 = v16;
    v12 = v23 + 1;
    v23 = v12;
}
while ( v12 < 5 );

tea只循环5次(40位)
但是程序要我们输入42位
在这里插入图片描述
还剩两位只经过rc4

#include <stdio.h>  
#include <stdint.h>  
#include<string.h>

//加密函数  
void encrypt(uint32_t* v, uint32_t* k)
{
    /* set up */
    uint32_t v0 = v[0], v1 = v[1], sum = 0, i;
    /* a key schedule constant */         
    uint32_t delta = 0x9e3779b9;
    /* cache key */
    uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];
    for (i = 0; i < 32; i++)
    /* basic cycle start */
    {
        sum += delta;
        v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
        v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
    }                                              /* end cycle */
    v[0] = v0; v[1] = v1;
}

//解密函数  
void decrypt(uint32_t* v, uint32_t* k)
{
    /* set up */
    uint32_t v0 = v[0], v1 = v[1], sum = 0x9e3779b9<<5, i;
    /* a key schedule constant */
    uint32_t delta = 0x9e3779b9;
    /* cache key */
    uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];
    for (i = 0; i < 32; i++)
    /* basic cycle start */
    {
        v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
        v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
        sum -= 0x9e3779b9;
    }
    /* end cycle */
    v[0] = v0; v[1] = v1;
}

int main()
{
    uint32_t v[10] = { 0x1C30FE24, 0xA34C7D11, 0x6F106E38, 0x3EBDE0C4, 0x400FC847, 0x752FF41A, 0xF13DDEBA, 0x6C7835C6,
    0xFD3E6948, 0x9DFD7447 };
    uint32_t k[4] = { 0x1234,0x5678,0x4523,0x8265 };
    uint32_t vvv[10];
    for(int i = 0; i < 10;i+=2 )
    {
        uint32_t vv[2] = { v[i],v[i + 1] };
        decrypt(vv, k);
        vvv[i]= vv[0];
        vvv[i + 1] = vv[1];
    }

    for (int k = 0; k < 40; k++)
    {
       printf("%02x",(*((unsigned char*)vvv + k)));
        }

    return 0;
}

运行结果:

8aa09899317f3709336a68c12db9ec3c321d77b99eb9147f005f3dbc3b6e2a2cf901a69ce35bbe80

添加后面没用tea加密的两位:0x66 0x2f
在这里插入图片描述
flag{1f782dbb-7570-46c8-b7a2-f64dfa4383b7}

相关文章:

  • STM32实战总结:HAL之触摸按键
  • 湖仓一体(Lakehouse)是什么?
  • 【测绘程序设计】Excel度(°)转换度分秒(° ‘ “)模板附代码超实用版
  • odoo 视图部分详解(四)
  • Java中对象的打印
  • STARK Low Degree Testing——FRI
  • 基于孤立森林的信用卡欺诈 Python 实战案例,最佳参数选择、可视化等
  • B/S 架构 与 C/S 架构
  • 【JAVAEE框架】Mybatis常用操作(CRUD)
  • 【PCB专题】如何在嘉立创8月1日起的新规则下免费打样
  • ElasticSearch--写入数据的流程(原理)
  • Java 下数据业务逻辑开发技术 JOOQ 和 SPL
  • 嵌入式系统多线程学习笔记
  • 【DaVinci Developer专题】-44-Software Component软件组件的Multiple Instantiation多次实例化
  • Docker 进阶指南(下)- 使用Docker Compose编排多个容器
  • 77. Combinations
  • ComponentOne 2017 V2版本正式发布
  • FastReport在线报表设计器工作原理
  • JavaScript HTML DOM
  • JavaWeb(学习笔记二)
  • Java反射-动态类加载和重新加载
  • k个最大的数及变种小结
  • Linux快速复制或删除大量小文件
  • Median of Two Sorted Arrays
  • Mybatis初体验
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PermissionScope Swift4 兼容问题
  • python3 使用 asyncio 代替线程
  • React Transition Group -- Transition 组件
  • Redis在Web项目中的应用与实践
  • vue 配置sass、scss全局变量
  • 阿里云购买磁盘后挂载
  • 从零开始在ubuntu上搭建node开发环境
  • 读懂package.json -- 依赖管理
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 解决iview多表头动态更改列元素发生的错误
  • 目录与文件属性:编写ls
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 找一份好的前端工作,起点很重要
  • 中文输入法与React文本输入框的问题与解决方案
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #Linux(make工具和makefile文件以及makefile语法)
  • #NOIP 2014# day.1 T2 联合权值
  • (solr系列:一)使用tomcat部署solr服务
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)winform之ListView
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net 垃圾回收机制原理(二)
  • .netcore如何运行环境安装到Linux服务器