日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[SUCTF2018]babyre [ACTF新生赛2020]fungame

發(fā)布時(shí)間:2025/3/21 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [SUCTF2018]babyre [ACTF新生赛2020]fungame 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • [SUCTF2018]babyre
    • 慣用思維
    • 常人思維
    • GAMEOVER
  • [ACTF新生賽2020]fungame
    • int __cdecl sub_401340(int a1)
    • int __cdecl sub_4013BA(char *Source)

[SUCTF2018]babyre

慣用思維

首先呢,是個(gè)bin文件,需要用binwalk把文件提取出來。

binwalk -e [SUCTF2018\]babyre.bin



是一個(gè)xml文件,我打開后除了正常結(jié)構(gòu)就是亂碼。。。

然后就沒法分析了。。。xml不能放在ida里面分析。。

常人思維

查看一下文件類型,居然是64位的exe程序,任何東西都保持懷疑的態(tài)度。。笑死人。。。。

如下就是數(shù)據(jù)庫,可以利用這些字符進(jìn)行運(yùn)算得到一些其它的字符進(jìn)行輸出

v7[0] = 2;v7[1] = 3;v7[2] = 2;v7[3] = 1;v7[4] = 4;v7[5] = 7;v7[6] = 4;v7[7] = 5;v7[8] = 10;v7[9] = 11;v7[10] = 10;v7[11] = 9;v7[12] = 14;v7[13] = 15;v7[14] = 12;v7[15] = 13;v7[16] = 16;v7[17] = 19;v7[18] = 16;v7[19] = 17;v7[20] = 20;v7[21] = 23;v7[22] = 22;v7[23] = 19;v7[24] = 28;v7[25] = 25;v7[26] = 30;v7[27] = 31;v7[28] = 28;v7[29] = 25;v7[30] = 26;v7[31] = 31;qmemcpy(v8, "$!\"'$!\"#().+$-&/81:;4=>7092;<567HIBBDDFGHIJJMMONPPRSUTVWYYZ[\\]^^``ccdeggiikklmnnpprstuwwxy{{}}", 94);v8[94] = 127;v8[95] = 127;v8[96] = -127;v8[97] = -127;v8[98] = -125;v8[99] = -125;v8[100] = -116;v8[101] = -115;v8[102] = -114;v8[103] = -113;v8[104] = -120;v8[105] = -119;v8[106] = -118;v8[107] = -117;v8[108] = -116;v8[109] = -115;v8[110] = -114;v8[111] = -121;v8[112] = -104;v8[113] = -111;v8[114] = -110;v8[115] = -109;v8[116] = -108;v8[117] = -107;v8[118] = -106;v8[119] = -105;v8[120] = -104;v8[121] = -103;v8[122] = -102;v8[123] = -102;v8[124] = -100;v8[125] = -100;v8[126] = -98;v8[127] = -98;v8[128] = -96;v8[129] = -96;v8[130] = -94;v8[131] = -94;v8[132] = -92;v8[133] = -92;v8[134] = -90;v8[135] = -90;v8[136] = -88;v8[137] = -88;v8[138] = -86;v8[139] = -86;v8[140] = -84;v8[141] = -84;v8[142] = -82;v8[143] = -82;v8[144] = -80;v8[145] = -79;v8[146] = -78;v8[147] = -77;

這里的話就是利用數(shù)據(jù)區(qū)的字符進(jìn)行一系列運(yùn)算,然后進(jìn)行flag的賦值,然后接著一個(gè)函數(shù)進(jìn)行字符輸出。

while ( v9[30] ){--v9[30];for ( j = 22; j; v9[j] |= v13 << v9[30] ){v12 = v7[22 * v9[30] + --j];v13 = (v12 >> ((v10[0] >> (2 * v9[30])) & 3)) & 1;}}

輸入不同的key然后就會(huì)有不同的字符輸出,我們需要找到輸出flag的key,而flag字符的特征就是SUCTF,如果就這種特征,那么就進(jìn)行輸出

if (flag[0] == 'S' && flag[1] == 'U' && flag[2] == 'C' && flag[3] == 'T' && flag[4] == 'F'){for (int i = 0; i < 22; i++)printf("%c", flag[i]);system("pause");}

GAMEOVER

SUCTF{Flag_8i7244980f}

[ACTF新生賽2020]fungame

int __cdecl sub_401340(int a1)

flag=[None]*16 b="" y1=[0x23, 0x61, 0x3E, 0x69, 0x54, 0x41, 0x18, 0x4D, 0x6E, 0x3B, 0x65, 0x53, 0x30, 0x79, 0x45, 0x5B ] y2=[0x71, 0x04, 0x61, 0x58, 0x27, 0x1E, 0x4B, 0x22, 0x5E, 0x64, 0x03, 0x26, 0x5E, 0x17, 0x3C, 0x7A ] for i in range(len(y1)):a=hex(y2[i]^y1[i])b+=chr(y2[i]^y1[i])flag[i]=a print(b) Re_1s_So0_funny!

然而卻是錯(cuò)誤,看第二個(gè)函數(shù)

int __cdecl sub_4013BA(char *Source)

int __cdecl sub_4013BA(char *Source) {char Destination[12]; // [esp+1Ch] [ebp-Ch] BYREFstrcpy(Destination, Source);strcpy(x, Source);return 0; } strcpy(Destination, Source);

這行代碼導(dǎo)致棧溢出,然后導(dǎo)致返回地址被覆蓋,緊接著返回的時(shí)候就沒法正確返回,以至于程序過了第一個(gè)函數(shù),第二個(gè)函數(shù)結(jié)束時(shí),就自動(dòng)gg。

我一直好奇和其它博主輸入一樣,然后棧溢出導(dǎo)致返回地址覆蓋時(shí),改變后卻不一樣,嗯哼????出題人強(qiáng)行整活。。

strcpy(x, Source);

這里有個(gè)全局變量x,要找這個(gè)線索,固定了前16字節(jié)字符,后面覆蓋值需要自己算,然后跳入_sub_40233D這個(gè)函數(shù)。說白了就是一個(gè)pwn題,跟re無關(guān)。

_sub_40233D這個(gè)函數(shù)是出題人自己搞的,它也不會(huì)自動(dòng)覆蓋跳,需要玩家手動(dòng)算。歐了,base64,這題目對(duì)于re玩家毫無價(jià)值,對(duì)于pwn玩家有太簡單。搞不懂re庫為啥會(huì)有這種???

輸入:Re_1s_So0_funny!,返回地址如下:
輸入:Re_1s_So0_funny!0,返回地址如下:

這個(gè)題完全沒有必要繼續(xù)研究,就是出題人強(qiáng)行整活,作為re題的話,直接沒法做;作為pwn題的話,又太無聊,總結(jié)——————湊數(shù)題(跳轉(zhuǎn)不固定,flag固定,這咋做?腦洞?)

總結(jié)

以上是生活随笔為你收集整理的[SUCTF2018]babyre [ACTF新生赛2020]fungame的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。