BUUCTF Reverse[FlareOn1]Bob Doge

时间: 2024-11-10 admin IT培训

BUUCTF Reverse/[FlareOn1]Bob Doge

BUUCTF Reverse/[FlareOn1]Bob Doge

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

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

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

安装完成

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

点击DECODE会变成一个狗头


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

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

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

data_secret在Resources里面

写个脚本,

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
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;
}

运行结果

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

最终flag:flag{3rmahg3rd.b0b.d0ge@flare-on}