【cnss】新手教程:断点和异常


打了一下cnss的新生赛,也是学到了点新东西


__debugbreak

__debugbreak是个 api 当发生bug的时候要进行跳转进入到处理函数,这个题的关键就在debugbreak的处理函数中


【cnss】新手教程:断点和异常

假的flag骗我感情

fake_flag

查看伪代码

main


跟进base64

base64

发现这根本不是base64就是个异或

但是要注意这个debugbreak,先下个断点


动调

动调

发现跟进不了debugbreak怎么办呢


先跟进上面的key,

key


然后再跟进byte_40B0478

findsub

发现跟进到的另一个函数


这一大串是将真正的密文计算传到cipher

enc


切换到汇编,注意这里有两个反调试

反调试

运行完后就会传到cipher,然后结合之前的key写脚本就可以了

1
2
3
4
5
6
7
8
9
10
11
12
enc = [0x2A, 0x22, 0x1C, 0x05, 0x1E, 0x32, 0x0D, 0x07, 0x79, 0x53,
0x09, 0x14, 0x2C, 0x61, 0x0B, 0x12, 0x52, 0x6B, 0x45, 0x05,
0x7A, 0x56, 0x5E, 0x0C, 0x70, 0x2E, 0x0B, 0x4F, 0x48, 0x61,
0x5B, 0x57, 0x2C, 0x06, 0x08, 0x11, 0x79, 0x2F, 0x56, 0x46,
0x57, 0x7E, 0x2A, 0x43, 0x7A, 0x5B, 0x6F, 0x4E, 0x78, 0x22,
0x1B, 0x0B]
xor = [0x49, 0x4C, 0x6F, 0x76, 0x65, 0x53,
0x68, 0x31, 0x4E, 0x30, 0x3F, 0x21]
flag = ''
for i in range(52):
flag += chr(enc[i] ^ xor[i%12])
print(flag)