BUUCTF-level1 writeup
解压得到一个文件和一个output文本文档

Exeinfo PE查一下文件

64位,无壳
打开文本文档

应该是程序的输出
将文件拖进IDA

程序开始进行了读入文件操作,将读入的内容存储在字符串ptr中,再对ptr进行加密,最后输出

观察加密算法可以发现,当i的最低位为1时,对ptr进行移位运算,为0时,ptr乘以i
即对奇数下标项左移i位,对偶数下标项*i

写解密算法
1 #include <stdio.h> 2 int main() 3 { 4 int i,a[20]={0,198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000}; 5 for(i=1;i<=19;i++) 6 if(i&1) 7 printf("%c",a[i] >> i); 8 else 9 printf("%c",a[i] / i); 10 }
运行得flag

buuoj要求包上flag{},flag为
flag{d9-dE6-20c}

浙公网安备 33010602011771号