参考文章:蓝帽杯2021初赛 writeup+赛后复现(misc123+pwn2+web1)

1、I_will_but_not_quite

个人最喜欢这道题,因为最后的异或竟然不能逆向,还得爆破,想了半天也不知道怎么写。

首先,拿到文件是一个vmem文件和一个py加密脚本,所以怀疑是去vmem中取证拿到相关信息然后再根据加密脚本反推解密。

首先查文件、查进程,发现进程里除了系统进程还有一个winrar.exe的进程,怀疑有文件被解压缩了

1.PNG

2.PNG

查看是否有rar和zip文件,发现存在然后dump出来,发现一个exe和一张图,exe没用:

3.PNG

用到的几个指令:

./ etc/profile(个人原因)
volatility -f Twin.vmem(image name) imageinfo
volatility -f Twin.vmem pslist --profile=Win7SP1x64 
volatility -f Twin.vmem --profile=Win7SP1x64 filescan |grep rar(zip)
volatility -f Twin.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000003e557990(pid) -D /root

有图的那个zip包,注释写着:“哼!我 '看透' 你了” what s up 还把看透加了引号,那一定是outguess隐写,密码不知道,wp直接猜出了弱密码是123456,这太巧了,到了这里我是做不下去了,然后解出一段hex。

4266gj2zn17b2jo5b62k73g22xg6j658350r5771vd40h4bd2ns33q30651y57s6752su3q05881hs3h53nb3603co2mv40l58n3da3f61i5

弃坑点二,这个十六进制转不了啊,然后看wp是双十六进制转码,转码地址:

https://www.calcresult.com/misc/cyphers/twin-hex.html

解出来一段密文就是通过python加密后的密文了,需要通过加密脚本反推flag

Vnw3HC07BDgbBWNRGTx2fSckf399V1Z9CxIvHVd6fHsaEnR8fX40NyQ7JhM8CWV5fgMNN24=
#!/user/bin/python2
import random
def r(s, num):
	l=""
	for i in s:
		if(ord(i) in range(97,97+26)):
			l+=chr((ord(i)-97+num)%26+97)
		else:
			l+=i
	return l

def x(a, b):
	return chr(ord(a)^ord(b))

def encrypt(c):
	secret = c
	n=random.randint(1,1000)
	for i in range(n):
		secret = r(secret, random.randint(1,26))
	secret = secret.encode('base64')

	l = ""
	for i in range(len(secret)):
		l += x(secret[i], secret[(i+1)%len(secret)])
	return l.encode('base64')

flag = "#################"
print "secret =", encrypt(flag)

#secret = The key you got


看加密逻辑还是蛮简单的(是我年轻),主函数encrypt,然后取小写字母去做凯撒移位(因为范围26),然后取个随机数重复这么多回,然后把内容base,再去逐位异或,最后再做一个base64得到上面的密文;

那么反推就是:先去base64解密,然后逐位异或,再base64解密,再去遍历凯撒,随机数可以忽略,因为最后的答案一定是26种凯撒中的一个。

看着简单,但是反逆异或时我死活也写不出来,问题出在 (secret[i], secret[(i+1)%len(secret)] 这样的话最后一位要去异或第一位,反推咋写也写不对,看wp也没看懂,弃坑点3,参照wp遍历出来了,以下这几行不知为啥:

for i in range(86,128):
	j = 1
	tmp = [""]*len(dec)
	tmp[-1] = chr(i)#爆破恢复最后一位,即可恢复所有
	while j != len(dec):
		tmp[-j-1] = chr(ord(dec[-j])^ord(tmp[-j])) #反着进行异或
		j += 1
	s = tmp[-1] #因为最后一位是最后一位和第一位异或,所以刚开始异或的其实是最后一位
	for i in range(len(tmp)-1):
		s += tmp[i]#这里即是将第2位至最后一位拼接起来加在第一位后面

5.PNG

2、冬奥会_is_coming

冬奥会_is_coming ? oh_it_is_fucking_coming。开局一张图,既然是misc题,那就日常先看看图里面的内容,发现有个MP3:

6.PNG

rar压缩包里注释提示密码是8位数字,这里用mp3stego去解,因为题目不叫冬奥会 coming啥的么,所以猜测密码是冬奥会开幕日20220204,还不错,猜对了。然后就来了一串阴间的,这里做不下去了,看wp去了

Decode.exe -X -P 20220204 encode.mp3

7.PNG

看了wp.用010打开mp3尾部还有段密文,需要把这段16进制放到http://stool.chinaz.com/hex解码得到一堆emoji表情。。

8.PNG

9.PNG

顺便把刚才mp3解出的内容hex解码一下(去掉\x):

10.PNG

这又是什么玩意啊,接着看wp,需要去https://lingojam.com/WingdingsTranslator把这段解密,我真讨厌做杂项,这都什么这太阴间了吧,想砍人了。解了密出来一段内容让去看看github这个仓库,发现有一个文件,下载下来

11.PNG

打开来了有一串类似秘钥的东西,还回到刚才emoji,有个相关的emoji解密也需要key,解解看:

https://aghorler.github.io/emoji-aes/

🙃💵🌿🎤🚪🌏🐎🥋🚫😆🎃✅⌨🔪❓🚫🐍🙃🔬✉👁😆🎈🐘🏎🐘🐘😂😎🎅🖐🐍✉🍌🌪🐎🍵✅🚪✖☃👣👉ℹ🔪🍎🔄👣🚪😁👣💵🐅🍵🔬🛩😇🖐🖐🎅✅🏎👌🚨😆🎤🎅🦓🌿🦓🙃✖🍌🛩😂👑🌏☃😇😍🛩🚹😀🍌🎈💧🗒🗒
How_6ad_c0uld_a_1cePeak_be?

flag{e32f619b-dbcd-49bd-9126-5d841aa01767}  服了
3、嫌疑人x的硬盘整理

直接看wp,参考Bitlocker加密盘解密实例,用X-Ways打开题目vmdk文件,分区2被bitlocker加密,分区3有解密秘钥。

12.PNG

13.PNG

用OSFMount挂载vmdk,进入需要输入秘钥,选择更多里的输入恢复秘钥,把刚才txt文件中的秘钥输进去:

14.PNG

解出来一个xlsx和一个exe,要开始逆向了。。。

15.PNG

查壳,感觉有壳,然后用x64dbg打开,好像有反调试,不让调,wp说需要用sharpOD反反调试操作一波

装完后直接F9,跟了几个断点搜了下字符串,找到flag。

16.PNG

17.PNG

插件设置:

18.PNG


标题:2021蓝帽杯 Misc题目复现
作者:jyl
地址:http://jinyunlong.xyz/articles/2021/08/16/1629084928949.html