ISCC2024个人挑战赛WP-MISC

(非官方解,以下内容均互联网收集的信息和个人思路,仅供学习参考) 

where is flag

下载附件,解压出pyc,然后到下面网址反编译

python反编译 - 在线工具

记住c,是密文,

Key是 k5fgb2eur5styn0lve3t6r1s

AES ecb解密

解密网址:https://www.lddgo.net/encrypt/aes

成语学习

压缩包密码:57pmYyWt

解压后把解压出的文件改后缀为.zip,再次解压,O7avZhikgKgbF下有个flag.txt,去https://www.mklab.cn/utils/hmac解密,成语是明文,密钥是食物

Hash包上ISCC{}

钢铁侠在解密

解题思路

把图片放进工具,可以提取c1 c2

然后生成文件

打开小字条可以ne

然后写脚本

def HGCD(a, b):

    if 2 * b.degree() <= a.degree() or a.degree() == 1:

        return 1, 0, 0, 1

    m = a.degree() // 2

    a_top, a_bot = a.quo_rem(x ^ m)

    b_top, b_bot = b.quo_rem(x ^ m)

    R00, R01, R10, R11 = HGCD(a_top, b_top)

    c = R00 * a + R01 * b

    d = R10 * a + R11 * b

    q, e = c.quo_rem(d)

    d_top, d_bot = d.quo_rem(x ^ (m // 2))

    e_top, e_bot = e.quo_rem(x ^ (m // 2))

    S00, S01, S10, S11 = HGCD(d_top, e_top)

    RET00 = S01 * R00 + (S00 - q * S01) * R10

    RET01 = S01 * R01 + (S00 - q * S01) * R11

    RET10 = S11 * R00 + (S10 - q * S11) * R10

    RET11 = S11 * R01 + (S10 - q * S11) * R11

    return RET00, RET01, RET10, RET11

def GCD(a, b):

    print(a.degree(), b.degree())

    q, r = a.quo_rem(b)

    if r == 0:

        return b

    R00, R01, R10, R11 = HGCD(a, b)

    c = R00 * a + R01 * b

    d = R10 * a + R11 * b

    if d == 0:

        return c.monic()

    q, r = c.quo_rem(d)

    if r == 0:

        return d

    return GCD(d, r)

#填入你的

c1 = 772167432990792284909246503485373564827423662851242942936975255372049079405922631297290251556585973686934890832849659590583140085382968742093943770675428869862385498404594511153139222640717296752471214514504131745657446656125557844901271640715066516885103781839826160994115784487472680768100661183394705879985459364111608990579323275737784566381691336604304955278256883423529263632439800163659992975948190325138106290810250677692972270138775860224366956601449524284187574453201455615890650328671385208998671350863314115885591106853229807982994778140445245927435098328511597441847163210560193373848931171804024813203

c2 = 2185342810520022586336689385344512546273762827830100178019097650928259687501314269853262487551357398728297194586835620643774892721766418892806910363445011749061907166747343507608781390978770926747094305381146737393535026687526960319434536017583904894554530861557175239362345485251281115748843999781275445445703433894295561819134209833028751302490721592934170848146618432688497403964700464690490125298139227095348433433890543904289070662974904820444031627359763396201976863505823922710618734646465997511025062911757600571747673908775617096321384264403844217607622754902280707445209499295488447523319414362500287112323

N=14333611673783142269533986072221892120042043537656734360856590164188122242725003914350459078347531255332508629469837960098772139271345723909824739672964835254762978904635416440402619070985645389389404927628520300563003721921925991789638218429597072053352316704656855913499811263742752562137683270151792361591681078161140269916896950693743947015425843446590958629225545563635366985228666863861856912727775048741305004192164068930881720463095045582233773945480224557678337152700769274051268380831948998464841302024749660091030851843867128275500525355379659601067910067304244120384025022313676471378733553918638120029697

e = 52595

pad1 = 1769169763

pad2 = 1735356260

PR.<x>=PolynomialRing(Zmod(N))

g1 = (x*2^32+pad1)^e - c1

g2 = (x*2^32+pad2)^e - c2

X=584734024210292804199275855856518183354184330877

print(g1(X),g2(X))

res = GCD(g1,g2)

m = -res.monic().coefficients()[0]

print(m)

print(bytes.fromhex(hex(m)[2:]).decode().replace("flag{",'ISCC{'))

需要去docker pull一个sagemath环境,然后去sage运行

最后获取flag ISCC{} 

工业互联网模拟仿真数据分析

第一问

在某些网络会话中,数据包可能保持固定大小,请给出含有此确定性特征的会话IP地址和数据包字节大小值。

答案:IP地址:XX.XX.XX.XX,XX.XX.XX.XX,…,数值:XX

补充说明:IP顺序从小到大排列,涉及的IP个数由选手自己判断

只有192.168.1.2

192.168.1.4的Length大小不变

192.168.1.2,192.168.1.4,24

第二问

题目二:通信包数据某些字段可能为确定的,请给出确定字节数值。

tshark -r a.pcap -T fields -e data.data -Y "data.len==12"                                                

2024f7b039ae1f546c8e8b1b                                                                                                                                                                                       

2024b939b6fdd3a92dacee64                                                                                                                                                                                       

2024fd300d3fd17b85d1ae51                                                                                                                                                                                       

20249cf615176e00d3fde264                                                                                                                                                                                       

20247b5207a1d2b639fe1e55                                                                                                                                                                                       

202432b3b42ff36424a15d01                                                                                                                                                                                       

2024f2122ad847094be81d58                                                                                                                                                                                       

2024e866d7ec7b7d5ae618bf                                                                                                                                                                                       

20244057c7e66ca371b2c938                                                                                                                                                                                       

202433b4fba38bac7e29bc6a                                                                                                                                                                                       

2024796986cd9b1fc559ad61                                                                                                                                                                                       

20248c6b6efd392e9839a3eb                                                                                                                                                                                       

202462434670e7e76d766c58                                                                                                                                                                                       

20241cc66ab532ff8c8f1d2e

很明显就是前面的2024

第三问

一些网络通信业务在时间序列上有确定性规律,请提供涉及的IP地址及时间规律数值(小数点后两位)

答案:IP地址:XX.XX.XX.XX,XX.XX.XX.XX,…,数值:XX

看文末的流量分组

第五组 - 192.168.1.3    192.168.1.5, 这一组的时间间隔固定

192.168.1.3,192.168.1.5,0.06

第四问

一些网络通信业务存在逻辑关联性,请提供涉及的IP地址

答案:XX.XX.XX.XX,XX.XX.XX.XX,…

看文末的流量分组,就能看出这三个IP是有业务关联性的

192.168.1.3 --> 192.168.1.2 --> 192.168.1.6
192.168.1.2,192.168.1.3,192.168.1.6

第五问

网络数据包往往会添加数据完整性校验值,请分析出数据校验算法名称及校验值在数据包的起始位和结束位(倒数位)

答案:XXXXX,X,X

五个字符的校验算法,先假设是 CRC16 或者 CRC32 

倒数位必为1

尝试CRC16 CRC32并尝试0-10为起始位

为CRC16,4,1时成功提交

192.168.1.2,192.168.1.4,24

2024

192.168.1.3,192.168.1.5,0.06

192.168.1.2,192.168.1.3,192.168.1.6

CRC16,4,1

ISCC{192.168.1.2,192.168.1.4,24,2024,192.168.1.3,192.168.1.5,0.06,192.168.1.2,192.168.1.3,192.168.1.6,CRC16,4,1}

ISCC{192.168.1.2,192.168.1.4,24,2024,192.168.1.3,192.168.1.5,0.06,192.168.1.2,192.168.1.3,192.168.1.6,CRC16,4,1}

FunZip

nwalk分离文件,发现有个sheet1.xml

打开看看发现

有表格像素的标签,且有不一致的地方 想到可能存在二维码

脚本跑

import openpyxl

from PIL import Image

def extract_bold_cells(file_path):

    bold_cells = []

    wb = openpyxl.load_workbook(file_path)

    sheet = wb.active

    for row in sheet.iter_rows():

        for cell in row:

            if cell.font.bold:

                bold_cells.append((cell.column, cell.row))

    return bold_cells

def generate_image(bold_cells):

    max_x = max(cell[0] for cell in bold_cells)

    max_y = max(cell[1] for cell in bold_cells)

    img = Image.new("1", (max_x, max_y), color=1)  # 生成白色的图像

    pixels = img.load()

    for cell in bold_cells:

        x, y = cell[0] - 1, cell[1] - 1  # Excel中的列和行是从1开始的,而图像的像素是从0开始的

        pixels[x, y] = 0  # 将加粗单元格对应的像素点设置为黑色

    return img

if __name__ == "__main__":

    excel_file_path = "attachment-1.xlsx"

    bold_cells = extract_bold_cells(excel_file_path)

    img = generate_image(bold_cells)

    img.show()  # 显示图像

    img.save("generated_imag.png")  # 保存图像

    print("Image generated successfully!")

时间刺客

1.得到流量为usb

放入kali,进行数据提取

tshark -r 6.pcap(修改为你的文件名字) -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt

  1. 分离出来发现没有带冒号,用以下脚本加上冒号

f=open('usbdata.txt','r')

fi=open('out1.txt','w')

while 1:

    a=f.readline().strip()

    if a:

        if len(a)==16: # 鼠标流量的话len改为8

            out=''

            for i in range(0,len(a),2):

                if i+2 != len(a):

                    out+=a[i]+a[i+1]+":"

                else:

                    out+=a[i]+a[i+1]

            fi.write(out)

            fi.write('\n')

    else:

        break

fi.close()

  1. 再使用以下脚本对加上冒号的usb'数据进行提取

#最后用脚本提取

   # print((line[6:8])) #输出6到8之间的值

   #取出6到8之间的值

mappings = { 0x04:"A",  0x05:"B",  0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G",  0x0B:"H", 0x0C:"I",  0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O",  0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5",  0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"\n", 0x2a:"[DEL]",  0X2B:"    ", 0x2C:" ",  0x2D:"-", 0x2E:"=", 0x2F:"[",  0x30:"]",  0x31:"\\", 0x32:"~", 0x33:";",  0x34:"'", 0x36:",",  0x37:"." }

nums = []

keys = open('out1.txt')

for line in keys:

    if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0':

         continue

    nums.append(int(line[6:8],16))

keys.close()

output = ""

for n in nums:

    if n == 0 :

        continue

    if n in mappings:

        output += mappings[n]

    else:

        output += '[unknown]'

print(output)

运行得到

FLAGPR3550NWARDSA2FEE6E0 

压缩密码为:PR3550NWARDSA2FEE6E0

  1. 解压之后得到空白txt,发现是时间戳隐写,直接用以下脚本进行提取

(记得把脚本和解压的放在同一目录下),跑出来加上ISCC得到flag

import os

un_time=1728864000.0

for i in range(18):

    filename = ".{}.txt".format(i)

    file_attr = os.stat(filename)#读取文件属性

    dtime = str(file_attr.st_mtime)#获取创建时间

    print(chr(int(float(dtime)-un_time)),end='')

有人让我给你带个话

打开附件得到两个文件,用010打开png文件,直接查看png文件尾

发现文件尾后还藏了文件

使用binwalk分离文件

得到名字为lyra的png

搜索后得知lyra是一种语音的隐写

010打开无后缀文件发现符合lyra文件特征

给文件加上后缀

使用bazel对文件进行低频3200HZ采样

得到wav文件,打开后发现是念社会主义核心价值观的语音

语音转文字后解码,得到flag

精装四合一

四个图片中每个图片的文件尾部都带着一串数据,我们看到这些数据都异或 0xff 都会是一个 zip 文件的一
部分,那么写个脚本将这四个文件的文件尾提取出来再进行异或 0xff ,然后再拼接,会得到一个 zip ,脚
本如下
def trim_and_xor_with_ff ( input_filename , output_filename , target_hex ):
# 16 进制字符串转换为字节
target_bytes = bytes . fromhex ( target_hex . replace ( ' ' , '' ))
# 初始化一个标志位,表示是否已经找到目标字节序列
found_target = False
with open ( input_filename , 'rb' ) as infile , open ( output_filename , 'wb' ) as
outfile :
# 读取文件的字节
while True :
chunk = infile . read ( 4096 ) # 一次读取 4096 字节
if not chunk :
break # 如果文件读取完毕,则退出循环
# 检查目标字节序列是否在块中
index = chunk . find ( target_bytes )
if index ! = - 1 :
# 如果找到,则只处理目标字节序列之后的部分
if not found_target :
# 跳过包含目标字节序列的块中目标之前的部分
chunk = chunk [ index + len ( target_bytes ):]
found_target = True
# 对剩余部分进行异或操作
xor_chunk = bytes ([ b ^ 0xFF for b in chunk ])
outfile . write ( xor_chunk )
elif found_target :
# 如果已经找到目标字节序列,则直接对整个块进行异或操作
xor_chunk = bytes ([ b ^ 0xFF for b in chunk ])
outfile . write ( xor_chunk )
# 如果尚未找到目标字节序列,则不处理该块(因为我们只关心目标之后的数据)
# 使用函数
input_filename = 'left_hand_invert.png' # 输入文件名
output_filename = '2' # 输出文件名
target_hex = 'AE426082' # 要查找的 16 进制字符串
trim_and_xor_with_ff ( input_filename , output_filename , target_hex )
input_filename = 'left_foot_invert.png' # 输入文件名
output_filename = '1' # 输出文件名
trim_and_xor_with_ff ( input_filename , output_filename , target_hex )
input_filename = 'right_hand_invert.png' # 输入文件名
output_filename = '4' # 输出文件名
trim_and_xor_with_ff ( input_filename , output_filename , target_hex )
input_filename = 'right_foot_invert.png' # 输入文件名
output_filename = '3' # 输出文件名
trim_and_xor_with_ff ( input_filename , output_filename , target_hex ) # 文件拼接
f1 = open ( '1' , 'rb' )
f2 = open ( '2' , 'rb' )
f3 = open ( '3' , 'rb' )
f4 = open ( '4' , 'rb' )
f5 = open ( '1.zip' , 'wb' )
for i in range ( 3176 ):
f5 . write ( f1 . read ( 1 ))
f5 . write ( f2 . read ( 1 ))
f5 . write ( f3 . read ( 1 ))
f5 . write ( f4 . read ( 1 ))
f5 . write ( f1 . read ( 1 ))
得到的 zip 文件,进行爆破密码是 65537 ,这个是 e 值,然后解压出一个 word 文件,把图片挪走看到一串
数字,这一串就是 n 的值
然后将 word 后缀改为 zip ,在 word/media 目录下面看到 true flag 图片,这个是密文,转成 16 进制是
0x209A2CA83B36F602B2D39D3A6818A78884288F24FE0BC1CD679FF0E630EEE12B
然后 n 值在线网站分解为 p q
根据 p q e c 可以求 rsa 了,脚本如下
import gmpy2
from Crypto . Util . number import *
from binascii import a2b_hex , b2a_hex
import binascii
e = 65537
c = 0x209A2CA83B36F602B2D39D3A6818A78884288F24FE0BC1CD679FF0E630EEE12B
#1. n 分解为 p q
p = 100882503720822822072470797230485840381
q = 167722355418488286110758738271573756671
n = p * q
phi = ( p - 1 ) * ( q - 1 )
#2. d
d = gmpy2 . invert ( e , phi )
#3.m=pow(c,d,n)
m = gmpy2 . powmod ( c , d , n )
print ( long_to_bytes ( m )) 得到 flag

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

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

相关文章

决定新泽西州版图的关键历史事件

决定新泽西州版图的关键历史事件 1. *民地建立&#xff1a;1664年&#xff0c;新泽西成为英国*民地。该地区原为荷兰*民地的一部分&#xff0c;但同年根据英王查理二世的赐予&#xff0c;转归给了他的兄弟约克公爵&#xff08;后来的詹姆士二世&#xff09;&#xff0c;之后又被…

【计网】广播域和冲突域

一、相关概念 1.各层次设备 2.冲突域 2.1定义 冲突域通俗来讲就是在同一个网络中&#xff0c;两台设备同时传输的话会产生冲突。位于OSI的第一层&#xff1a;物理层 例如在集线器场景下&#xff0c;集线器属于物理层设备&#xff0c;它不具备交换机的功能&#xff0c;当收到节…

mysql之递归sql

mysql之递归sql 递归sql在一些公司是不允许使用的&#xff0c;会涉及数据库压力&#xff0c;所以会在代码里递归查询&#xff0c;但有些公司开发流程没有规定&#xff0c;且数据库数据量不大&#xff0c;之前写过好几遍了&#xff0c;老是记不住&#xff0c;记录一下 通过父级…

牛客网刷题 | BC94 反向输出一个四位数

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 将一个四位数&…

【Linux初探】:解锁开源世界的神秘钥匙

文章目录 &#x1f680;一、了解Linux&#x1f525;二、Linux 的发行版❤️三、Linux应用领域&#x1f4a5;四、Linux vs Windows & mac &#x1f680;一、了解Linux Linux是一种自由、开放源代码的操作系统&#xff0c;它的内核由芬兰计算机科学家Linus Torvalds在1991年创…

LeetCode题练习与总结:二叉树的层序遍历Ⅱ--107

一、题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09; 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[…

【评价类模型】层次分析法(AHP)

1.评价类思想综述&#xff1a; 明确评价主体–>评价指标确定–>计算指标权重–>方案评价 1.1指标确定&#xff1a; 可以通过一个思维导图的方式来画出一个指标系统&#xff0c;先确定方向&#xff0c;再向下细化 注意&#xff1a;指标需要具有贴合性和独立性。 贴合…

打造游戏APP:面向对象编程的实战演练

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、项目背景与架构概览 二、类的设计与实现 三、面向对象编程的实践 四、游戏循环与事件…

Vue CLI 的服务介绍与使用(2024-05-20)

1、介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统&#xff0c;提供&#xff1a; 通过 vue/cli 实现的交互式的项目脚手架。 通过 vue/cli vue/cli-service-global 实现的零配置原型开发。 一个运行时依赖 (vue/cli-service)&#xff0c;该依赖&#xff1a; 可升级…

单片机原理及技术(二)—— AT89S51单片机(一)(C51编程)

目录 一、AT89S51单片机的片内硬件结构 二、AT89S51的引脚功能 2.1 电源及时钟引脚 2.2 控制引脚 2.3 并行 I/O口引脚 三、AT89S51的CPU 3.1 运算器 3.1.1 算术逻辑单元&#xff08;ALU&#xff09; 3.1.2 累加器A 3.1.3 程序状态字寄存器&#xff08;PSW&#xff09…

谈谈你对 vue 的理解 ?

1.谈谈你对 vue 的理解 ? 官方: Vue是一套用于构建用户界面的渐进式框架,Vue 的核心库只关注视图层 2. 声明式框架 Vue 的核心特点,用起来简单。那我们就有必要知道命令式和声明式的区别! 早在 JQ 的时代编写的代码都是命令式的,命令式框架重要特点就是关注过程 声明…

LDAP: error code 32 - No Such Object

目前我的项目版本&#xff1a; Spring版本:5.3.15SpringBoot版本:2.6.3 完整错误 org.springframework.ldap.NameNotFoundException: [LDAP: error code 32 - No Such Object]; nested exception is javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Objec…

C语言基础(七)

C语言基础&#xff08;七&#xff09; constconst修饰变量const修饰指针 main函数传参GDB调试工具 const const修饰变量 const修饰变量&#xff1a;只读&#xff08;不可写&#xff09; const修饰指针 左数右指&#xff08;const在*的哪一侧&#xff09; 数 —— 数值不可修…

弱密码系统登录之后强制修改密码

在你登录的时候&#xff0c;获取到弱密码&#xff0c;然后将他存到vuex里面&#xff0c;在登录进去之后&#xff0c;index页面再去取&#xff0c;思路是这样的 一、vuex里面定义密码字段 我是直接在user.js里面写的 import { login, logout, getInfo } from /api/login impo…

【MySQL进阶之路 | 基础篇】存储过程

1. 存储过程概述 (1). 含义 : 存储过程就是一组经过预先编译的SQL语句的封装. (2). 执行过程 : 存储过程预先存储在MySQL服务器上&#xff0c;需要执行的时候&#xff0c;客户端只需要向服务器端发送调用存储过程的命令&#xff0c;服务器端就可以把预先存储好的这一系列SQL语…

推荐一款媒体影音嗅探神器—Chrome扩展插件(猫抓cat-catch)

目录 1.1、前言1.2、下载地址1.3、github Releases 版本说明1.4、安装步骤1.5、猫抓插件常规设置1.5.1、设置抓取文件的类型1.5.2、设置抓取文件的后缀名 1.1、前言 我们在日常上网的过程中&#xff0c;很多音频、视频网站下载资源都非常不方便&#xff0c;要么需要安装客户端&…

jvm的类加载

文章目录 概要加载类加载器分类双亲委派模型自定义加载器 验证准备解析初始化<cinit>与<init> 概要 jvm运行时的整体结构如下 一个Car类&#xff0c;类跟Car对象的转换过程如下&#xff1a; 加载后的class类信息存放于方法区&#xff1b;ClassLoader只负责clas…

5.25机器人基础-空间描述和变换1

参考资料&#xff1a;《机器人学导论》John.J.Craig 彻底搞懂“旋转矩阵/欧拉角/四元数”&#xff0c;让你体会三维旋转之美_欧拉角判断动作-CSDN博客 机器人操作的定义是指通过某种机构使零件和工具在空间运动。因此&#xff0c;对于坐标系的定义显得尤为重要&#xff0c;相…

Mysql搭建主从同步,docker方式(一主一从)

服务器&#xff1a;两台Centos9 用Docker搭建主从 使用Docker拉取MySQL镜像 确保两台服务器都安装好了docker 安装docker请查看&#xff1a;Centos安装docker 1.两台服务器都先拉取mysql镜像 docker pull mysql 2.我这里是在 /opt/docker/mysql 下创建mysql的文件夹用来存…

基于STM32实现智能水族箱控制系统

目录 引言环境准备智能水族箱控制系统基础代码示例&#xff1a;实现智能水族箱控制系统 水温传感器数据读取水泵与加热器控制水位传感器数据读取用户界面与显示应用场景&#xff1a;水族箱管理与环境控制问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌…