比赛开始后十几分钟还没上题,差点以为比赛取消了
前两题纯签到,后面两题有点意思,不过难度也是签到级别的
easyre:
发现main函数反编译不出来,在前面有一大坨花指令:
1 | .text:00411DA8 xor eax, eax |
全部nop掉,反编译得到main:
1 | __int64 sub_411D80() |
发现有一个base64表,一个RC4和一个异或,密文为[0x41, 0xf1, 0xcb, 0x7d, 0x08, 0x08, 0x5c, 0x69, 0xe9, 0xf9, 0x35, 0x58, 0x59, 0x68, 0xc2, 0x12, 0xc1, 0xd9, 0xbb, 0x2f, 0x6d, 0x11, 0x84, 0x00],由于全是对称加密,动态调试直接patch带入密文,得到flag:NSSCTF{This_1S_rc4_3ASY}.
EzCpp:
查看main:
1 | int __fastcall main_0(int argc, const char **argv, const char **envp) |
得知flag长度为23,查看关键函数:
1 | __int64 __fastcall sub_140016980(const char *a1, __int64 a2, __int64 a3) |
发现是先和harker
循环异或然后base64编码并和密文比较,解密得到flag{Cpp_15_V3rry_345y},把flag换成NSSCTF就能提交了.
EzProcessStruct:
查看关键函数:
1 | int __stdcall sub_401000(int a1, int a2) |
发现了密文SkISV6U@b5Q1_6cwejUqc4Iaf5Q~ejQtNTA>
和可能的加密方式(两个异或?),其中上方的DbgPrint
输出的是某个系统内容的版本号,结合题目描述中提到的操作系统是win7
,异或0x7
后得到TlNTQ1RGe2V6X1dpbmRvd3Nfa2VybmVsISF9
,base64解码得到flag:NSSCTF{ez_Windows_kernel!!}.
ezminiprograme:
发现是一个微信小程序,先查看wxml文件:
1 | <!-- index.wxml --> |
得到关键函数onCheck
,用wxappUnpacker
解包__APP__.wxapkg
,在其中的app-service.js
找到关键函数:
1 | Page({data:{inputValue:"",animationData:{}},onLoad:function(){var t=wx.createAnimation({duration:1e3,timingFunction:"ease"});t.opacity(1).translateY(0).step(),this.setData({animationData:t.export()})},onInputChange:function(t){this.setData({inputValue:t.detail.value})},generateSbox:function(t){for(var a=[],n=t.length,e=[],o=0;o<256;o++)a.push(o),e.push(t.charCodeAt(o%n));for(var i=0,r=0;r<256;r++){var s,u;s=[a[i=(i+a[r]+e[r])%256],a[r]],a[r]=s[0],a[i]=s[1],u=[a[(i+1)%256],a[(r+1)%256]],a[(r+1)%256]=u[0],a[(i+1)%256]=u[1]}return a},onCheck:function(){var t=this.data.inputValue;if(""!==t.trim()){for(var a=t.split(""),n=this.generateSbox("NSSCTF2025"),e=0,o=0,i=0;i<a.length;i++){var r=[n[e=(e+n[o=(o+n[i%256])%256])%256],n[o]];n[o]=r[0],n[e]=r[1];var s=n[(n[o]+n[e])%256];a[i]=String.fromCharCode(a[i].charCodeAt(0)^s)}var u=a.map((function(t){return t.charCodeAt(0)}));console.log(u);JSON.stringify(u)===JSON.stringify([216,156,159,86,8,143,254,92,113,3,228,74,37,80,146,68,71,42,137,132,170,85,13,196,226,152,120,176,184,36,195,233,123,230,89,10,121,180,5,219])?wx.showToast({title:"太强了!",icon:"success",duration:2e3}):wx.showToast({title:"再试试喔",icon:"error",duration:2e3})}else wx.showToast({title:"请输入内容",icon:"none",duration:2e3})}}); ; |
(没错,反编译出来就是这样一坨,真的很难受)
发现了密钥NSSCTF2025和密文,还原加密逻辑:
1 | def generate_sbox(key): |
得到flag:NSSCTF{c6e67111c1aadd1bdc4dad6d99c254e7}.