首页 > 其他分享 >[FlareOn6]Overlong

[FlareOn6]Overlong

时间:2024-10-31 21:47:29浏览次数:2  
标签:__ 0x3F Overlong unsigned FlareOn6 v4 加密 a2

[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

标签:__,0x3F,Overlong,unsigned,FlareOn6,v4,加密,a2
From: https://www.cnblogs.com/murasame520/p/18518964

相关文章

  • [FlareOn6]Overlong
    查壳,32位,无壳进IDA一个处理函数,还有一个弹窗,运行一下看看弹窗然后看看加密函数和加密的字符加密函数进去就是处理a3(28)次字符但是点进去402008这个数组发现他的实际长度很长,肯定是远远大于28结合一下returni,发现主函数就是把text[28]变成0,把字符串给截断了,让弹窗只输出......
  • re | [FlareOn6]Snake
    re|[FlareOn6]Snake题目给了一个.nes文件,查了一下是FC游戏,可以用FC模拟器打开。这里参考了:https://www.cnblogs.com/harmonica11/p/13456725.html可以用ida打开:ROM......