GoGpt
没什么好说的
flagfile
先安装file-5.41,如果源里没有,就去对应官网搜索然后添加源再安装这个版本的file
然后开始愉快的撸flag
怎么撸呢?去学magic文件格式也行,不过有点麻烦
file --help
一下发现有个调试模式,开调
那么在flag里面随便写点东西,试试file -m flag.mgc -d flag
$ file -m flag.mgc -d flag
[try zmagic 0]
[try tar 0]
[try json 0]
[try csv 0]
[try cdf 0]
bb=[0x7fcaed261010,4,0], 0 [b=0x7fcaed261010,4,0], [o=0, c=0]
mget(type=5, flag=0x20, offset=0, o=0, nbytes=4, il=0, nc=0)
mget/128 @0: flag\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
1: > 0 string,=flag{,""]
[try softmagic 0]
[try ascmagic 1]
flag: ASCII text, with no line terminators
这部分就是直接比较,非常简单,继续,修改flag
为flag{***}
$ file -m flag.mgc -d flag
[try zmagic 0]
[try tar 0]
[try json 0]
[try csv 0]
[try cdf 0]
[try elf 0]
bb=[0x7f0251e97010,9,0], 0 [b=0x7f0251e97010,9,0], [o=0, c=0]
mget(type=5, flag=0x20, offset=0, o=0, nbytes=9, il=0, nc=0)
mget/128 @0: flag{***}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
1: > 0 string,=flag{,""]
0 == 0 = 1
bb=[0x7f0251e97010,9,0], 64 [b=0x7f0251e97010,9,0], [o=0x40, c=1]
mget(type=10, flag=0, offset=64, o=0, nbytes=9, il=0, nc=0)
mget/128 @64: \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
2: >> 64 leshort^00000076,=111,""]
[try softmagic 0]
[try ascmagic 1]
flag: ASCII text, with no line terminators
发现进入了下一步判断,现在略微学习magic文件格式MAGIC文件格式解析,提到leshort:小端字节序的两字节值
然后连蒙带猜把偏移64的地方修改为111^0x76
import os
f = open('flag', 'w')
f.write('flag{' + '*' * (64 - len('flag{')))
f.close()
f = open('flag', 'ab')
f.write((0x76 ^ 111).to_bytes(2,'little'))
f.close()
print(os.popen("file -m flag.mgc -d flag").read())
发现成功进入了下一步判断,那么修改脚本实现自动化
获取调试信息的命令在网上找了半天不如问GPT来得实在
import re
import subprocess
f = open('flag', 'w')
f.write('flag{' + '*' * (64 - len('flag{')))
f.close()
for i in range(2, 100):
text = subprocess.run(['file', '-m', 'flag.mgc', '-d', 'flag'],
capture_output=True, text=True, check=True).stderr
# print("text:\n", text, "\ntext end\n")
# 2: >> 64 leshort^00000076,=111,""]
data = re.findall(f'{int(i)}: >* (\d+) leshort\^([\da-f]+),=(\d+),""]', text)
print(i, "data:", data)
f = open('flag', 'ab')
f.write((int(data[0][1], 16) ^ int(data[0][2])).to_bytes(2, 'little'))
f.close()
34: >> 64(byte,&0), byte^ffffffffffffff8a,=-20,""]
mget/128 @25: ***************************************\031\000\b\000\022\000\024\000\033\000\037\000\036\000\032\000\a\000\r\000\005\000\v\000\020\000\t\000"\000 \000\026\000\n\000\023\000\027\000\030\000\017\000\034\000$\000\f\000!\000\021\000\006\000\016\000#\000\025\000\035\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
34: >> 64(byte,&0), byte^ffffffffffffff8a,=-20,""]
18446744073709551520 == 18446744073709551596 = 0
[try softmagic 0]
[try ascmagic 0]
成功跑到34,后面的判断规则发生变化,进一步分析(猜)将偏移为25的地方改为0xffffffffffffff8a^-20
import re
import subprocess
f = open('flag', 'w')
f.write('flag{' + '*' * (64 - len('flag{')))
f.close()
for i in range(2, 34):
text = subprocess.run(['file', '-m', 'flag.mgc', '-d', 'flag'],
capture_output=True, text=True, check=True).stderr
# print("text:\n", text, "\ntext end\n")
# 2: >> 64 leshort^00000076,=111,""]
data = re.findall(f'{int(i)}: >* (\d+) leshort\^([\da-f]+),=(\d+),""]', text)
print(i, "data:", data)
f = open('flag', 'ab')
f.write((int(data[0][1], 16) ^ int(data[0][2])).to_bytes(2, 'little'))
f.close()
f = open('flag', 'rb+')
f.seek(25)
f.write(((0xffffffffffffff8a ^ -20) & 0xff).to_bytes(1, 'little'))
f.close()
text = subprocess.run(['file', '-m', 'flag.mgc', '-d', 'flag'],
capture_output=True, text=True, check=True).stderr
print("text:\n", text, "\ntext end\n")
再次成功进入下一步判断,继续修改脚本实现自动化
import re
import subprocess
f = open('flag', 'w')
f.write('flag{' + '*' * (64 - len('flag{')))
f.close()
for i in range(2, 34):
text = subprocess.run(['file', '-m', 'flag.mgc', '-d', 'flag'],
capture_output=True, text=True, check=True).stderr
# print("text:\n", text, "\ntext end\n")
# 2: >> 64 leshort^00000076,=111,""]
data = re.findall(f'{i}: >* (\d+) leshort\^([\da-f]+),=(\d+),""]', text)
print(i, "offset:", data[0][0], "data:", data)
f = open('flag', 'ab')
f.write((int(data[0][1], 16) ^ int(data[0][2])).to_bytes(2, 'little'))
f.close()
for i in range(34, 100):
text = subprocess.run(['file', '-m', 'flag.mgc', '-d', 'flag'],
capture_output=True, text=True, check=True).stderr
# print("text:\n", text, "\ntext end\n")
# 34: >> 64(byte,&0), byte^ffffffffffffff8a,=-20,""]
# mget/128 @25:
data = re.findall(f'{i}: >* \d+\(byte,&0\), byte\^([\da-f]+),=([-\d]+),""]', text)
off = re.findall(f'mget/128 @(\d+):', text)
print(i, "offset:", off[-1], "data:", data)
f = open('flag', 'rb+')
f.seek(int(off[-1]))
f.write(((int(data[0][0], 16) ^ int(data[0][1])) & 0xff).to_bytes(1, 'little'))
f.close()
脚本运行完毕之后再将flag的’}'补上去
$ file -m flag.mgc flag
flag: yes, it's a flag!
flag{_oh_yes_you_got_the_flag___^_^__}
ez_code
PowerShell混淆脚本
这题的去混淆简单做法主要就是去掉iex拿到代码逻辑字符
把末尾的| .${-``}
去掉可以拿到假flag,而且还有个信息:${-``}="iex"
Function _/==/=__=_{
[CmdletBinding()] param(
[Parameter(Position = 0)]
[String]
$param1
)
$result = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($param1))
return $result
}
Function _\/_\_={
[CmdletBinding()] param(
[Parameter(Position = 0)]
[String]
$param1
)
$param1 = _/==/=__=_ -param1 $param1
$result = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($param1))
$result | out-null
}
_\/_\_= ("S21OMFpudG9hR2hmY0hkemFGOXBjMTlsWVhONVgzSnBaMmgwUDMwPQ==")
echo "Do you konw PWSH?"
那么开始寻找真正的逻辑,分析大概率不是 ****** | iex
就是 iex(******)
全局搜索${-``}
可以看到46037列有一个${-``}
,猜测是假flag的部分(也可以删掉验证猜测),而从这一直往上到813列应该就是真正的逻辑,在812列加上echo拿到真正的逻辑
至于前面的811列在干嘛,有兴趣的话可以当个正则大师写个脚本把变量赋值过程echo一下,这里就不做了
将刚刚echo出来的东西转为人话
import re
code = '[CHar]99+[CHar]108+[CHar]97+[CHar]115+[CHar]115+[CHar]32+[CHar]99+[CHar]104+[CHar]105+[CHar]112+[CHar]101+[CHar]114+[CHar]40+[CHar]41+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]100+[CHar]101+[CHar]102+[CHar]32+[CHar]95+[CHar]95+[CHar]105+[CHar]110+[CHar]105+[CHar]116+[CHar]95+[CHar]95+[CHar]40+[CHar]115+[CHar]101+[CHar]108+[CHar]102+[CHar]41+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]115+[CHar]101+[CHar]108+[CHar]102+[CHar]46+[CHar]100+[CHar]32+[CHar]61+[CHar]32+[CHar]48+[CHar]120+[CHar]56+[CHar]55+[CHar]54+[CHar]53+[CHar]52+[CHar]51+[CHar]50+[CHar]49+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]107+[CHar]48+[CHar]32+[CHar]61+[CHar]32+[CHar]48+[CHar]120+[CHar]54+[CHar]55+[CHar]52+[CHar]53+[CHar]50+[CHar]51+[CHar]48+[CHar]49+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]107+[CHar]49+[CHar]32+[CHar]61+[CHar]32+[CHar]48+[CHar]120+[CHar]101+[CHar]102+[CHar]99+[CHar]100+[CHar]97+[CHar]98+[CHar]56+[CHar]57+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]107+[CHar]50+[CHar]32+[CHar]61+[CHar]32+[CHar]48+[CHar]120+[CHar]57+[CHar]56+[CHar]98+[CHar]97+[CHar]100+[CHar]99+[CHar]102+[CHar]101+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]107+[CHar]51+[CHar]32+[CHar]61+[CHar]32+[CHar]48+[CHar]120+[CHar]49+[CHar]48+[CHar]51+[CHar]50+[CHar]53+[CHar]52+[CHar]55+[CHar]54+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]115+[CHar]101+[CHar]108+[CHar]102+[CHar]46+[CHar]107+[CHar]32+[CHar]61+[CHar]32+[CHar]91+[CHar]107+[CHar]48+[CHar]44+[CHar]32+[CHar]107+[CHar]49+[CHar]44+[CHar]32+[CHar]107+[CHar]50+[CHar]44+[CHar]32+[CHar]107+[CHar]51+[CHar]93+[CHar]10+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]100+[CHar]101+[CHar]102+[CHar]32+[CHar]101+[CHar]40+[CHar]115+[CHar]101+[CHar]108+[CHar]102+[CHar]44+[CHar]32+[CHar]110+[CHar]44+[CHar]32+[CHar]118+[CHar]41+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]102+[CHar]114+[CHar]111+[CHar]109+[CHar]32+[CHar]99+[CHar]116+[CHar]121+[CHar]112+[CHar]101+[CHar]115+[CHar]32+[CHar]105+[CHar]109+[CHar]112+[CHar]111+[CHar]114+[CHar]116+[CHar]32+[CHar]99+[CHar]95+[CHar]117+[CHar]105+[CHar]110+[CHar]116+[CHar]51+[CHar]50+[CHar]10+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]100+[CHar]101+[CHar]102+[CHar]32+[CHar]77+[CHar]88+[CHar]40+[CHar]122+[CHar]44+[CHar]32+[CHar]121+[CHar]44+[CHar]32+[CHar]116+[CHar]111+[CHar]116+[CHar]97+[CHar]108+[CHar]44+[CHar]32+[CHar]107+[CHar]101+[CHar]121+[CHar]44+[CHar]32+[CHar]112+[CHar]44+[CHar]32+[CHar]101+[CHar]41+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]116+[CHar]101+[CHar]109+[CHar]112+[CHar]49+[CHar]32+[CHar]61+[CHar]32+[CHar]40+[CHar]122+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]32+[CHar]62+[CHar]62+[CHar]32+[CHar]54+[CHar]32+[CHar]94+[CHar]32+[CHar]121+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]32+[CHar]60+[CHar]60+[CHar]32+[CHar]52+[CHar]41+[CHar]32+[CHar]43+[CHar]32+[CHar]92+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]40+[CHar]121+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]32+[CHar]62+[CHar]62+[CHar]32+[CHar]50+[CHar]32+[CHar]94+[CHar]32+[CHar]122+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]32+[CHar]60+[CHar]60+[CHar]32+[CHar]53+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]116+[CHar]101+[CHar]109+[CHar]112+[CHar]50+[CHar]32+[CHar]61+[CHar]32+[CHar]40+[CHar]116+[CHar]111+[CHar]116+[CHar]97+[CHar]108+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]32+[CHar]94+[CHar]32+[CHar]121+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]41+[CHar]32+[CHar]43+[CHar]32+[CHar]92+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]40+[CHar]107+[CHar]101+[CHar]121+[CHar]91+[CHar]40+[CHar]112+[CHar]32+[CHar]38+[CHar]32+[CHar]51+[CHar]41+[CHar]32+[CHar]94+[CHar]32+[CHar]101+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]93+[CHar]32+[CHar]94+[CHar]32+[CHar]122+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]114+[CHar]101+[CHar]116+[CHar]117+[CHar]114+[CHar]110+[CHar]32+[CHar]99+[CHar]95+[CHar]117+[CHar]105+[CHar]110+[CHar]116+[CHar]51+[CHar]50+[CHar]40+[CHar]116+[CHar]101+[CHar]109+[CHar]112+[CHar]49+[CHar]32+[CHar]94+[CHar]32+[CHar]116+[CHar]101+[CHar]109+[CHar]112+[CHar]50+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]107+[CHar]101+[CHar]121+[CHar]32+[CHar]61+[CHar]32+[CHar]115+[CHar]101+[CHar]108+[CHar]102+[CHar]46+[CHar]107+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]100+[CHar]101+[CHar]108+[CHar]116+[CHar]97+[CHar]32+[CHar]61+[CHar]32+[CHar]115+[CHar]101+[CHar]108+[CHar]102+[CHar]46+[CHar]100+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]114+[CHar]111+[CHar]117+[CHar]110+[CHar]100+[CHar]115+[CHar]32+[CHar]61+[CHar]32+[CHar]54+[CHar]32+[CHar]43+[CHar]32+[CHar]53+[CHar]50+[CHar]47+[CHar]47+[CHar]110+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]116+[CHar]111+[CHar]116+[CHar]97+[CHar]108+[CHar]32+[CHar]61+[CHar]32+[CHar]99+[CHar]95+[CHar]117+[CHar]105+[CHar]110+[CHar]116+[CHar]51+[CHar]50+[CHar]40+[CHar]48+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]122+[CHar]32+[CHar]61+[CHar]32+[CHar]99+[CHar]95+[CHar]117+[CHar]105+[CHar]110+[CHar]116+[CHar]51+[CHar]50+[CHar]40+[CHar]118+[CHar]91+[CHar]110+[CHar]45+[CHar]49+[CHar]93+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]101+[CHar]32+[CHar]61+[CHar]32+[CHar]99+[CHar]95+[CHar]117+[CHar]105+[CHar]110+[CHar]116+[CHar]51+[CHar]50+[CHar]40+[CHar]48+[CHar]41+[CHar]10+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]119+[CHar]104+[CHar]105+[CHar]108+[CHar]101+[CHar]32+[CHar]114+[CHar]111+[CHar]117+[CHar]110+[CHar]100+[CHar]115+[CHar]32+[CHar]62+[CHar]32+[CHar]48+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]116+[CHar]111+[CHar]116+[CHar]97+[CHar]108+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]32+[CHar]43+[CHar]61+[CHar]32+[CHar]100+[CHar]101+[CHar]108+[CHar]116+[CHar]97+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]101+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]32+[CHar]61+[CHar]32+[CHar]40+[CHar]116+[CHar]111+[CHar]116+[CHar]97+[CHar]108+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]32+[CHar]62+[CHar]62+[CHar]32+[CHar]50+[CHar]41+[CHar]32+[CHar]38+[CHar]32+[CHar]51+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]102+[CHar]111+[CHar]114+[CHar]32+[CHar]112+[CHar]32+[CHar]105+[CHar]110+[CHar]32+[CHar]114+[CHar]97+[CHar]110+[CHar]103+[CHar]101+[CHar]40+[CHar]110+[CHar]45+[CHar]49+[CHar]41+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]121+[CHar]32+[CHar]61+[CHar]32+[CHar]99+[CHar]95+[CHar]117+[CHar]105+[CHar]110+[CHar]116+[CHar]51+[CHar]50+[CHar]40+[CHar]118+[CHar]91+[CHar]112+[CHar]43+[CHar]49+[CHar]93+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]118+[CHar]91+[CHar]112+[CHar]93+[CHar]32+[CHar]61+[CHar]32+[CHar]99+[CHar]95+[CHar]117+[CHar]105+[CHar]110+[CHar]116+[CHar]51+[CHar]50+[CHar]40+[CHar]118+[CHar]91+[CHar]112+[CHar]93+[CHar]32+[CHar]43+[CHar]32+[CHar]77+[CHar]88+[CHar]40+[CHar]122+[CHar]44+[CHar]32+[CHar]121+[CHar]44+[CHar]32+[CHar]116+[CHar]111+[CHar]116+[CHar]97+[CHar]108+[CHar]44+[CHar]32+[CHar]107+[CHar]101+[CHar]121+[CHar]44+[CHar]32+[CHar]112+[CHar]44+[CHar]32+[CHar]101+[CHar]41+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]41+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]122+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]32+[CHar]61+[CHar]32+[CHar]118+[CHar]91+[CHar]112+[CHar]93+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]121+[CHar]32+[CHar]61+[CHar]32+[CHar]99+[CHar]95+[CHar]117+[CHar]105+[CHar]110+[CHar]116+[CHar]51+[CHar]50+[CHar]40+[CHar]118+[CHar]91+[CHar]48+[CHar]93+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]118+[CHar]91+[CHar]110+[CHar]45+[CHar]49+[CHar]93+[CHar]32+[CHar]61+[CHar]32+[CHar]99+[CHar]95+[CHar]117+[CHar]105+[CHar]110+[CHar]116+[CHar]51+[CHar]50+[CHar]40+[CHar]118+[CHar]91+[CHar]110+[CHar]45+[CHar]49+[CHar]93+[CHar]32+[CHar]43+[CHar]32+[CHar]77+[CHar]88+[CHar]40+[CHar]122+[CHar]44+[CHar]32+[CHar]121+[CHar]44+[CHar]32+[CHar]116+[CHar]111+[CHar]116+[CHar]97+[CHar]108+[CHar]44+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]107+[CHar]101+[CHar]121+[CHar]44+[CHar]32+[CHar]110+[CHar]45+[CHar]49+[CHar]44+[CHar]32+[CHar]101+[CHar]41+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]41+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]122+[CHar]46+[CHar]118+[CHar]97+[CHar]108+[CHar]117+[CHar]101+[CHar]32+[CHar]61+[CHar]32+[CHar]118+[CHar]91+[CHar]110+[CHar]45+[CHar]49+[CHar]93+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]114+[CHar]111+[CHar]117+[CHar]110+[CHar]100+[CHar]115+[CHar]32+[CHar]45+[CHar]61+[CHar]32+[CHar]49+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]114+[CHar]101+[CHar]116+[CHar]117+[CHar]114+[CHar]110+[CHar]32+[CHar]118+[CHar]10+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]100+[CHar]101+[CHar]102+[CHar]32+[CHar]98+[CHar]121+[CHar]116+[CHar]101+[CHar]115+[CHar]50+[CHar]105+[CHar]110+[CHar]116+[CHar]115+[CHar]40+[CHar]115+[CHar]101+[CHar]108+[CHar]102+[CHar]44+[CHar]99+[CHar]115+[CHar]58+[CHar]98+[CHar]121+[CHar]116+[CHar]101+[CHar]115+[CHar]41+[CHar]45+[CHar]62+[CHar]108+[CHar]105+[CHar]115+[CHar]116+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]110+[CHar]101+[CHar]119+[CHar]95+[CHar]108+[CHar]101+[CHar]110+[CHar]103+[CHar]116+[CHar]104+[CHar]61+[CHar]108+[CHar]101+[CHar]110+[CHar]40+[CHar]99+[CHar]115+[CHar]41+[CHar]43+[CHar]40+[CHar]56+[CHar]45+[CHar]108+[CHar]101+[CHar]110+[CHar]40+[CHar]99+[CHar]115+[CHar]41+[CHar]37+[CHar]56+[CHar]41+[CHar]37+[CHar]56+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]98+[CHar]97+[CHar]114+[CHar]114+[CHar]97+[CHar]121+[CHar]61+[CHar]99+[CHar]115+[CHar]46+[CHar]108+[CHar]106+[CHar]117+[CHar]115+[CHar]116+[CHar]40+[CHar]110+[CHar]101+[CHar]119+[CHar]95+[CHar]108+[CHar]101+[CHar]110+[CHar]103+[CHar]116+[CHar]104+[CHar]44+[CHar]98+[CHar]39+[CHar]92+[CHar]120+[CHar]48+[CHar]48+[CHar]39+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]105+[CHar]61+[CHar]48+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]118+[CHar]61+[CHar]91+[CHar]93+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]119+[CHar]104+[CHar]105+[CHar]108+[CHar]101+[CHar]32+[CHar]105+[CHar]32+[CHar]60+[CHar]32+[CHar]110+[CHar]101+[CHar]119+[CHar]95+[CHar]108+[CHar]101+[CHar]110+[CHar]103+[CHar]116+[CHar]104+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]118+[CHar]48+[CHar]32+[CHar]61+[CHar]32+[CHar]105+[CHar]110+[CHar]116+[CHar]46+[CHar]102+[CHar]114+[CHar]111+[CHar]109+[CHar]95+[CHar]98+[CHar]121+[CHar]116+[CHar]101+[CHar]115+[CHar]40+[CHar]98+[CHar]97+[CHar]114+[CHar]114+[CHar]97+[CHar]121+[CHar]91+[CHar]105+[CHar]58+[CHar]105+[CHar]43+[CHar]52+[CHar]93+[CHar]44+[CHar]32+[CHar]39+[CHar]108+[CHar]105+[CHar]116+[CHar]116+[CHar]108+[CHar]101+[CHar]39+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]118+[CHar]49+[CHar]32+[CHar]61+[CHar]32+[CHar]105+[CHar]110+[CHar]116+[CHar]46+[CHar]102+[CHar]114+[CHar]111+[CHar]109+[CHar]95+[CHar]98+[CHar]121+[CHar]116+[CHar]101+[CHar]115+[CHar]40+[CHar]98+[CHar]97+[CHar]114+[CHar]114+[CHar]97+[CHar]121+[CHar]91+[CHar]105+[CHar]43+[CHar]52+[CHar]58+[CHar]105+[CHar]43+[CHar]56+[CHar]93+[CHar]44+[CHar]32+[CHar]39+[CHar]108+[CHar]105+[CHar]116+[CHar]116+[CHar]108+[CHar]101+[CHar]39+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]118+[CHar]46+[CHar]97+[CHar]112+[CHar]112+[CHar]101+[CHar]110+[CHar]100+[CHar]40+[CHar]118+[CHar]48+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]118+[CHar]46+[CHar]97+[CHar]112+[CHar]112+[CHar]101+[CHar]110+[CHar]100+[CHar]40+[CHar]118+[CHar]49+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]105+[CHar]32+[CHar]43+[CHar]61+[CHar]32+[CHar]56+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]114+[CHar]101+[CHar]116+[CHar]117+[CHar]114+[CHar]110+[CHar]32+[CHar]118+[CHar]10+[CHar]10+[CHar]100+[CHar]101+[CHar]102+[CHar]32+[CHar]99+[CHar]104+[CHar]101+[CHar]99+[CHar]107+[CHar]40+[CHar]105+[CHar]110+[CHar]115+[CHar]116+[CHar]114+[CHar]58+[CHar]115+[CHar]116+[CHar]114+[CHar]44+[CHar]99+[CHar]104+[CHar]101+[CHar]99+[CHar]107+[CHar]108+[CHar]105+[CHar]115+[CHar]116+[CHar]58+[CHar]108+[CHar]105+[CHar]115+[CHar]116+[CHar]41+[CHar]45+[CHar]62+[CHar]105+[CHar]110+[CHar]116+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]108+[CHar]101+[CHar]110+[CHar]103+[CHar]116+[CHar]104+[CHar]61+[CHar]108+[CHar]101+[CHar]110+[CHar]40+[CHar]105+[CHar]110+[CHar]115+[CHar]116+[CHar]114+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]105+[CHar]102+[CHar]32+[CHar]108+[CHar]101+[CHar]110+[CHar]103+[CHar]116+[CHar]104+[CHar]37+[CHar]56+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]112+[CHar]114+[CHar]105+[CHar]110+[CHar]116+[CHar]40+[CHar]34+[CHar]73+[CHar]110+[CHar]99+[CHar]111+[CHar]114+[CHar]114+[CHar]101+[CHar]99+[CHar]116+[CHar]32+[CHar]102+[CHar]111+[CHar]114+[CHar]109+[CHar]97+[CHar]116+[CHar]46+[CHar]34+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]101+[CHar]120+[CHar]105+[CHar]116+[CHar]40+[CHar]49+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]99+[CHar]61+[CHar]99+[CHar]104+[CHar]105+[CHar]112+[CHar]101+[CHar]114+[CHar]40+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]118+[CHar]32+[CHar]61+[CHar]32+[CHar]99+[CHar]46+[CHar]98+[CHar]121+[CHar]116+[CHar]101+[CHar]115+[CHar]50+[CHar]105+[CHar]110+[CHar]116+[CHar]115+[CHar]40+[CHar]105+[CHar]110+[CHar]115+[CHar]116+[CHar]114+[CHar]46+[CHar]101+[CHar]110+[CHar]99+[CHar]111+[CHar]100+[CHar]101+[CHar]40+[CHar]41+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]111+[CHar]117+[CHar]116+[CHar]112+[CHar]117+[CHar]116+[CHar]61+[CHar]108+[CHar]105+[CHar]115+[CHar]116+[CHar]40+[CHar]99+[CHar]46+[CHar]101+[CHar]40+[CHar]108+[CHar]101+[CHar]110+[CHar]40+[CHar]118+[CHar]41+[CHar]44+[CHar]118+[CHar]41+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]105+[CHar]61+[CHar]48+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]119+[CHar]104+[CHar]105+[CHar]108+[CHar]101+[CHar]40+[CHar]105+[CHar]60+[CHar]108+[CHar]101+[CHar]110+[CHar]40+[CHar]99+[CHar]104+[CHar]101+[CHar]99+[CHar]107+[CHar]108+[CHar]105+[CHar]115+[CHar]116+[CHar]41+[CHar]41+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]105+[CHar]102+[CHar]32+[CHar]105+[CHar]60+[CHar]108+[CHar]101+[CHar]110+[CHar]40+[CHar]111+[CHar]117+[CHar]116+[CHar]112+[CHar]117+[CHar]116+[CHar]41+[CHar]32+[CHar]97+[CHar]110+[CHar]100+[CHar]32+[CHar]111+[CHar]117+[CHar]116+[CHar]112+[CHar]117+[CHar]116+[CHar]91+[CHar]105+[CHar]93+[CHar]61+[CHar]61+[CHar]99+[CHar]104+[CHar]101+[CHar]99+[CHar]107+[CHar]108+[CHar]105+[CHar]115+[CHar]116+[CHar]91+[CHar]105+[CHar]93+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]105+[CHar]43+[CHar]61+[CHar]49+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]101+[CHar]108+[CHar]115+[CHar]101+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]98+[CHar]114+[CHar]101+[CHar]97+[CHar]107+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]105+[CHar]102+[CHar]32+[CHar]105+[CHar]61+[CHar]61+[CHar]108+[CHar]101+[CHar]110+[CHar]40+[CHar]99+[CHar]104+[CHar]101+[CHar]99+[CHar]107+[CHar]108+[CHar]105+[CHar]115+[CHar]116+[CHar]41+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]114+[CHar]101+[CHar]116+[CHar]117+[CHar]114+[CHar]110+[CHar]32+[CHar]49+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]114+[CHar]101+[CHar]116+[CHar]117+[CHar]114+[CHar]110+[CHar]32+[CHar]48+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]10+[CHar]10+[CHar]105+[CHar]102+[CHar]32+[CHar]95+[CHar]95+[CHar]110+[CHar]97+[CHar]109+[CHar]101+[CHar]95+[CHar]95+[CHar]61+[CHar]61+[CHar]34+[CHar]95+[CHar]95+[CHar]109+[CHar]97+[CHar]105+[CHar]110+[CHar]95+[CHar]95+[CHar]34+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]97+[CHar]110+[CHar]115+[CHar]61+[CHar]91+[CHar]49+[CHar]51+[CHar]55+[CHar]52+[CHar]50+[CHar]55+[CHar]56+[CHar]56+[CHar]52+[CHar]50+[CHar]44+[CHar]32+[CHar]50+[CHar]49+[CHar]51+[CHar]54+[CHar]48+[CHar]48+[CHar]54+[CHar]53+[CHar]52+[CHar]48+[CHar]44+[CHar]32+[CHar]52+[CHar]49+[CHar]57+[CHar]49+[CHar]48+[CHar]53+[CHar]54+[CHar]56+[CHar]49+[CHar]53+[CHar]44+[CHar]32+[CHar]51+[CHar]50+[CHar]52+[CHar]56+[CHar]56+[CHar]56+[CHar]49+[CHar]51+[CHar]55+[CHar]54+[CHar]93+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]35+[CHar]32+[CHar]103+[CHar]101+[CHar]110+[CHar]101+[CHar]114+[CHar]97+[CHar]116+[CHar]101+[CHar]82+[CHar]101+[CHar]115+[CHar]40+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]102+[CHar]108+[CHar]97+[CHar]103+[CHar]61+[CHar]105+[CHar]110+[CHar]112+[CHar]117+[CHar]116+[CHar]40+[CHar]39+[CHar]80+[CHar]108+[CHar]101+[CHar]97+[CHar]115+[CHar]101+[CHar]32+[CHar]105+[CHar]110+[CHar]112+[CHar]117+[CHar]116+[CHar]32+[CHar]102+[CHar]108+[CHar]97+[CHar]103+[CHar]58+[CHar]39+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]114+[CHar]101+[CHar]115+[CHar]61+[CHar]99+[CHar]104+[CHar]101+[CHar]99+[CHar]107+[CHar]40+[CHar]102+[CHar]108+[CHar]97+[CHar]103+[CHar]44+[CHar]97+[CHar]110+[CHar]115+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]105+[CHar]102+[CHar]32+[CHar]114+[CHar]101+[CHar]115+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]112+[CHar]114+[CHar]105+[CHar]110+[CHar]116+[CHar]40+[CHar]34+[CHar]67+[CHar]111+[CHar]110+[CHar]103+[CHar]114+[CHar]97+[CHar]116+[CHar]117+[CHar]108+[CHar]97+[CHar]116+[CHar]105+[CHar]111+[CHar]110+[CHar]115+[CHar]44+[CHar]32+[CHar]121+[CHar]111+[CHar]117+[CHar]39+[CHar]118+[CHar]101+[CHar]32+[CHar]103+[CHar]111+[CHar]116+[CHar]32+[CHar]116+[CHar]104+[CHar]101+[CHar]32+[CHar]102+[CHar]108+[CHar]97+[CHar]103+[CHar]33+[CHar]34+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]112+[CHar]114+[CHar]105+[CHar]110+[CHar]116+[CHar]40+[CHar]34+[CHar]70+[CHar]108+[CHar]97+[CHar]103+[CHar]32+[CHar]105+[CHar]115+[CHar]32+[CHar]42+[CHar]99+[CHar]116+[CHar]102+[CHar]123+[CHar]121+[CHar]111+[CHar]117+[CHar]114+[CHar]95+[CHar]105+[CHar]110+[CHar]112+[CHar]117+[CHar]116+[CHar]125+[CHar]33+[CHar]34+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]101+[CHar]120+[CHar]105+[CHar]116+[CHar]40+[CHar]48+[CHar]41+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]101+[CHar]108+[CHar]115+[CHar]101+[CHar]58+[CHar]10+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]32+[CHar]112+[CHar]114+[CHar]105+[CHar]110+[CHar]116+[CHar]40+[CHar]39+[CHar]78+[CHar]111+[CHar]112+[CHar]101+[CHar]44+[CHar]116+[CHar]114+[CHar]121+[CHar]32+[CHar]97+[CHar]103+[CHar]97+[CHar]105+[CHar]110+[CHar]33+[CHar]39+[CHar]41'
code = re.findall('\[CHar](\d+)',code)
for i in code:
print(chr(int(i)),end='')
class chiper():
def __init__(self):
self.d = 0x87654321
k0 = 0x67452301
k1 = 0xefcdab89
k2 = 0x98badcfe
k3 = 0x10325476
self.k = [k0, k1, k2, k3]
def e(self, n, v):
from ctypes import c_uint32
def MX(z, y, total, key, p, e):
temp1 = (z.value >> 6 ^ y.value << 4) + \
(y.value >> 2 ^ z.value << 5)
temp2 = (total.value ^ y.value) + \
(key[(p & 3) ^ e.value] ^ z.value)
return c_uint32(temp1 ^ temp2)
key = self.k
delta = self.d
rounds = 6 + 52//n
total = c_uint32(0)
z = c_uint32(v[n-1])
e = c_uint32(0)
while rounds > 0:
total.value += delta
e.value = (total.value >> 2) & 3
for p in range(n-1):
y = c_uint32(v[p+1])
v[p] = c_uint32(v[p] + MX(z, y, total, key, p, e).value).value
z.value = v[p]
y = c_uint32(v[0])
v[n-1] = c_uint32(v[n-1] + MX(z, y, total,
key, n-1, e).value).value
z.value = v[n-1]
rounds -= 1
return v
def bytes2ints(self,cs:bytes)->list:
new_length=len(cs)+(8-len(cs)%8)%8
barray=cs.ljust(new_length,b'\x00')
i=0
v=[]
while i < new_length:
v0 = int.from_bytes(barray[i:i+4], 'little')
v1 = int.from_bytes(barray[i+4:i+8], 'little')
v.append(v0)
v.append(v1)
i += 8
return v
def check(instr:str,checklist:list)->int:
length=len(instr)
if length%8:
print("Incorrect format.")
exit(1)
c=chiper()
v = c.bytes2ints(instr.encode())
output=list(c.e(len(v),v))
i=0
while(i<len(checklist)):
if i<len(output) and output[i]==checklist[i]:
i+=1
else:
break
if i==len(checklist):
return 1
return 0
if __name__=="__main__":
ans=[1374278842, 2136006540, 4191056815, 3248881376]
# generateRes()
flag=input('Please input flag:')
res=check(flag,ans)
if res:
print("Congratulations, you've got the flag!")
print("Flag is *ctf{your_input}!")
exit(0)
else:
print('Nope,try again!')
剩下的就是正常的魔改xxtea解密,改了delta和MX
#include<stdio.h>
#include<stdint.h>
//#define MX (((z>>5^y<<2)+(y>>3^z<<4))^((sum^y)+(key[(p&3)^e]^z)))
#define MX (((z>>6^y<<4)+(y>>2^z<<5))^((sum^y)+(key[(e^p&3)]^z)))
//#define DELTA 0x9e3779b9
#define DELTA 0x87654321
void xxtea(uint32_t* v,int n,uint32_t const key[4]){
uint32_t y,z,sum;
unsigned p,rounds,e;
if(n>1){
rounds=6+52/n;
sum=0;
z=v[n-1];
do{
sum+=DELTA;
e=(sum>>2)&3;
for(p=0;p<n-1;p++){
y=v[p+1];
v[p]+=MX;
z=v[p];
}
y=v[0];
v[n-1]+=MX;
z=v[n-1];
}
while(--rounds);
}
else if(n<-1){
n=-n;
rounds=6+52/n;
sum=DELTA*rounds;
y=v[0];
do{
e=(sum>>2)&3;
for(p=n-1;p>0;p--){
z=v[p-1];
v[p]-=MX;
y=v[p];
}
z=v[n-1];
v[0]-=MX;
y=v[0];
sum-=DELTA;
}
while(--rounds);
}
}
int main(){
uint32_t v[]={1374278842, 2136006540, 4191056815, 3248881376};
uint32_t const k[4]={0x67452301,0xefcdab89,0x98badcfe,0x10325476};
int n=sizeof(v)/sizeof(v[0]);
xxtea(v,-n,k);
for(int i=0;i<n;i++){
printf("%c%c%c%c",v[i]&0xff,v[i]>>8&0xff,v[i]>>16&0xff,v[i]>>24&0xff);
}
}
yOUar3g0oD@tPw5H
整个chall.ps1的逻辑和假flag的逻辑异曲同工:真正逻辑在前面部分,后面echo一段废话