好吧,全部都是ELF文件,但依然想
0x00 日常查壳 给了三个文件,如题名一样,简单的文件系统,不过主逻辑在这个文件
0x01 分析simlefs 浏览了一遍主函数无疑我们关心的是plantflag
随机数出来的v21和v22我们无法逆,不过关键点就是在参数1的那次进去
注意在这打开了我们的flag文件,然后进入了关键的函数,像参数为2调用了rand根本没法逆
观看这个Encode函数完全可逆,v4动调即得,密文通过观察image.flag获得(毕竟在这个文件找不到
0x02 GetData! 设置好参数,起飞(开调
输入好参数
动调可以直接拿到v4的值和加密后的*CTF{后的值,于是我们可以通过这个值去找密文
即可得到
0x03 GetFlag! 拿这个密文直接解密即可得到flag
也可以观察整个文件发现有多出密文,从0x33000开始,每隔0x1000就会有一段密文,读取解密也可
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 27 28 29 def Decrypt(encFLag): flag = "" for i in range(len(encFLag)): v5 = encFLag[i] v5 = (v5 >> 3) | (v5 << 5) & 0xFF v5 ^= 0xDE v5 = (v5 >> 4) | (v5 << 4) & 0xFF v5 ^= 0xED v5 = (v5 >> 5) | (v5 << 3) & 0xFF v5 ^= 0xBE; v5 = (v5 >> 6) | (v5 << 2) & 0xFF v5 ^= 0xEF; v5 = (v5 >> 7) | (v5 << 1) & 0xFF flag += chr(v5) return flag data = open('C:\\Users\\Pz\\Desktop\\STARCTF\\Simple File System\\image.flag', 'rb').read() encFlags = [list(data[0x33000 + i * 0x1000: 0x33000 + i * 0x1000 + 32]) for i in range(200)] for flag in encFlags: p = Decrypt(flag) if "*CTF" in p: print(flag) print(p) break # encFlags = open('C:\\Users\\Pz\\Desktop\\STARCTF\\Simple File System\\encFlag.flag', 'rb').read() # print(Decrypt(encFlags))
GetFlag!