第二届CN-fnst::CTF逆向AK

就这个爽,只有一道逆向🥺🥺🥺

AmaZing_BruteForce

 首先查壳,发现有壳

84dcc4d75309426ab8aef2b6a03bddc7.png

有壳,用upx工具解壳,在upx文件夹目录打开终端,输入

upx -d [完整文件路径]

af66b77b3c1148518648afc6760a6669.png 显示解壳成功,再次查壳

93b0fb99c35945f9bf6f46eb5f424dc3.png

无壳,且为64可执行文件,用ida64打开,找到main函数

a03d14f2ece04d9e8e4cebd97bcbb9fa.png

 分析可知v4是由四个小写字母组成的数组,v5数组这里采用小端存储,可按shift+e提取数据

6f1eac108b8c4150b8b32e81066c048c.png

且v5进入了一个加密函数,双击跟进函数

9ba91de6231144eda2bd0ffba507c3c8.png可知v5数组跟前面的v4异或可得结果,根据文件名提示force和分析代码猜测前面四个字母为flag,且采用爆破,直接上脚本

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main(){
    unsigned char v5[] = {
        0x08, 0x05, 0x0A, 0x02, 0x15, 0x23, 0x3E, 0x36,
        0x3A, 0x36, 0x2F, 0x55, 0x31, 0x58, 0x3F, 0x18
    };
    char v4[11];
    for(int i=0;i<4;i++){
        for(char j='a';j<='z';j++){
            if(i==0&&(char)(j^v5[i])=='f'){
                v4[i]=j;
                break;
            }
            if(i==1&&(char)(j^v5[i])=='l'){
                v4[i]=j;
                break;
            }
            if(i==2&&(char)(j^v5[i])=='a'){
                v4[i]=j;
                break;
            }
            if(i==3&&(char)(j^v5[i])=='g'){
                v4[i]=j;
                break;
            }
        }
    }
    int c4 = 4, c5 = 16;
    for (int i = 0; i < 16; ++i ) {
        v5[i]^=v4[i%c4];
        printf("%c",v5[i]);
    }
}
//flag{JUST_D0_1T}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值