目录
  1. 1. re 新手区
    1. 1.1. 第一题
    2. 1.2. 第二题
    3. 1.3. 第三题
    4. 1.4. 第四题
    5. 1.5. 第五题
    6. 1.6. 第七题
    7. 1.7. 第九题
  2. 2. misc 新手区
    1. 2.1. 第一题
    2. 2.2. 第二题
    3. 2.3. 第三题
    4. 2.4. 第四题
    5. 2.5. 第五题
    6. 2.6. 第六题
  3. 3. crypto 新手区
    1. 3.1. 第一题
    2. 3.2. 第二题
    3. 3.3. 第三题
    4. 3.4. 第四题
攻防世界

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}

文章作者: Sakura式
文章链接: http://yoursite.com/2020/01/30/%E6%94%BB%E9%98%B2%E4%B8%96%E7%95%8C/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo
打赏
  • 微信
  • 支付寶