1. Auth_System
改标志位ZF
2. 茶
壳脱不脱也没啥影响
查一下字符串,有个hint
那就猜测chacha20(根本没想到)
ChaCha20 - Crypto++ Wikihttps://www.cryptopp.com/wiki/ChaCha20
法一:脚本解密
加密需要两个参数,key(16-32字节)和nonce(8字节)
所以Is_This_TEA?只要前八个字节
字符串可以定位到一个初始化的函数,有疑似的参数可以猜测着尝试一下
#cha wp
from Crypto.Cipher import ChaCha20
enc_data = bytes.fromhex("f568c48912eed6dc520c7164f44b6378e1d0d3e248914fa8847b405a131f")
key = b"SGludDogSW1wcm92ZSBvZiBTYWxzYTIw"= b"Is_This_"
cc = ChaCha20.new(key=key, nonce=nonce)
print(cc.decrypt(enc_data))
#flag{But_I_Like_ChaCha20_More}
法二:动调
chacha20和RC4一样是流密码,可以通过动态调试解密,只要把密文输进去再跑一遍就可以
经过动调可以摸索出大致的逻辑
随便输一串输入,长度尽量长一些方便把密文patch到input里面(密文也可以动调在crypto里取),断在scanf后面
之前得到的密文f568c48912eed6dc520c7164f44b6378e1d0d3e248914fa8847b405a131f
是42行转化为16进制之后的结果,不过不方便转化为可见字符,所以我们patch到input里面去
F9到转16进制前面
3. PyLu
注意用最新版的pyinstxtractor.py,不然魔数会有乱七八糟的问题
z3爆一下,要跑一会
#PyLu wp
import z3
from Crypto.Util.number import *
def enc(key):R = bytes_to_long(b'Welcome To PaluCTF!')MOD = 2 ** 418R = R ^ R - 60 >> 24R = R ^ R - 60 << 88R ^= keyR = -R * R * 2024 % MOD #BitVec不支持乘方运算,这里手动改成连乘R = R * key % MODreturn R
cor = 0x2E441F765514CCA89173554726494D37E9FBE774B6F807BC5F6E71117530CE3D7DB5F70554C03CD9055F4E42969600904DF1F4DB8
key = z3.BitVec("key", 418)s = z3.Solver()
s.add(enc(key) == cor)
s.check()
m = s.model()flag = long_to_bytes(m[key].as_long())
print(flag)
#b'flag{e88f88d7-4d75-462b-8447-bf4ab7aeab1a}'
4. 帕鲁被病毒攻击了
逆向为啥搞得像Misc!
图片啥也没有,把高度改长一点
得到一个压缩包,里面是一些样本文件
也不知道怎么找,纯Misc题 0n3_n00b_ru1n5_0n3_hundr3d_pr05
5. O2
elf头被改,第五位01改成02(64位)
F5失败,有个函数分析有问题
2356行分析失败了
好像是参数有什么错误,不过直接nop也没影响
重点就第26行
动调找找参数呢,密钥好像怪怪的
密文不知道是哪个,也许是obj
翻一下字符串有些奇怪的东西
定位一下
似乎是密文和key,input是个假的
#O2 wp
from string import printableenc = bytearray.fromhex("364d4d5c3e387e00421c597a0a7302144d5b70087e064619567336297d151f56770a7935424f2a780643")key = "PaluCTF"
#爆破
for i in range(len(enc)):for c in printable:if (ord(c) + ord(key[i % len(key)])) % 128 == enc[i]:print(c, end="")break
#来自Ciallo~(∠・ω<)⌒☆战队的wp
#flag{d80a0d76-23af-486e-a0bc-43a463eac552}
6. Reverse-签到(什么鬼名字,明明巨难)
Go语言写的,代码非常地难看
大致是把local.txt中的数据加密到encrypted.txt中了
这一部分实际上创建了一个Map集合
Go 语言 Map(集合) | 菜鸟教程
相当于制作了一个字典,将规定的字符映射到一个值(索引值)上
加密过程实际上就是 原字符+索引值
不过解有点多
#re签到 wp
map = {'a':3, 'l':1, 'f':4, 'g':2, '{':-1, '}':-2, '1':5, '2':7, '3':-3, '4':-3, '5':-3, '6':-3, '7':-3, '8':-3, '9':-3}
import string
import itertools
table = "flag{123456789}"
enc = "jmdiz61904646906034535196{"
flag = [0]*len(enc)
def checkflag(idx,result):if(idx == -1):print("flag爆破完成!")for i in range(len(result)):print(chr(result[i]),end="")print("")returnfor j in table:if chr(ord(j) + map[j]) == enc[idx]:result[idx] = ord(j)checkflag(idx-1, result)if(j == 128 and result[idx] == 0):return
checkflag(25, flag)
'''
for i in range(0,len(enc)):for j in table:if chr(ord(j) + map[j]) == enc[i]:flag += j
print(flag)
'''
'''
flag爆破完成!
flag{14237171231367868421}
flag爆破完成!
flag{94237171231367868421}
flag爆破完成!
flag{14237971231367868421}
flag爆破完成!
flag{94237971231367868421}
flag爆破完成!
flag{14237179231367868421}
flag爆破完成!
flag{94237179231367868421}
flag爆破完成!
flag{14237979231367868421}
flag爆破完成!
flag{94237979231367868421}
flag爆破完成!
flag{14237171239367868421}
flag爆破完成!
flag{94237171239367868421}
flag爆破完成!
flag{14237971239367868421}
flag爆破完成!
flag{94237971239367868421}
flag爆破完成!
flag{14237179239367868421}
flag爆破完成!
flag{94237179239367868421}
flag爆破完成!
flag{14237979239367868421}
flag爆破完成!
flag{94237979239367868421}
flag爆破完成!
flag{14237171231367868429}
flag爆破完成!
flag{94237171231367868429}
flag爆破完成!
flag{14237971231367868429}
flag爆破完成!
flag{94237971231367868429}
flag爆破完成!
flag{14237179231367868429}
flag爆破完成!
flag{94237179231367868429}
flag爆破完成!
flag{14237979231367868429}
flag爆破完成!
flag{94237979231367868429}
flag爆破完成!
flag{14237171239367868429}
flag爆破完成!
flag{94237171239367868429}
flag爆破完成!
flag{14237971239367868429}
flag爆破完成!
flag{94237971239367868429}
flag爆破完成!
flag{14237179239367868429}
flag爆破完成!
flag{94237179239367868429}
flag爆破完成!
flag{14237979239367868429}
flag爆破完成!
flag{94237979239367868429}
'''
7. Misc签到
27880
30693
25915
21892
38450
23454
39564
23460
21457
36865
112
108
98
99
116
102
33719
21462
21069
27573
102
108
97
103
20851
27880
79
110
101
45
70
111
120
23433
20840
22242
38431
22238
22797
112
108
98
99
116
102
33719
21462
21518
27573
102
108
97
103
中文ASCII码对照表_汉字的ascii码对照表-CSDN博客
汉字字符集编码查询;中文字符集编码:GB2312、BIG5、GBK、GB18030、Unicode
也可以用脚本
ascii_text = '''
27880
30693
25915
21892
38450
23454
39564
23460
21457
36865
112
108
98
99
116
102
33719
21462
21069
27573
102
108
97
103
20851
27880
79
110
101
45
70
111
120
23433
20840
22242
38431
22238
22797
112
108
98
99
116
102
33719
21462
21518
27573
102
108
97
103
'''text = ""ascii_codes = ascii_text.strip().split()
for ascii_code in ascii_codes:char = chr(int(ascii_code))text += charprint("转换结果:", text)
#转换结果: 注知攻善防实验室发送plbctf获取前段flag关注One-Fox安全团队回复plbctf获取后段flag