ScreenShot_2026-04-03_162146_130.png
这题不算难,但是有一点坑
放die里看看啥文件,懒得查壳了,看不到函数再去查壳吧
ScreenShot_2026-04-03_162232_689.png
64位elf文件,放ida64,看主要代码
ScreenShot_2026-04-03_162808_291.png


解释一下(i & 1):i与1按位与运算,比如3 & 1 == (二进制)1 1 & 0 1 == 0 1 == 1
                                     4 & 1 == (二进制)1 0 0 & 0 0 1 = 0 0 0 == 0 
所以i & 1的作用就是划分奇数偶数

奇数的话就把p[i]左移三位,偶数的话就p[i]*i

exp:

#include <iostream>
using namespace std;
int main()
{
    long long p[19] = {
        198,   232,   816,   200,   1536,
        300,   6144,  984,   51200, 570,
        92160, 1200,  565248,756,   1474560,
        800,   6291456,1782, 65536000
    };
    for (int i = 1; i <= 19; i++)
    {
        if (i % 2 == 1)
        {
            p[i-1] = p[i-1] >> i;
            cout << char(p[i - 1]);
        }
        else
        {
            p[i-1] = p[i-1] / i;
            cout << char(p[i - 1]);
        }
    }
    return 0;
}