矿大BXSCTF-RE-入门8

题目链接 http://bxs.cumt.edu.cn/challenge/reverse/%E8%AF%BE%E5%A0%828.exe

打开题目

矿大BXSCTF-RE-入门8_第1张图片

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<

得到结果矿大BXSCTF-RE-入门8_第2张图片

 

你可能感兴趣的:(学习记录,ctf,逆向工程)