@TOC

Rev_Dizzy

这个题是比赛里最简单的一道题,也是我唯一做出来的题(菜),本来开始想着用angr能直接跑出来,后来怎么也调试不好,所以就用了笨办法,结果一下就出来了。。

用ida打开后,可以在主函数明显看到逻辑
输入32位的字符,通过4000多行加密,最后与已知的字符串比较
在这里插入图片描述在这里插入图片描述

题目很简单,只需要把4000多行加密代码逆序就行,异或不变,加变成减,减变成加,用已知字符串作为输入,就可以解密此过程
(代码不贴了,太长了)

勒索病毒

比赛时这个题做出来的人也挺多,当时脑子尽想这从rsa下手,误了自己
同时这个也使用了好多crypto api,查资料查的脑子疼

前面这段我猜时获取路径和文件信息,没有什么用
在这里插入图片描述
这块用了这个api进行加密,然后释放
在这里插入图片描述这块就是核心加密的部分,大概就是,把sub_b77290里的字符串md5加密,再和时间戳混合起来(里面有移位操作)作为密钥,把密钥进行sha256加密,作为aes的key
这块获取pbData也可以通过调试的方式,拿到数据

在这里插入图片描述这块唯一不确定的就是时间戳,我看了好多脚本用的是爆破的手法,其实看加密文件的属性,直接获取他的时间戳
在这里插入图片描述
然后写脚本获取

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 hashlib
from pwn import*
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad,pad
key=bytearray([ 0xB2, 0x2F, 0xC6, 0x0E, 0x4F, 0xD4, 0x54, 0x4B, 0x05, 0x11,
0x1A, 0x61, 0x21, 0xE7, 0xB1, 0x8E])
f1=open("C:\\XX_CTF_XX\\flag.bmp.ctf_crypter","rb")
f2=open("C:\\XX_CTF_XX\\flag.bmp","wb")
data = f1.read()
for i in range(1):
time_data = 0x611a1105 - i
a=p32(time_data)
print(p32(time_data))
print(key)
key[8:12]=a
k = hashlib.sha256(key).hexdigest()
k=bytes.fromhex(k)[:16]
iv=b'\x00'*15+b'\x00'
aes = AES.new(k,AES.MODE_CBC,iv)
f2.write(aes.decrypt(pad(data,16)))

x=aes.decrypt(pad(data,16))
print(x[:16])
if x[:2] == "\x42\x4D":
print("eeeee")
break

我同样也是尝试了爆破获取,
但是这块我出现了一个问题就是 解密出来的文件和原来的bmp文件格式有一点区别
在这里插入图片描述开头不是BM,而是\xc2M,其他的数据都一样,但是电脑最后自己把他转化为了BM 可以拿到flag
如果是这样的话,那我爆破就不可能出来,不知道哪里出了问题