re 新手区
第一题
- 首先peid判断不是pe文件,后直接用IDA打开,搜索关键字flag,找到相关语句,发现只有一行带有flag:“9447{This_is_a_flag}”,且下面有提示:’Congrats, you hacked me!’,故得到flag。
第二题
- 首先用 PEID打开查看,发现无壳,用IDA打开发现main函数,进行静态分析。
- 首先在一个while循环里发现了一个asuccess,追寻原址,发现是输出‘success’,故应使程序运行到此,而此条件是v10==v13,根据上一个循环得出,v10是输入的v9(字符串),转十六进制得到的,而v13则给了”437261636b4d654a757374466f7246756e,故将v13转字符串得到flag:CrackMeJustForFun
第三题
- 下载文件发现直接是一个代码文件,打开对代码进行分析。从后往前看,发现得到的hash值得十六进制形式即为flag,然后开始审代码。
- 第一个if定义了字符串组中字符串得个数,第二个if表明first=51966,第三个if表明(second % 17)=8,第四个if表明argv[3]=7,分别带入表达式,计算结果转为十六进制数得到flag:c0ffee
第四题
- 首先peid无法查看,故用ExEinfo PE查看,发现是upx加壳,在cmd中叭壳脱去
- 脱壳后,打开64位IDA,找到main函数,在右侧发现flag:flag{Upx_1s_n0t_a_d3liv3r_c0mp4ny}
第五题
- 首先用ExEinfo PE打开查看,发现无壳,直接用IDA打开,发现是64位,进行静态分析
- 摁“shift+F12”查找字符串,找到关键字符串:“You entered the correct password!\”,找到下面的数据交叉引用,F5审伪代码,然后跳转到外部引用,发现需要程序走到该处。
- 审伪代码,发现要走到正确的地方,需要“if ( s[i] != (char)(((_BYTE *)&v7 + i % v6) ^ v8[i]) )”不成立,即s[i] = (char)(((_BYTE *)&v7 + i % v6) ^ v8[i]).
上面要输入的也是s[i],故判断s[i]即为flag。而上部分代码已经给出v7,v6,v8[i],故根据这些写出脚本。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define BYTE unsigned char
int main()
{
char s[18];
char v8[18]=":\"AL_RT^L*.?+6/46";
__int64 v7 = 28537194573619560;
int v6=7;
for(int i=0;i<strlen(v8);i++)
{
s[i]=(char)(*((BYTE *)&v7 + i % v6) ^ v8[i]);
}
for(int i=0;i<18;i++)
{
printf("%c",s[i]);
}
return 0;
}
- 运行后得到flag:RC3-2016-XORISGUD
第七题
- 首先打开,发现是一个简单的游戏,用peid打开,发现无壳,直接用OD打开进行动态调试
- 首先智能搜索找到了关键字get flag,双击找到地址:00E0E968,然后再跟踪游戏进行调试,进入第一个call时会弹出游戏框架,此时找到“n=”的地址,下断,并将下一个指令改为无条件跳转00E0E968,保存,运行程序则可直接得到flag:zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}
第九题
- 首先用ExEinfo PE打开,发现无壳,用IDA打开,找到main函数,f5伪代码分析。
- 首先倒着看,发现有用的两个输出,其中一个输出aFlag_0,找回发现,对应的是flag错误,那么说明应该得到另一个输出。判断if语句得到v3应该等0,此时有v3 = strcmp((const char *)&v5, &v9);,故得到v5=v9,又因为输入的v9是一个字符串,故v5应该也是一个字符串,且该字符串即为flag,向上继续寻找,发现xmmword_413E34与赋予v5得字符串有关,双击找回发现后面跟着一串数据,A转化为字符串得到flag:DUTCTF{We1c0met0DUTCTF}。
misc 新手区
第一题
- 题目Most flags are in the form flag{xxx}, for example:flag{th1s_!s_a_d4m0_4la9},故得到flag:flag{th1s_!s_a_d4m0_4la9}
第二题
- 发现图片格式是pdf,而题目提示是图片下面有flag,那么就考虑先把图片从pdf中提取出来,百度了一下,发现有能把pdf转为word的在线工具,转换后想对图片分析,结果发现图片上面就贴着flag:flag{security_through_obscurity}
第三题
- 下载下来是一个word,打开是一串佛语,想到以前看的与佛论禅,直接搬过去翻译得到MzkuM3gvMUAwnzuvn3cgozMlMTuvqzAenJchMUAeqzWenzEmLJW9,本来直接去base64,结果失败,后来看了wp才知道题目如来十三章是指rot13,转换后得到ZmxhZ3tiZHNjamhia3ptbmZyZGhidmNraWpuZHNrdmJramRzYWJ9,再拿去base64得到flag:flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab}
第四题
- 下载文件,发现是一张gif,使用GifSplitter拆开后,发现第49张有一个残缺位置探测图形的二维码,在网上找到位置探测图形,用ps P在一起,qr扫描得到flag:flag{e7d478cf6b915f50ab1277f78502a2c5}
第五题
- 下载文件,发现是java编译的一个小游戏,直接通关可以得到flag{RGFqaURhbGlfSmlud2FuQ2hpamk=},拿去base64转换得到flag:flag{DajiDali_JinwanChiji}
- 也可以打开JD-GUI,进行反编译,直接ctrl+f搜索字符串flag,得到flag{RGFqaURhbGlfSmlud2FuQ2hpamk=},拿去base64转换得到flag:flag{DajiDali_JinwanChiji}
第六题
- 下载zip,解压缩后得到一堆黑白图片,有点像二进制码或者摩斯电码,先转化为二进制码:01100110011011000110000101100111011110110100011001110101010011100101111101100111011010010100011001111101,经过二进制转字符串得到flag:flag{FuN_giF}
crypto 新手区
第一题
- 题目给了提示为base64,下载txt,复制内容到base64转换工具,得到flag:cyberpeace{Welcome_to_new_World!}
第二题
- 根据题目:“Caesar”的谐音读出是凯撒密码,找到在线转换网站,把txt中的内容复制进去进行尝试。当位移是12时,发现转换出来的字符串变得有意义,得到flag:cyberpeace{you_have_learned_caesar_encryption}
第三题
- 根据题目:“Morse”的谐音读出时摩斯,故判断为摩斯电码,找到在线转换的网站,把txt中的电码进行转换得到:morsecodeissointeresting,配上格式得到flag:cyberpeace{morsecodeissointeresting}
第四题
- 先打开txt,观察发现,应该是base64,尝试后,得到一串Unicode编码,找到在线工具转换后,又得到一串base64,再进行转换后得到:“/119/101/108/99/111/109/101/116/111/97/116/116/97/99/107/97/110/100/100/101/102/101/110/99/101/119/111/114/108/100”尝试用c写一下脚本:(我比较弱智,需要手动去“\”加“ ”)
#include<stdio.h>
#include<string.h>
int main()
{
int c,d=0;
int a[1000];
char b[1000];
for(int i=0;1;i++)
{
scanf("%d",&c);
if(c==-1)
{
break;
}
else
{
d++;
a[i]=c;
}
}
for(int i=0;i<d;i++)
{
b[i]=a[i];
}
for(int i=0;i<d;i++)
{
printf("%c",b[i]);
}
return 0;
}
- 得到:welcometoattackanddefenceworld ,添加框架后得到flag:cyberpeace{welcometoattackanddefenceworld}