IDA打开

跟进sub_4010F0函数

这个函数用来读取输入,并将输入存入byte_403078中。
sub_401020函数是用来计算字符串长度的。

跟进sub_401040函数

这个函数将byte_403078进行处理后,再与byte_403000比较。

跟进sub_401000函数

这个函数会计算得到关键的v4,__ROL4__是循环左移。
这里直接动态调试出v4会方便点。

因为v4是char类型的,所以v4=4

编写脚本如下:

#include <iostream>

int main()
{
    int v1 = 39;
    int v4 = 4;
    unsigned char byte_403000[] =
    {
      0x0D, 0x26, 0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C,
      0x5D, 0x5E, 0x45, 0x12, 0x2F, 0x17, 0x2B, 0x44, 0x6F, 0x6E,
      0x56, 0x09, 0x5F, 0x45, 0x47, 0x73, 0x26, 0x0A, 0x0D, 0x13,
      0x17, 0x48, 0x42, 0x01, 0x40, 0x4D, 0x0C, 0x02, 0x69,
    };

    unsigned char byte_403180[40];
    

    for (int i = v1 - 1; i >= 0; --i)
    {
        byte_403180[i] = v4 ^ byte_403000[i];
        v4 = byte_403180[i];
    }

    byte_403180[39] = 0x00;
    std::cout << byte_403180;
}