老婆出轨 发表于 2024-5-27 01:09:16

2024天下大学生信息安全竞赛创新实践本领赛初赛 CISCN2024 部分题目个人Wri

以下为我个人在比赛中A出来的题目标题解。
解题过程

Power Trajectory Diagram

利用py中的numpy和pandas库读取npz文件并生存为csv文件,代码如下:
import numpy as np
import pandas as pd
np.set_printoptions(threshold=np.inf)
a1 = np.load('attachment.npz', allow_pickle=True)
print(a1.files)
print('read:', a1)
index = a1['index']
myin = a1['input']
myout = a1['output']
mytra = a1['trace']
# print(mytra.shape)
df = pd.DataFrame(mytra)
df.to_csv('data1.csv', index=False)
df1 = pd.DataFrame({'index':index, 'input': myin})
df1.to_csv('data2.csv', index=False)得到data1.csv、data2.csv,合并得到data.csv。
打开data.csv,可以看到功耗数据,根据https://zhuanlan.zhihu.com/p/157585244,我认为该题的关键是在于找到与其它字符不同的字符,就是该index的精确暗码。
基于此,利用Excel的折线图功能,例如第四个字符,如图所示:
https://img-blog.csdnimg.cn/direct/c923fe310ddf4d08a91636ed6906bd9d.png#pic_center
可以看出,有一条绿色线与其它线都不同,为c,以是第四个字符就是c。
依次重复,得到整个密钥:_ciscn_2024_
即flag:flag{_ciscn_2024_}
androidso_re

利用GDA反编译题目所给的apk,可以看到判断flag的函数:
https://img-blog.csdnimg.cn/direct/2e2bfc8e7e7a491aa7aa27b979f762e6.png#pic_center
https://img-blog.csdnimg.cn/direct/7da9aaaa25cf4fbbb626b367398c5119.png#pic_center
可以看到,程序是对输入的flag举行DES加密后与精确flag的密文举行比对,密文为:JqslHrdvtgJrRs2QAp+FEVdwRPNLswrnykD/sZMivmjGRKUMVIC/rw==
此中获取key和iv函数如下图:
https://img-blog.csdnimg.cn/direct/5fb8b348deaf49d98857223cf6f5839b.png#pic_center
可以看到,这两个函数为native函数,是在secret_entrace之中的,用压缩软件打开apk,可以从lib文件夹里找到该库。
https://img-blog.csdnimg.cn/direct/a831709d38a9483dab5fbed6e873ff27.png#pic_center
解压下来,用IDA反编译,起首找到生成iv的函数:
https://img-blog.csdnimg.cn/direct/29ac9fc492b0429d99d11720d724bcdb.png#pic_center
https://img-blog.csdnimg.cn/direct/9b6bdab27e734507ae9c17b4c7688da1.png#pic_center
根据代码可以判断此为ROT13加密,变换为65-49=16位,原文为 F2IjBOh1mRW=,加密得到iv:
https://img-blog.csdnimg.cn/direct/e23b3fef031d497f9903160d4d137773.png#pic_center
接下来找到生成key的函数,根据代码可以判断,此为RC4加密,密钥为 YourRC4Key,原文为 TFSecret_Key,加密后履历了一次异或,key为 0x038933B8540C206,加密后,截取其前8位得到key:
https://img-blog.csdnimg.cn/direct/61637a09f0b44eb6ad4453260429c73e.png#pic_center
https://img-blog.csdnimg.cn/direct/04f6380a8883402ab3144aa427fc9e1a.png#pic_center
最后,利用key和iv对密文举行解密得到flag:
https://img-blog.csdnimg.cn/direct/a665f385e2154bbca27881e81ac82c8b.png#pic_center
通风机

利用binwalk可以分离出一个zlib文件,利用python解压,代码如下:
import zlib

def decompress_zlib_file(input_filename, output_filename):
    with open(input_filename, 'rb') as compressed_file:
      compressed_data = compressed_file.read()
      decompressed_data = zlib.decompress(compressed_data)

    with open(output_filename, 'wb') as output_file:
      output_file.write(decompressed_data)

# Example usage
input_file = '35.zlib'
output_file = 'decompressed_data.txt'
decompress_zlib_file(input_file, output_file)用Winhex 打开 decompressed_data.txt,可以看到颠末base64编码后的flag。
https://img-blog.csdnimg.cn/direct/4c114e7a3ff2484588dfb6a4080282ea.png#pic_center
解码得到flag:
https://img-blog.csdnimg.cn/direct/04d21eae267445e18569f3be165b4426.png#pic_center
古典暗码

根据题目名称,枚举各种古典暗码,最后发现是Atbash暗码,base64解密后得到接近flag的一串字符。
https://img-blog.csdnimg.cn/direct/22c3c1c7a38948ac864bfb06ef3e5ebe.png#pic_center
随后利用一把梭工具,发现其为栅栏暗码并解密,得到flag。
https://img-blog.csdnimg.cn/direct/9c4ddcc4ddda4de1bdff6f52fde3f3be.png#pic_center
whereThel1b

查看python代码,发现它利用了一个so,将输入的flag举行加密后与encry对比,判断flag。
https://img-blog.csdnimg.cn/direct/51b6c9ca205942eeb47a0090474d8e7f.png#pic_center
起首对那个so文件举行逆向,发现根本看不懂。以是利用黑盒测试的方法,分别输入a、b、c、d、e、f、g、h,发现a、b、c,d、e、f,g、h加密后的第一个字符分别相称,第三、四个字符全部相称。同时输入1、2、3->4,4->8。通过这些规律发现该加密与base64有关,于是我输入56/4*3=42个a,观察得出的ret,与base64('a'*42)做对比,如图所示:
https://img-blog.csdnimg.cn/direct/21ef1e9e46f64bb58a2e64d32932dd16.png#pic_center
import base64
import whereThel1b

def main(flag):
    encry =
    ret = whereThel1b.trytry(flag)
   
    print(flag.decode(), ret, end='')
    if ret == 108:
      print(flag)

main(b'a'*42)

print()观察发现并无明显规律,尝试是否为异或加密,解密代码如下:
encry =

a =
b =

ret = []

for i in range(0, len(encry)):
    ret += ^ b ^ encry]

print(ret)
for i in ret:
    print(chr(i),end="")ahttps://img-blog.csdnimg.cn/direct/0958032e65e34df6a94b6f957333ed9b.png#pic_center
发现明显的Zmxh,为flag的base64编码,解密得到flag:
https://img-blog.csdnimg.cn/direct/b6af793fd74b4b6da21ebe3d9a23f246.png#pic_center
gdb_debug

用IDA反编译,定位main函数,可以发现程序逻辑为:

[*]输入str,将str每一个字符异或一个随机数,得到str2
https://img-blog.csdnimg.cn/direct/bcbc5be57dbf43a79916f17a48fb1c7c.png#pic_center
[*]定义str3,随机交换洗牌,得到一个0-38的随机不重复的序列
https://img-blog.csdnimg.cn/direct/2b7596ff139148b9bf9f995758d59029.png#pic_center
[*]根据str3,得到str4,使得str4=str2]
https://img-blog.csdnimg.cn/direct/5087f82d892f4dd2827a8a31adbdd7e4.png#pic_center
[*]将str4每一个字符异或一个随机数
https://img-blog.csdnimg.cn/direct/69c6e9120d794a68b46a07b7f7033b23.png#pic_center
[*]根据str4,得到s1,使得s1=str4^byte_5636B30010A0,此中byte_5636B30010A0固定且已给出
https://img-blog.csdnimg.cn/direct/c706640ac58e42cbb4d806e8d027e537.png#pic_center
[*]将s1与s2尴尬刁难比,若相同,则输入flag精确,此中s2为"congratulationstoyoucongratulationstoy"
https://img-blog.csdnimg.cn/direct/3d549685c4a74605ab6817b1d145f2f2.png#pic_center
这个程序的特性在于,在置随机数种子时,利用的是当前时间按位与0xF0000000的结果为种子,使得种子在很长一段时间执行时都相同。
https://img-blog.csdnimg.cn/direct/6c27f51d3079499eb21eab73fd08f239.png#pic_center
基于此,我们可以提前求出要用到的随机数(要在Linux体系上运行,与Win的rand()逻辑不同):
srand(((int)time(0))& 0xF0000000);char rand1;unsigned int rand2,rand3;for(int i=0;i
页: [1]
查看完整版本: 2024天下大学生信息安全竞赛创新实践本领赛初赛 CISCN2024 部分题目个人Wri