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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

REVERSE-PRACTICE-BUUCTF-18

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 REVERSE-PRACTICE-BUUCTF-18 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

REVERSE-PRACTICE-BUUCTF-18

    • [SWPU2019]ReverseMe
    • [FlareOn1]Bob Doge
    • [FlareOn5]Ultimate Minesweeper
    • [GKCTF2020]Chelly's identity

[SWPU2019]ReverseMe

exe程序,運行后提示輸入flag,輸入錯誤打印“Try again”,無殼,ida分析
交叉引用字符串“Please input your flag:”來到sub_C22810函數
主要的邏輯為
獲取輸入,輸入的長度為32,輸入與字符串"SWPU_2019_CTF"循環異或,sub_C225C0函數對異或后的input進行處理,結果放在v27和v28,最后v27和v28與v36~v43比較,驗證輸入

int __thiscall sub_C22810(void *this) {int v1; // eaxint v2; // ecxint v3; // eaxint v4; // esisigned int v5; // ediunsigned int v6; // kr00_4int *v7; // ecxint *input_copy; // ecxint *v9; // ecx__int128 *v10; // edxunsigned int v11; // ediint v12; // eaxint v13; // eaxbool v14; // cfunsigned __int8 v15; // alunsigned __int8 v16; // alunsigned __int8 v17; // alconst char *v18; // edxint v19; // eaxint v20; // eaxint v22; // [esp-14h] [ebp-D8h]int v23; // [esp-10h] [ebp-D4h]int *input; // [esp+24h] [ebp-A0h]int v25; // [esp+34h] [ebp-90h]unsigned int v26; // [esp+38h] [ebp-8Ch]__int128 v27; // [esp+3Ch] [ebp-88h]__int128 v28; // [esp+4Ch] [ebp-78h]int v29; // [esp+5Ch] [ebp-68h]__int128 v30; // [esp+60h] [ebp-64h]__int128 v31; // [esp+70h] [ebp-54h]int v32; // [esp+80h] [ebp-44h]__int64 v33; // [esp+84h] [ebp-40h]int v34; // [esp+8Ch] [ebp-38h]__int16 v35; // [esp+90h] [ebp-34h]int v36; // [esp+94h] [ebp-30h]int v37; // [esp+98h] [ebp-2Ch]int v38; // [esp+9Ch] [ebp-28h]int v39; // [esp+A0h] [ebp-24h]int v40; // [esp+A4h] [ebp-20h]int v41; // [esp+A8h] [ebp-1Ch]int v42; // [esp+ACh] [ebp-18h]int v43; // [esp+B0h] [ebp-14h]int v44; // [esp+C0h] [ebp-4h]v25 = 0;v26 = 15;LOBYTE(input) = 0;v44 = 0;LOBYTE(v44) = 1;v1 = printf(this, "Please input your flag: ");printf_(v1);sub_C237B0(&dword_C50068, &input); // 獲取輸入inputv34 = 'TC_9'; // v33~v35:"SWPU_2019_CTF"v33 = qword_C4B9A0;v35 = 'F';if ( v25 == 32 ) // 輸入的長度為32{v40 = 0xBA143D17;v41 = 0x1D730350;v42 = 0x9404607A;v43 = 0x290AF070;v5 = 0;v30 = 0i64;v32 = 0;v31 = 0i64;v6 = strlen((const char *)&v33);do // do循環體是input和"SWPU_2019_CTF"循環異或{v7 = (int *)&input;if ( v26 >= 16 )v7 = input;*((_BYTE *)v7 + v5) ^= *((_BYTE *)&v33 + v5 % v6);++v5;}while ( v5 < 32 );input_copy = (int *)&input;v4 = (int)input;if ( v26 >= 0x10 )input_copy = input;v29 = 0;v27 = 0i64;v28 = 0i64;*(_QWORD *)&v30 = *(_QWORD *)input_copy;*((_QWORD *)&v30 + 1) = *((_QWORD *)input_copy + 1);*(_QWORD *)&v31 = *((_QWORD *)input_copy + 2);*((_QWORD *)&v31 + 1) = *((_QWORD *)input_copy + 3);sub_C225C0(v22, v23, 256, (unsigned int)&v30, (unsigned int)&v27);// 對異或后的input進行處理,結果放在v27和v28v36 = 0xF80F37B3;v37 = 0x5DAEBCBC;v9 = &v36;v38 = 0x864D5ABA;v10 = &v27;v39 = 0xD3629744;v11 = 28;v40 = 0x1624BA4F;v41 = 0x1A729F0B;v42 = 0x266D6865;v43 = 0x67C86BBA;while ( 1 ) // while循環體是sub_C225C0函數對異或后input的處理結果與v36~v43比較{v12 = *v9;if ( *v9 != *(_DWORD *)v10 )break;++v9;v10 = (__int128 *)((char *)v10 + 4);v14 = v11 < 4;v11 -= 4;if ( v14 ) // v14為1,即v11<4時,驗證正確{v13 = 0;goto LABEL_19;}}v14 = (unsigned __int8)v12 < *(_BYTE *)v10;if ( (_BYTE)v12 != *(_BYTE *)v10|| (v15 = *((_BYTE *)v9 + 1), v14 = v15 < *((_BYTE *)v10 + 1), v15 != *((_BYTE *)v10 + 1))|| (v16 = *((_BYTE *)v9 + 2), v14 = v16 < *((_BYTE *)v10 + 2), v16 != *((_BYTE *)v10 + 2))|| (v17 = *((_BYTE *)v9 + 3), v14 = v17 < *((_BYTE *)v10 + 3), v17 != *((_BYTE *)v10 + 3)) ){v13 = -v14 | 1;}else{v13 = 0;} LABEL_19:if ( v13 ) // v13為0時,驗證正確v18 = "Try again!\r\n";elsev18 = "Congratulations! I always knew you could do it.";v19 = printf(v9, v18);printf_(v19);sub_C2ADBE("pause");}else{v3 = printf(v2, "Try again!\r\n");printf_(v3);sub_C2ADBE("pause");v4 = (int)input;}if ( v26 >= 0x10 ){v20 = v4;if ( v26 + 1 >= 0x1000 ){v4 = *(_DWORD *)(v4 - 4);if ( (unsigned int)(v20 - v4 - 4) > 0x1F )sub_C2AFF7(v26 + 36);}sub_C264DE(v4);}return 0; }

sub_C225C0函數對異或后的input進行處理,可通過下內存斷點得知具體情況
首先在調用sub_C225C0函數前下斷點,開始調試

輸入為abcdefghijklmnopqrstuvwxyz123456,經過與"SWPU_2019_CTF"的循環異或及變量賦值后,v30即為input循環異或后的結果

在0x4FF858處按F2下內存斷點

按F9執行,來到一個v30(下圖中為v25)與v28異或的地方

可知sub_C225C0函數是對循環異或后的input的結果的再一次異或,但是不知道異或的是哪些值
由于我們輸入是“abcdefghijklmnopqrstuvwxyz123456”,與"SWPU_2019_CTF"異或后的結果v30是確定的,可以通過調試得到sub_C225C0函數調用完后,結果v27和v28的值,再用v30異或v27和v28得到sub_C225C0函數中參與異或運算的另一些值
調試得到v27和v28為

寫逆運算腳本即可得到flag

#coding:utf-8 #a是兩次異或后,v27和v28的數據 a=[0xB4, 0x39, 0x0D, 0xFB, 0xA2, 0x83, 0xF9, 0x40, 0xB2, 0x42,0x43, 0x9E, 0x41, 0x9C, 0x4F, 0x90, 0x4D, 0xBC, 0x76, 0x41,0x3E, 0xB6, 0x53, 0x0B, 0x6E, 0x66, 0x29, 0x75, 0xE5, 0x1C,0xBE, 0x2C] #b是input第一次異或后,v30的數據 b=[0x32, 0x35, 0x33, 0x31, 0x3A, 0x54, 0x57, 0x59, 0x50, 0x35,0x28, 0x38, 0x2B, 0x3D, 0x38, 0x20, 0x24, 0x2D, 0x41, 0x44,0x44, 0x4F, 0x28, 0x3B, 0x2D, 0x3C, 0x62, 0x65, 0x63, 0x61,0x6A, 0x04] #a^b即可得到sub_C225C0函數中參與異或運算的另一些值 #cipher是最后要比較的數據 cipher=[0xB3, 0x37, 0x0F, 0xF8, 0xBC, 0xBC, 0xAE, 0x5D, 0xBA, 0x5A,0x4D, 0x86, 0x44, 0x97, 0x62, 0xD3, 0x4F, 0xBA, 0x24, 0x16,0x0B, 0x9F, 0x72, 0x1A, 0x65, 0x68, 0x6D, 0x26, 0xBA, 0x6B,0xC8, 0x67] s="SWPU_2019_CTF" flag="" for i in range(len(cipher)):flag+=chr(a[i]^b[i]^cipher[i]^ord(s[i%len(s)])) print(flag) #flag{Y0uaretheB3st!#@_VirtualCC}

[FlareOn1]Bob Doge

exe程序,運行后點擊“DECODE”,看到一段不明白意義的字符串

查殼,發現是.Net程序,用dnSpy打開
找到“DECODE”按鈕的響應函數,看到該函數會得到三個字符串text,text2和text3,調試看看這三個字符串分別是什么

可以看到,字符串text即為flag

[FlareOn5]Ultimate Minesweeper

exe程序,運行后是個掃雷游戲,一共30x30=900個格子,897個雷,只有3個不是雷,提示說找到那3個不是雷的格子就能得到flag
查殼,發現是.Net程序,用dnSpy打開
先找到決定彈出失敗(FailurePopup)或成功(SuccessPopup)對話框(ShowDialog)的SquareRevealedCallback函數

選中SquareRevealedCallback函數名,右鍵->分析->被使用,來到MainForm函數

挨著點進去分析,發現在AllocateMemory函數會對900個格子,每個格子賦一個bool值,雷的格子賦為true,非雷的格子賦為false

在this.VALLOC_TYPES數組中就保存著非零格子的信息,但是不知道具體下標

調試,在執行完“this.mineFieldControl.DataSource = this.MineField;”后,在GarbageCollect數組中可以看到,雷的格子為true,非雷為false

找到3個非雷格子的位置分別為[7,20],[24,28],[28,7]



運行exe程序,點出3個非雷的格子(注意[]中第一個坐標為列,第二個坐標為行,且均從0開始),即可得到flag

[GKCTF2020]Chelly’s identity

exe程序,運行后輸入,無殼,ida分析
交叉引用字符串“flag is flag{(your answer)}!”來到sub_41C290函數
主要邏輯為,獲取輸入,驗證輸入長度是否為16,對輸入進行處理(實際上為對輸入進行異或運算),驗證處理后的輸入

sub_411721->sub_41B3B0
首先獲取2~128之間的素數,存到v12
然后進入while循環體,while里面有個小的for循環,for循環中的i小于輸入字符的ascii碼,且i每次的取值是2~128之間的素數,for循環中v9從0開始累加i,當i的取值大于等于輸入字符的ascii碼時,退出for循環,輸入和累加好的v9異或,再進入下一次while循環,直到輸入的每個字符都完成異或運算

從sub_411852函數中取出最后要比較的數據,寫逆腳本即可得到flag

#coding:utf-8 import gmpy2 res=[438,1176,1089,377,377,1600,924,377,1610,924,637,639,376,566,836,830] sushu=[] #獲取2~128之間的素數 for i in range(2,128):if gmpy2.is_prime(i):sushu.append(i) flag="" for i in range(len(res)):for j in range(32,128):#爆破input的字符tmp=0for k in range(len(sushu)):if sushu[k]<j: #sushu[k]相當于i,小于input字符的ascii碼且為2~128之間的素數tmp+=sushu[k] #v9累加else:breakif j^tmp==res[i]: #異或后比較相等flag+=chr(j) print(flag) #Che11y_1s_EG0IST 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的REVERSE-PRACTICE-BUUCTF-18的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人妻丰满熟妇av无码区hd | 日本一区二区视频免费 | 超碰蜜桃 | 日韩成人午夜影院 | 成年人视频免费看 | 国产-第1页-浮力影院 | 激情都市一区二区 | 欧美午夜在线 | 一本一道无码中文字幕精品热 | 97人人在线| 国产精品一区久久 | 婷婷午夜激情 | 国产精品久久久久久久裸模 | 黄av网| 黄色在线资源 | 51成人 | 黄视频在线 | 亚洲精品日韩丝袜精品 | 亚洲一区二区免费视频 | 蜜臀久久99静品久久久久久 | 毛片毛片毛片毛片毛片毛片毛片 | 好吊操精品视频 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 1024在线视频 | 亚洲最新在线 | 国产传媒中文字幕 | 亚洲欧美日韩精品在线观看 | 91超级碰| 成人国产在线 | 日韩网站在线 | 88福利视频 | 99久久久无码国产精品性波多 | 一本色道久久hezyo无码 | 欧美日韩一区二区三区在线视频 | 亚洲最色网站 | 欧美一区二区激情 | 99国产精品久久 | 香港日本韩国三级网站 | 亚洲欧洲日韩av | avtt在线播放 | 一区二区三区在线免费观看视频 | 欧美日韩视频在线观看免费 | 日本热久久 | 50度灰在线 | 88久久精品无码一区二区毛片 | 内射合集对白在线 | 久久久av网站 | 亚洲欧美日韩一区在线观看 | 日本一区二区三区视频免费看 | 日日拍拍 | 四川话毛片少妇免费看 | 黄色一级片免费观看 | 91福利网址 | 中文字幕免费在线观看视频 | 中文字幕在线观看视频一区 | 国产一区二区啪啪啪 | 精品精品 | 一级a毛片免费观看久久精品 | 一级片在线观看免费 | exo妈妈mv在线播放高清免费 | 国产精品一二三四 | 欧美一级二级三级视频 | 国产999 | 欧美精品二区三区四区免费看视频 | 四虎影院一区 | 免费午夜视频在线观看 | 欧美一本在线 | 天天射天天草 | 佐佐木明希电影 | 成人日韩| 国产精品国产一区二区 | 韩国成人在线 | 爱情岛论坛永久入址在线 | 伊人青青草 | 国产精品久久久久久久毛片 | 黄色片播放器 | 国产寡妇亲子伦一区二区三区四区 | 人人草人人爱 | 亚洲欧美强伦一区二区 | 舐め犯し波多野结衣在线观看 | 97视频网站| 日韩女优在线观看 | 久草视频资源 | 成年人晚上看的视频 | 天堂久久爱 | 欧美成人午夜精品免费 | 国产18页| 免费在线播放视频 | 久久av综合 | 亚洲xx站| 日本三级午夜理伦三级三 | 2020亚洲天堂 | 国产精品2区 | 50一60岁老妇女毛片 | 欧美黑人多人双交 | 欧美少妇性生活 | 天堂网资源 | 亚洲欧美日韩久久 | 中文字幕在线一区二区三区 |