BUUCTF Reverse/[FlareOn1]Bob Doge

BUUCTF Reverse/[FlareOn1]Bob Doge_第1张图片

先看信息,64位程序,无壳

BUUCTF Reverse/[FlareOn1]Bob Doge_第2张图片

然后我用IDA打开看了半天,啥也看不出来

运行一下,发现是个安装程序

BUUCTF Reverse/[FlareOn1]Bob Doge_第3张图片

安装完成

BUUCTF Reverse/[FlareOn1]Bob Doge_第4张图片

安装后的程序为Challenge1.exe ,32位,用C#写的

BUUCTF Reverse/[FlareOn1]Bob Doge_第5张图片

点击DECODE会变成一个狗头

BUUCTF Reverse/[FlareOn1]Bob Doge_第6张图片
BUUCTF Reverse/[FlareOn1]Bob Doge_第7张图片

用IDA打开发现不行,无法反汇编,然后搜了下C#逆向,看到篇文章:推荐.Net、C# 逆向反编译四大工具利器

BUUCTF Reverse/[FlareOn1]Bob Doge_第8张图片

改用NET打开,这里可以看到DECODE!这个按钮,点进去查看这个按钮的事件

BUUCTF Reverse/[FlareOn1]Bob Doge_第9张图片

发现这里有三个for循环,取用了data_secret这个里面的资源

BUUCTF Reverse/[FlareOn1]Bob Doge_第10张图片

data_secret在Resources里面

BUUCTF Reverse/[FlareOn1]Bob Doge_第11张图片

写个脚本,

#include 
#include 
#include 
#include 
int main()
{
    int buffer[] = {0xA1,0xB5,0x44,0x84,0x14,0xE4,0xA1,0xB5,0xD4,0x70,0xB4,0x91,0xB4,0x70,0xD4,0x91,
                    0xE4,0xC4,0x96,0xF4,0x54,0x84,0xB5,0xC4,0x40,0x64,0x74,0x70,0xA4,0x64,0x44,0};  //最后加个0,控制循环条件
    char str[50];
    for (int i = 0; buffer[i] != 0; i++)
    {
        int num2 = buffer[i];
        str[i] =  ((num2 >> 4) | ((num2 << 4) & 240)) ^ 0x29;
    }
    printf("str = %s\n",str);
    char str2[50];
    for (int j = 0; j < strlen(str); j += 2)
    {
       str2[j] =  str[j+1];
       str2[j+1] = str[j];
    }
    printf("str2 = %s\n",str2);
    char str3[50];
    for (int k = 0; k < strlen(str2); k++)
    {
        char ch1 = str2[k];
        str3[k] =  ch1 ^ 0x66;
    }
     printf("str3 = %s\n",str3);
    return 0;
}

运行结果

BUUCTF Reverse/[FlareOn1]Bob Doge_第12张图片

根据hint可知第一个符合条件

BUUCTF Reverse/[FlareOn1]Bob Doge_第13张图片

最终flag:flag{[email protected]}

你可能感兴趣的:(#,BUUCTF,Reverse,CTF,ctf,reverse,BUUCTF)