window.onload=function(){ /*页面加载完成之后生成博客目录*/ BlogDirectory.createBlogDirectory("cnblogs_post_body","h2","h3",20); }

2023-SWPU NSS秋季招新赛(校外赛道)Misc—我要成为原神高手WP

1、题目信息

我是神里绫华的狗!!!

2、解题方法

有个genshin.h文件夹,打开看看发现里面是一堆文件夹0 1A 1A0等等,而且每个文件夹里面都有文件,0 1A 1A0...看着很眼熟,我们用010 Editor随便打开一个文件对比一下,发现0 1A 1A0是行数,而里面的文件名是十六进制byte,写个脚本提取一下信息:

import os

dir_path = r'genshin.h'

# 对文件夹进行排序
def list_sort(list_s):
    for i in range(len(list_s)):
        for j in range(len(list_s)-1):
            if int(list_s[i].rjust(4, '0'), 16) < int(list_s[j].rjust(4, '0'), 16):
                tmp = list_s[i]
                list_s[i] = list_s[j]
                list_s[j] = tmp
    return list_s

dir_ls = list_sort(os.listdir(dir_path))
file_h = open(
    r'result.h', 'wb')

for i in range(len(dir_ls)):
    byte_tmp = os.listdir(dir_path +'\\' +dir_ls[i])[0]
    #将十六进制的文件名转换为整数,并将其转换为字节形式,然后写入到 "result.h" 文件中。
    file_h.write(int(byte_tmp,16).to_bytes(1,byteorder='little',signed=False))

 result.h文件生成为:

#include <iostream>
#include <string>
#include <vector>

#define 香菱 int
#define 雷泽 char
#define 重云 long
#define 诺艾尔 float
#define 行秋 const
#define 菲谢尔 void
#define 砂糖 using
#define 班尼特 namespace
#define 安柏 std
#define 北斗 main
#define 凯亚 cin
#define 凝光 cout
#define 丽莎 scanf
#define 迪奥娜 printf
#define 辛焱 while
#define 罗莎莉亚 for
#define 烟绯 endl
#define 早柚 string
#define 九条裟罗 length
#define 托马 return
#define 五郎 vector
#define 云堇 push_back
#define 久岐忍 +
#define 鹿野院平藏 -
#define 柯莱 *
#define 多莉 /
#define 坎蒂丝 %
#define 莱伊拉 ?
#define 珐露珊 !
#define 瑶瑶 |
#define 米卡 &
#define 卡维 ""
#define 迪卢克 (
#define 莫娜 )
#define 琴 :
#define 刻晴 <
#define 七七 >
#define 温迪 =
#define 可莉 {
#define 达达利亚 }
#define 钟离 ,
#define 阿贝多 .
#define 甘雨 ;
#define 魈 [
#define 胡桃 ]
#define 优菈 _
#define 枫原万叶 ~
#define 神里绫华 ^=
#define 宵宫 ++
#define 雷电将军 --
#define 珊瑚宫心海 <<
#define 荒泷一斗 '!'
#define 申鹤 0
#define 八重神子 1
#define 白术 2
#define 神里绫人 44
#define 夜兰 114514
#define 提纳里 94
#define 我是神里绫华的狗 {114460, 114438, 114438, 114455, 114437, 114457, 114551, 114446, 114479, 114448, 114462, 114488, 114529, 114458, 114466, 114455, 114530, 114493, 114542, 114530, 114468, 114553, 114492, 114442, 114552, 114544, 114531, 114541, 114489, 114528, 114469, 114492, 114451, 114529, 114486, 114453, 114529, 114475, 114458, 114463, 114532, 114464, 114555, 114474};

按照#define 中文对应的字符和数字处理下“我要成为原神高手.miHoYo”文件:

s= '砂糖 班尼特 安柏 甘雨 五郎 刻晴 香菱 七七 赛诺 迪卢克 香菱 派蒙 莫娜 可莉 五郎 刻晴 香菱 七七 荧 甘雨 荧 阿贝多 云堇 迪卢克 申鹤 莫娜 甘雨 荧 阿贝多 云堇 迪卢克 八重神子 莫娜 甘雨 罗莎莉亚 迪卢克 香菱 空 温迪 白术 甘雨 空 刻晴 派蒙 甘雨 空 宵宫 莫娜 可莉 香菱 寝子 温迪 荧 魈 空 鹿野院平藏 八重神子 胡桃 久岐忍 荧 魈 空 鹿野院平藏 白术 胡桃 甘雨 荧 阿贝多 云堇 迪卢克 寝子 莫娜 甘雨 达达利亚 托马 荧 甘雨 达达利亚 早柚 尼禄 迪卢克 行秋 早柚 米卡 派蒙 钟离 行秋 五郎 刻晴 香菱 七七 米卡 空 莫娜 可莉 早柚 荧 温迪 派蒙 甘雨 香菱 寝子 温迪 申鹤 甘雨 罗莎莉亚 迪卢克 雷泽 米卡 太郎丸 琴 荧 莫娜 可莉 香菱 萨古 温迪 空 魈 寝子 胡桃 坎蒂丝 提纳里 甘雨 太郎丸 温迪 荒泷一斗 久岐忍  迪卢克 太郎丸 鹿野院平藏 荒泷一斗 鹿野院平藏 萨古 久岐忍 提纳里 莫娜 坎蒂丝 提纳里 甘雨 寝子 宵宫 甘雨 达达利亚 托马 荧 甘雨 达达利亚 香菱 北斗 迪卢克 莫娜 可莉 香菱 派蒙 魈 胡桃 温迪 我是神里绫华的狗 雷泽 空 魈 神里绫人 胡桃 甘雨 罗莎莉亚 迪卢克 香菱 荧 温迪 申鹤 甘雨 荧 刻晴 神里绫人 甘雨 荧 宵宫 莫娜 可莉 派蒙 魈 荧 胡桃 神里绫华 夜兰 甘雨 空 魈 荧 胡桃 温迪 迪卢克 雷泽 莫娜 派蒙 魈 荧 胡桃 甘雨 达达利亚 五郎 刻晴 香菱 七七 寝子 温迪 赛诺 迪卢克 神里绫人 莫娜 甘雨 早柚 太郎丸 温迪 尼禄 迪卢克 空 钟离 寝子 莫娜 甘雨 凝光 珊瑚宫心海 太郎丸 甘雨 达达利亚'.split(' ')

dict_s = {'香菱':'int','雷泽':'char','重云':'long','诺艾尔':'float','行秋':'const','菲谢尔':'void','砂糖':'using',
'班尼特':'namespace','安柏':'std','北斗':'main','凯亚':'cin','凝光':'cout',
'丽莎':'scanf','迪奥娜':'printf','辛焱':'while','罗莎莉亚':'for','烟绯':'endl',
'早柚':'string','九条裟罗':'length','托马':'return','五郎':'vector','云堇':'push_back',
'久岐忍':'+','鹿野院平藏':'-','柯莱':'*','多莉':'/','坎蒂丝':'%','莱伊拉':'?','珐露珊':'!',
'瑶瑶':'|','米卡':'&','卡维':'""','迪卢克':'(','莫娜':')','琴':':','刻晴':'<','七七':'>',
'温迪':'=','可莉':'{','达达利亚':'}','钟离':',','阿贝多':'.','甘雨':';','魈':'[','胡桃':']',
'优菈':'_','枫原万叶':'~','神里绫华':'^=','宵宫':'++','雷电将军':'--','珊瑚宫心海':'<<',
'荒泷一斗':'\'!\'','申鹤':0,'八重神子':1,'白术':2,'神里绫人':44,'夜兰':114514,'提纳里':94,
'我是神里绫华的狗':{114460, 114438, 114438, 114455, 114437, 114457, 114551, 114446, 114479, 114448, 114462, 114488, 114529, 114458, 114466, 114455, 114530, 114493, 114542, 114530, 114468, 114553, 114492, 114442, 114552, 114544, 114531, 114541, 114489, 114528, 114469, 114492, 114451, 114529, 114486, 114453, 114529, 114475, 114458, 114463, 114532, 114464, 114555, 114474}}


result = ''
for i in range(len(s)):
    try:
        result += str(dict_s[s[i]]) + ' '
    except:
        result += s[i] + ' '

print(result)

得到:

using namespace std ; vector < int > 赛诺 ( int 派蒙 ) { vector < int > 荧 ; 荧 . push_back ( 0 ) ; 荧 . push_back ( 1 ) ; for ( int 空 = 
2 ; 空 < 派蒙 ; 空 ++ ) { int 寝子 = 荧 [ 空 - 1 ] + 荧 [ 空 - 2 ] ; 荧 . push_back ( 寝子 ) ; } return 荧 ; } string 尼禄 ( const string 
& 派蒙 , const vector < int > & 空 ) { string 荧 = 派蒙 ; int 寝子 = 0 ; for ( char & 太郎丸 : 荧 ) { int 萨古 = 空 [ 寝子 ] % 94 ; 太郎丸
 = '!' +  ( 太郎丸 - '!' - 萨古 + 94 ) % 94 ; 寝子 ++ ; } return 荧 ; } int main ( ) { int 派蒙 [ ] = {114437, 114438, 114442, 114446, 114448, 114451, 114453, 114455, 114457, 114458, 114460, 114462, 114463, 114464, 114466, 114468, 114469, 114474, 114475, 114479, 114486, 114488, 114489, 114492, 114493, 114528, 114529, 114530, 114531, 114532, 114541, 114542, 114544, 114551, 114552, 114553, 114555} char 空 [ 44 ] 
; for ( int 荧 = 0 ; 荧 < 44 ; 荧 ++ ) { 派蒙 [ 荧 ] ^= 114514 ; 空 [ 荧 ] = ( char ) 派蒙 [ 荧 ] ; } vector < int > 寝子 = 赛诺 ( 44 ) ; 
string 太郎丸 = 尼禄 ( 空 , 寝子 ) ; cout << 太郎丸 ; }

根据上述结果信息,再用python转换一下: 

def signal(param_int):
    in_list = [0,1]
    for i in range(2,param_int):
        tmp_i = in_list[i-1] + in_list[i-2]
        in_list.append(tmp_i)
    return in_list
def nilu(pymen,int_q):
    str_in = pymen
    tmp_q = 0
    result = ''
    for i in str_in:
        str_tlw  = ord(i)
        int_sg = int_q[tmp_q] % 94
        result += chr(ord('!') + (str_tlw - ord('!') - int_sg + 94)%94)
        tmp_q +=1
    return result

pymen = [114460, 114438, 114438, 114455, 114437, 114457, 114551, 114446, 114479, 114448, 114462, 114488, 114529, 114458, 114466, 114455, 114530, 114493, 114542, 114530, 114468, 114553, 114492, 114442, 114552, 114544, 114531, 114541, 114489, 114528, 114469, 114492, 114451, 114529, 114486, 114453, 114529, 114475, 114458, 114463, 114532, 114464, 114555, 114474]
list_q=[]
for i in range(44) :
    pymen[i] = pymen[i] ^ 114514
    list_q.append(chr(pymen[i]))
print(list_q)
int_q = signal(44)
flag = nilu(list_q,int_q)
print(flag)
#NSSCTF{Oh~so_you_play_Genshin_Impact_too!!!}

 

posted @ 2023-10-23 09:25  Kicky_Mu  阅读(101)  评论(0编辑  收藏  举报