CrackRTF 题解

简介: CrackRTF 题解

查壳,是32位程序,无壳,拖入IDA

使用一个FindCrypto的IDA插件

 

 

查一下加密,应该是一个哈希加密,可能是md5

我们先可以在线解密一下找到的这个md5的密文看一看

MD5在线解密

得到了一串字符,不是flag,我们去分析一下main函数

int __cdecl main_0(int argc, const char **argv, const char **envp)
{
  DWORD v3; // eax
  DWORD v4; // eax
  char Str[260]; // [esp+4Ch] [ebp-310h] BYREF
  int v7; // [esp+150h] [ebp-20Ch]
  char String1[260]; // [esp+154h] [ebp-208h] BYREF
  char Destination[260]; // [esp+258h] [ebp-104h] BYREF
  memset(Destination, 0, sizeof(Destination));
  memset(String1, 0, sizeof(String1));
  v7 = 0;
  printf("pls input the first passwd(1): ");
  scanf("%s", Destination);
  if ( strlen(Destination) != 6 )
  {
    printf("Must be 6 characters!\n");
    ExitProcess(0);
  }
  v7 = atoi(Destination);
  if ( v7 < 100000 )
    ExitProcess(0);
  strcat(Destination, "@DBApp");
  v3 = strlen(Destination);
  sub_40100A((BYTE *)Destination, v3, String1);
  if ( !_strcmpi(String1, "6E32D0943418C2C33385BC35A1470250DD8923A9") )
  {
    printf("continue...\n\n");
    printf("pls input the first passwd(2): ");
    memset(Str, 0, sizeof(Str));
    scanf("%s", Str);
    if ( strlen(Str) != 6 )
    {
      printf("Must be 6 characters!\n");
      ExitProcess(0);
    }
    strcat(Str, Destination);
    memset(String1, 0, sizeof(String1));
    v4 = strlen(Str);
    sub_401019((BYTE *)Str, v4, String1);
    if ( !_strcmpi("27019e688a4e62a649fd99cadaafdb4e", String1) )
    {
      if ( !(unsigned __int8)sub_40100F(Str) )
      {
        printf("Error!!\n");
        ExitProcess(0);
      }
      printf("bye ~~\n");
    }
  }
  return 0;
}

很清楚的看到是将两个输入的两个字符串用strcat函数拼接起来,然后进行MD5加密

所以第一段字符串就是123321,第二段就是~!3a@0

我们运行一下程序

得到一个文件

打开rtf文件得到flag

flag{N0_M0re_Free_Bugs}

 

目录
打赏
0
0
0
0
4
分享
相关文章
BUUCTF Quoted-printable 1
BUUCTF Quoted-printable 1
237 0
BUUCTF Quoted-printable 1
BUUCTF [SWPU2019]我有一只马里奥 1
BUUCTF [SWPU2019]我有一只马里奥 1
423 0
BUUCTF [SWPU2019]我有一只马里奥 1
BUUCTF-[2019红帽杯]easyRE(Reverse逆向)
本文详细介绍了对一个无壳的64位ELF文件进行逆向分析的过程。首先通过IDA查找关键字符串定位主函数,然后逐步分析函数逻辑,包括读取输入、异或操作等。接着通过多次Base64解码和异或操作,最终得到了关键的flag。整个过程涉及数组寻址、条件判断和函数调用等技术细节,展示了CTF竞赛中常见的逆向工程技巧。最后附上了完整的Python代码实现,帮助读者理解和复现。
401 1
BUUCTF-[2019红帽杯]easyRE(Reverse逆向)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
[HDCTF2019]Maze(初识逆向)
[HDCTF2019]Maze(初识逆向)
338 1
[ACTF新生赛2020]easyre 题解
[ACTF新生赛2020]easyre 题解
696 0
[ACTF新生赛2020]SoulLike 题解
[ACTF新生赛2020]SoulLike 题解
243 0
文件上传--Upload-labs--Pass02--Content-Type绕过
文件上传--Upload-labs--Pass02--Content-Type绕过
25、Java 初始化块和静态初始化块详解,超详细(案例多、官方教程)
25、Java 初始化块和静态初始化块详解,超详细(案例多、官方教程)
452 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问