吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1588|回复: 0
收起左侧

[CTF] 2022春节红包之三 writeup

[复制链接]
洋洋不得意 发表于 2022-2-16 09:51
exeinfope查壳显示UPX,用UPX /d 脱壳失败。。。那就用esp大法直接jump到OEP保存文件。 输入UID和KEY后,UID一个进行了一个简单的计算,不知道要干啥。。 接着往下调试 定位关键判断
图片2.png

经过数次调试后, 发现同一个UID的在sub_4011B0中算法是固定的 大概如下:
[C] 纯文本查看 复制代码
void sub_4011B0(char* p)
{
    while (1)
    {
        char& i = *p++;
        if (i == 0)
            break;
        if (i >= 'a' && i <= 'z')
        {
            int x = i - 0x16 - 0x61;
            x *= 3;
            x = x % 0x1a;
            x += 0x61;
            x += 0x1a;
            i = x;
        }
        else if (i >= 'a' && i <= 'z')
        {
            int x = i - 0x16 - 0x41;
            x *= 3;
            x = x % 0x1a;
            x += 0x41;
            x += 0x1a;
            i = x;
        }
    }
}


但是!有瑕疵!我写了个反函数,求不出对应的key(拿到key后反向也是验证错误) 咋办...。做了一会web题,也做不出来(哭),又回来做这个题,忽然想到一个小技巧,可以把[a-zA-Z]全部输入到key里面,让源程序给我把映射算出来。于是乎:
图片1.png

求得映射为 mpsvybehknqtwzcfiloruxadgjMPSVYBEHKNQTWZCFILORUXADGJ  
最后写个程序:
[C] 纯文本查看 复制代码
int main()
{
    char arr1[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char arr2[] = "mpsvybehknqtwzcfiloruxadgjMPSVYBEHKNQTWZCFILORUXADGJ";

    char key[] = "flag{Happy_New_Year_52Pojie_2022}";
    for (auto it : key)
    {
        if (!isChar(it))
        {
            printf("%c", it);
            continue;
        }

        for (int i = 0; i < 52; ++i)
        {
            if (arr2[i] == it)
            {
                printf("%c", arr1[i]);
                break;
            }
        }
}
}

 


程序打印结果 prwy{Hwbbe_Jgm_Egwt_52Bszqg_2022}输入源程序 验证正确 取了个巧,有点菜,算法没逆出来,写不出注册机

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-25 15:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表