题目链接 http://bxs.cumt.edu.cn/challenge/reverse/%E8%AF%BE%E5%A0%828.exe
打开题目
main函数这里大致流程可以读懂,输入一串长度63位的字符,进行一串处理后,得到V3,将存在byte_403024[]处的字符串逐个与v3异或,然后得到flag.
但是前面的函数阅读起来十分困难,绕地圈很多,动态调试也没有找到头绪。
然后学到了新的概念"信息泄露",这样单独与某一个字符进行异或,可以进行爆破来进行破解。
i=[100,0,71,71,67,4,70,80,107,5,71,107,64,4,4,4,4,4,4,4,4,4,4,4,4,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4,4, 4, 4 ,4 ,4, 4 ,4, 4 ,4 ,4 ,4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 107, 88 ,4 ,4, 83, 21]
print(len(i))
for j in range(65,123):
for k in i:
print(chr(k^j),end=" " )
i为存放在byte_4032024处的63位字符。
以上是我写的Python脚本,但是运行起来很慢...
于是写了C++的
#include
using namespace std;
int main(){
int i[63]={100,0,71,71,67,4,70,80,107,5,71,107,64,4,4,4,4,4,4,4,4,4,4,4,4,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4,4, 4, 4 ,4 ,4, 4 ,4, 4 ,4 ,4 ,4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 107, 88 ,4 ,4, 83, 21};
for(int j=0;j<=124;j++){
for(int k=0;k<63;k++){
cout<