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}

 

posted @ 2021-01-08 22:24  KaguyaSaikou  阅读(142)  评论(0)    收藏  举报