一.MISC
1.XGCTF
直接ai搜索一遍找到了出題人的博客LamentXU 2024-2025年終總結 - LamentXU - 博客園
知道了原題是ciscn中的
在LamentXU的博客亂逛Patriot CTF 2024 MISC 部分 wp - LamentXU - 博客園
?找到了博客網站,讓后搜索ciscn扎到了博客
CISCN華東南WEB-Polluted | Dragonkeep
直接f12搜flag
base64編碼得到flag
flag{1t_I3_t3E_s@Me_ChAl1eNge_aT_a1L_P1e@se_fOrg1ve_Me}
2.會飛的雷克薩斯
2025年1月30日W1ndys上網沖浪時,收到了舍友發來的聊天記錄,聊天記錄顯示,一小孩放鞭炮引爆地面,請定位爆炸點的具體位置,該題解出需要通過正常的osint題目做題思路
?flag{xx省xx市xx縣xxx路xxxxxx內}
首先就看到了車牌云A和貴C查看是云南省昆明市或者是貴州省遵義市
猜測是南方地區
一個一個試試看,先昆明市,讓后在百度地圖搜索電話直接出了地方
圖片失效了qwq
?和旁邊的店鋪也能對上,直接查找新聞四川資中熊孩子放鞭炮疑點燃沼氣發生爆炸,車被掀翻損失上百萬|資中縣|四川省|煙花爆竹_網易訂閱
得到flag
flag{四川省內江市資中縣春嵐北路中鐵城市中心內}
二.RE
1.WARMUP
是.vbs文件,所以用文本編輯器打開把前面的Execute改成wscript.echo
之后在pycharm中找了插件直接運行拿到了源碼
讓后改一下源碼輸出FLAG主要是把16進制再轉成字符這一步,讓后在輸出的時候使用WScript.Echo
來在命令行中輸出文本
Function RunRCDecrypt(cipherHex, strKey)Dim kLen, i, j, temp, pos, outTextDim s(255), k(255)Dim cipherByte, plainCharDim cipherBytes(), cipherPos' 將十六進制字符串轉換為字節數組cipherPos = 1ReDim cipherBytes(Len(cipherHex) \ 2 - 1)For pos = 1 To Len(cipherHex) Step 2cipherBytes(cipherPos - 1) = CByte("&H" & Mid(cipherHex, pos, 2))cipherPos = cipherPos + 1Next' 初始化密鑰kLen = Len(strKey)For i = 0 To 255s(i) = ik(i) = Asc(Mid(strKey, (i Mod kLen) + 1, 1))Next' KSA密鑰調度j = 0For i = 0 To 255j = (j + s(i) + k(i)) Mod 256temp = s(i)s(i) = s(j)s(j) = tempNext' PRGA解密流程i = 0 : j = 0 : outText = ""For pos = 0 To UBound(cipherBytes)i = (i + 1) Mod 256j = (j + s(i)) Mod 256temp = s(i)s(i) = s(j)s(j) = temp' 解密并轉為明文cipherByte = cipherBytes(pos)plainChar = cipherByte Xor s((s(i) + s(j)) Mod 256)outText = outText & Chr(plainChar)NextRunRCDecrypt = outText
End Function' 測試解密
Dim cipherHex, key, decryptedText
cipherHex = "90df4407ee093d309098d85a42be57a2979f1e51463a31e8d15e2fac4e84ea0df622a55c4ddfb535ef3e51e8b2528b826d5347e165912e99118333151273cc3fa8b2b3b413cf2bdb1e8c9c52865efc095a8dd89b3b3cfbb200bbadbf4a6cd4"
key = "rc4key"
decryptedText = RunRCDecrypt(cipherHex, key)
WScript.Echo "Decrypted Text: " & decryptedText
Decrypted Text: flag{We1c0me_t0_XYCTF_2025_reverse_ch@lleng3_by_th3_w@y_p3cd0wn's_chall_is_r3@lly_gr3@t_&_fuN!}
讓后按照要求格式把flag{}中包含的內容使用md5加密再用XYCTF{}包含,嘗試了幾次最后小寫是正確的答案
XYCTF{5f9f46c147645dd1e2c8044325d4f93c}
2.熱身賽re2
進入ida可以知道flag長度32位,讓后給出了密文,之后有一個塊加密沒有見過
使用了SSE指令集和SIMD變換和驗證,可以學習一下
一文讀懂SIMD指令集 目前最全SSE/AVX介紹_sse avx-CSDN博客https://blog.csdn.net/qq_32916805/article/details/117637192?ops_request_misc=%257B%2522request%255Fid%2522%253A%25227f9f25209cc39c02497705d5338c5656%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=7f9f25209cc39c02497705d5338c5656&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~hot_rank-3-117637192-null-null.142^v102^pc_search_result_base4&utm_term=SSE%E5%92%8CSIMD&spm=1018.2226.3001.4187
之后就是分析我們這里的加密邏輯:
加載數據,重新排列,加法加密,所以我們查看v8和v9對應的數據即可,注意大小段序
#include<stdio.h>int main()
{char enc[]="cge87k?9<>?@=pss393=>;8@:Cp@DAuH";char flag[33];char key[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};for(int i=0;i<32;i++){flag[i]=enc[i]-key[i%16];} puts(flag);int i; for(i=15;i>=0;i--){printf("%c",flag[i]);}for(i=31;i>=16;i--){printf("%c",flag[i]);}return 0;
}
//beb42e8134440bdc2709951819e473f8
//cdb0444318e24beb8f374e9181599072