一.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