[FlareOn6]Overlong

结城希亚發表於2024-10-31

[FlareOn6]Overlong

查殼

image-20241031211104487

win32無殼

分析程式

image-20241031211307654

整個程式表面很簡單,只是對unk_402008進行一個加密然後輸出

點進加密程式,並沒有發現什麼端倪,也沒有if比較之類的

直接執行程式看看

image-20241031211430196

可以看到明顯是輸出被隱藏了

檢視unk_402008記憶體,發現特別大,根本不止28,疑似是更改了加密長度

這個加密比較短可以直接把指令碼複製過來搞

#include <iostream>
using namespace std;
int __cdecl sub_EF1000(unsigned __int8* a1, char* a2)
{
    int v3; // [esp+0h] [ebp-8h]
    unsigned __int8 v4; // [esp+4h] [ebp-4h]

    if ((int)(unsigned __int8)*a2 >> 3 == 30)
    {
        v4 = a2[3] & 0x3F | ((a2[2] & 0x3F) << 6);
        v3 = 4;
    }
    else if ((int)(unsigned __int8)*a2 >> 4 == 14)
    {
        v4 = a2[2] & 0x3F | ((a2[1] & 0x3F) << 6);
        v3 = 3;
    }
    else if ((int)(unsigned __int8)*a2 >> 5 == 6)
    {
        v4 = a2[1] & 0x3F | ((*a2 & 0x1F) << 6);
        v3 = 2;
    }
    else
    {
        v4 = *a2;
        v3 = 1;
    }
    *a1 = v4;
    return v3;
}
unsigned int __cdecl sub_EF1160(char* a1, char* a2, unsigned int a3)
{
    unsigned int i; // [esp+4h] [ebp-4h]

    for (i = 0; i < a3; ++i)
    {
        a2 += sub_EF1000((unsigned __int8*)a1, a2);
        if (!*a1++)
            break;
    }
    return i;
}
int main() {
    char Text[128];
    unsigned int v6;
    char byte_EF2008[] =
    {
      0xE0, 0x81, 0x89, 0xC0, 0xA0, 0xC1, 0xAE, 0xE0, 0x81, 0xA5,
      0xC1, 0xB6, 0xF0, 0x80, 0x81, 0xA5, 0xE0, 0x81, 0xB2, 0xF0,
      0x80, 0x80, 0xA0, 0xE0, 0x81, 0xA2, 0x72, 0x6F, 0xC1, 0xAB,
      0x65, 0xE0, 0x80, 0xA0, 0xE0, 0x81, 0xB4, 0xE0, 0x81, 0xA8,
      0xC1, 0xA5, 0x20, 0xC1, 0xA5, 0xE0, 0x81, 0xAE, 0x63, 0xC1,
      0xAF, 0xE0, 0x81, 0xA4, 0xF0, 0x80, 0x81, 0xA9, 0x6E, 0xC1,
      0xA7, 0xC0, 0xBA, 0x20, 0x49, 0xF0, 0x80, 0x81, 0x9F, 0xC1,
      0xA1, 0xC1, 0x9F, 0xC1, 0x8D, 0xE0, 0x81, 0x9F, 0xC1, 0xB4,
      0xF0, 0x80, 0x81, 0x9F, 0xF0, 0x80, 0x81, 0xA8, 0xC1, 0x9F,
      0xF0, 0x80, 0x81, 0xA5, 0xE0, 0x81, 0x9F, 0xC1, 0xA5, 0xE0,
      0x81, 0x9F, 0xF0, 0x80, 0x81, 0xAE, 0xC1, 0x9F, 0xF0, 0x80,
      0x81, 0x83, 0xC1, 0x9F, 0xE0, 0x81, 0xAF, 0xE0, 0x81, 0x9F,
      0xC1, 0x84, 0x5F, 0xE0, 0x81, 0xA9, 0xF0, 0x80, 0x81, 0x9F,
      0x6E, 0xE0, 0x81, 0x9F, 0xE0, 0x81, 0xA7, 0xE0, 0x81, 0x80,
      0xF0, 0x80, 0x81, 0xA6, 0xF0, 0x80, 0x81, 0xAC, 0xE0, 0x81,
      0xA1, 0xC1, 0xB2, 0xC1, 0xA5, 0xF0, 0x80, 0x80, 0xAD, 0xF0,
      0x80, 0x81, 0xAF, 0x6E, 0xC0, 0xAE, 0xF0, 0x80, 0x81, 0xA3,
      0x6F, 0xF0, 0x80, 0x81, 0xAD
    };
    v6 = sub_EF1160(Text, byte_EF2008, 128);
    Text[v6] = 0;
    printf("%s", Text);
    return 0;
}

image-20241031214226331

當然也可以直接寫個新程式,在ida彙編介面用assmble把28改成127(改成128會溢位)

image-20241031215310773

image-20241031214817892

然後儲存,記得命名的時候不要和原來的程式名字一樣

執行

image-20241031215235205