BUUCTF-RE-[ACTF新生赛2020]usualCrypt

又他妈的是新生赛,我都不是新生了还天天被折磨。
首先查壳分析,然后反编译程序,可以看到程序逻辑还是比较简单的

我们进行一下整理和重命名,可以得到完整的程序逻辑:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v3; // esi
  char v5[15]; // [esp+8h] [ebp-74h] BYREF
  char v6[100]; // [esp+18h] [ebp-64h] BYREF

  printf(&unk_40E140);
  scanf("%s", v6);
  memset(v5, 0, sizeof(v5));
  base_64(v6, strlen(v6), v5);
  v3 = 0;
  while ( v5[v3] == byte_40E0E4[v3] )
  {
    if ( ++v3 > strlen(v5) )
      goto LABEL_6;
  }
  printf(aError);
LABEL_6:
  if ( v3 - 1 == strlen(byte_40E0E4) )
    return printf(aAreYouHappyYes);
  else
    return printf(aAreYouHappyNo);
}

大概就是读取一个我们的输入,然后将其进行base64转换(为什么是Base64的转换,因为我用AI搜的),得到加密后的字符zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9,我们使用正常的BASE64无法解密。
说明此时,加密逻辑进行了一定的修改,我们进入可以看到其加密逻辑


首先开头一个sub_401000()函数,感觉肯定有问题啊,我们跟进查看

int sub_401000()
{
  int result; // eax
  char v1; // cl

  for ( result = 6; result < 15; ++result )
  {
    v1 = byte_40E0AA[result];
    byte_40E0AA[result] = byte_40E0A0[result];
    byte_40E0A0[result] = v1;
  }
  return result;
}

查看数组的内容和程序的逻辑,大概就是对原来的Base64解密进行了一个换表的操作,也就是将"HIJKLMNO"和"QRSTUVWXYZ"进行了新的交换。我们拿到新的字符表ABCDEFQRSTUVWXYPGHIJKLMNOZabcdefghijklmnopqrstuvwxyz0123456789+/=,我们将加密数据和字符表拿到Cyberchef发现还是解不出来,继续往下看,看到最后return了一个sub_401030函数,进去查看其函数逻辑,发现有一个大小写转换的操作:

int __cdecl sub_401030(const char *a1)
{
  __int64 v1; // rax
  char v2; // al

  v1 = 0i64;
  if ( strlen(a1) )
  {
    do
    {
      v2 = a1[HIDWORD(v1)];
      if ( v2 < 97 || v2 > 122 )
      {
        if ( v2 < 65 || v2 > 90 )
          goto LABEL_9;
        LOBYTE(v1) = v2 + 32;
      }
      else
      {
        LOBYTE(v1) = v2 - 32;
      }
      a1[HIDWORD(v1)] = v1;
LABEL_9:
      LODWORD(v1) = 0;
      ++HIDWORD(v1);
    }
    while ( HIDWORD(v1) < strlen(a1) );
  }
  return v1;
}

至此我们可以解出真正的flag

posted @   Ylin07  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
点击右上角即可分享
微信分享提示