看雪Ctf 2019

神秘来信

IDA反编译, 然后看算法, 输入6个字符, 第4, 5, 6位分别为3, 5, 3

前三位加起来等于149

然后一个循环

v3 = input[0] + 16 0 - 48
v3 = input[1] + 16
v3 - 48

v3 = input[5] + 16 * v3 - 48

动态调试以后发现会把输入的6个字符变成一组hex, 然后看到地址0x401353处有点可疑, 尝试输入, 就成功了…有点迷, 挖个坑有时间研究一下

失落的岛屿

看了下逻辑大概是输入0x30字节, 然后base64, 然后一波变换

base64的字符表也是非常规的:

tuvwxTUlmnopqrs7YZabcdefghij8yz0123456VWXkABCDEFGHIJKLMNOPQRS9+/

那么就是写出来前面的变换算法的逆算法, 然后用这个字符表解base64

逆算法:

m = '!NGV%,$h1f4S3%2P(hkQ94=='
c = ''
for i in m:
temp = ord(i)
if temp == 119:
c += chr(43)
elif temp == 121:
c += chr(47)
elif temp > 47 + 50 and temp <= 57 + 50 :
c += chr(temp - 50)
elif temp > 96 - 64 and temp <= 122 - 64:
c += chr(temp + 64)
elif temp < 155 - 64 and temp >= 155 - 90 :
c += chr(155 - temp)
else:
c += chr(temp)

print(c)

得到aMTEeld6q4tHserKh69Jyt==

用工具Converter.exe指定编码表即可得到flag