buuctf usualcrypt
拿到题目给的压缩包,解压得到三个文件

其中有一个是苹果系统的,一个是windows系统,还有一个不知道是干什么的。。,总之先查看文件信息

32位无壳
直接在IDA中反编译,直接看main函数

程序很清晰,输入存储到v10,然后用sub_401080函数加密,while循环判断加密后的密文是否正确,byte_40E0E4数组可以直接看到,也就是密文

然后就看加密函数,跟进看伪代码

最开始执行了sub_401000函数,对byte_40E0AA和byte_40E0A0数组做了改变,其实两个数组也是一起用的

然后看后面的while循环

这个操作很像我之前做过的base64加密的一道题,而且byte_40E0A0数组正好是base64的标准编码表(可以参考buuctf reverse3这道题)
然后后面是两个if语句,进哪一个取决于v5的值,v5=2是继续做base64的加密操作,v5=1则有些不同

而v5是和flag的长度有关的,分析两个if语句的赋值可以知道都是赋值了四个字符,而我们得到的密文长度是36,那么上面while循环里赋值了32个字符,32%3=2,所以进的应该是第二个if循环,所有的字符都是base64方式的加密,但是编码表有改变,前面sub_401000函数改变了编码表数组
然后的sub_401030函数把得到的字符串大小写互换,得到最终的密文,知道流程后就可以写脚本了,这里我没有写完整的脚本,而是一步一步解决问题的

将密文大小写转换(后来知道有个swapcase方法可以直接转换。。。)

然后将改变后的编码表应用到base64解密方式里就可以得出flag了

不知道为什么前面两个字符有点问题。。。不过总体不影响,最后的flag为flag{bAse64_h2s_a_Surprise}

浙公网安备 33010602011771号