这是某个夜黑风高的晚上,室友都出去了,就我一人在寝室默默做题 QwQ
vigenere
key:VIGENER?????
p:SECCON{?????????????????????????????????}
c:LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ
然后求密文,密文的 MD5 值已经给出
学长的做法是把 MD5 值发布出去。QAQ
由于我不知道发布出去的姿势,而且后面五位是不知道的,所以只好暴力枚举
#include <iostream>
using namespace std;
char a[30][30];
string d;
char x,y;
int main()
{
freopen("ans.txt","w",stdout);
for (int i=0;i<28;i++) { getchar();getchar(); cin>>d;
for (int o=0;o<28;o++) a[i][o]=d[o];
getchar();
}
string initt=" ";
string key="VIGENER ";
string ansss="LMIG\\RPEDOEEWKJIQIWKJWMNDTSR\\TFVUFWYOCBAJBQ";
for (key[7]='A';key[7]<='Z';key[7]++)
for (key[8]='A';key[8]<='Z';key[8]++)
for (key[9]='A';key[9]<='Z';key[9]++)
for (key[10]='A';key[10]<='Z';key[10]++)
for (key[11]='A';key[11]<='Z';key[11]++)
{
for (int i=0;i<ansss.size();i++)
{
for (int o=0;o<28;o++)
if (a[o][key[i%12]-'A']==ansss[i]) cout<<(char)(o+'A');
}
bool flag=1;
for (int i=7;i<initt.size()-1;i++) if (initt[i]=='[' || initt[i]=='\\') flag=0;
if (initt[initt.size()-1]!='\\') flag=0;
initt[6]='{';
initt[initt.size()-1]='}';
if (flag) cout<<initt<<endl;
}
}
生成了所有可能的 flag,然后用 Python 去算 MD5 值,跟给的值比较
import hashlib
f = open("ans.txt")
line = f.readline()
while line:
m = hashlib.md5()
m.update(line)
psw = m.hexdigest()
if (psw=='f528a6ab914c1ecf856a1d93103948fe') : print (line)
m = hashlib.md5()
m.update(line.lower())
psw = m.hexdigest()
if (psw=='f528a6ab914c1ecf856a1d93103948fe') : print (line)
line = f.readline()
print 'noanswer'
voip
一道流量分析,不过居然不是 TCP 的,是 UDP 的,然后发现里面好像在跟什么对话?
将里面的东西处理一下,发现是一个 .au 的音频文件。
然后听上去,卧槽根本听不清楚
传不上来- -
有兴趣的私我,我给你听听=w=
Anti-Debugging
自己的解法
直接发现,I have a pen. 输进去应该就对了。
不过我做的时候,比赛结束了。。哈?
update(2016.12.15):
别人的解法
Windowsのexe問題。Windows環境があれば、OllyDbgとIDAですぐ解けます。
anti-debugが入る前(0x4013A3あたり)でbreak
eipを復号処理 0x401663に飛ばす
check(0x401737)あたりでbreak
flagはスタックに書いてある
SECCON{check_Ascii85}
ちゃんとやるならパッチをあてるとかですかね。
quote:http://jptomoya.hatenablog.com/entry/2016/12/12/140136
总结
还是不会稍微难的题目。之做出了300+人都能解出的题目。
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!