矿大BXSCTF-RE-入门8

35 篇文章 0 订阅
30 篇文章 1 订阅

题目链接 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<iostream>
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<<char(i[k]^j%128);
	}
	cout<<endl;
}
}

得到结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值