吾爱破解2025新春红包题之二-Window初级题

初级题,100%应该不会有壳,先运行起来随便输入,看看报什么错误

搜一下x32dbg重新启动程序并搜索字符串

前面有一个je,前面还有一个cmp esi edi,在次下断点并运行,esi的值是6,edi的值是1B(27),显然不等,将je改为jne,继续运行

不停的向下跟,一个27次的循环结束后,flag会出现在ebp-40的地址里,后面会被复制给ECX

至此,flag已经找到了,复制输入,成功!

其实这个程序是先检查字符串长度是否为27,然后再将6b83537e8a30477b3e59362e4c293535340c5b5a5c797f5073747e进行计算,还原成答案,与输入进行比对,如果换成用输入反向计算去与目标字符串比对,难度无疑对新手不太友好。

flag是按位加算的,写成C代码逻辑如下

int main(int argc, char** argv)
{
    unsigned char encFlag[] = {
          0x6b, 0x83, 0x53, 0x7e, 0x8a, 0x30, 0x47, 0x7b
        , 0x3e, 0x59, 0x36, 0x2e, 0x4c, 0x29, 0x35, 0x35
        , 0x34, 0x0c, 0x5b, 0x5a, 0x5c, 0x79, 0x7f, 0x50
        , 0x73, 0x74, 0x7e 
    };
    unsigned char flag[28] = { 0 };
    int edx = 0x7e9;//2025
    int v90 = 0x80000000;
    for (int i = 0; i < 27; i++)
    {
        int eax = (0x41C64E6D * edx + 0x1E240) % (int)v90;
        edx = eax;
        long long tmp = (long long)eax * 0x4ec4ec4f;
        eax = (tmp >> 32) & 0xFFFFFFFF;
        eax = eax >> 3;
        eax = ((eax + ((unsigned int)eax >> 0x1F)) & 0xff) * 0x1A;
        flag[i] = encFlag[i] + ((eax & 0xFF) - (edx & 0xFF)) & 0xFF;
    }

    printf("%s\n", flag);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿捏利

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值