首页
论坛
课程
招聘
[原创]2019看雪CTF 第六题:消失的岛屿
2019-6-27 17:57 3992

[原创]2019看雪CTF 第六题:消失的岛屿

2019-6-27 17:57
3992
用IDA分析程序
int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v3; // eax
  uint8_t bindata; // [esp+11h] [ebp-3Fh]
  const char *v6; // [esp+48h] [ebp-8h]
  char *v7; // [esp+4Ch] [ebp-4h]

  __main();
  printf("please enter Serial:");
  scanf(" %s", &bindata);
  if ( strlen((const char *)&bindata) > 0x31 )
    puts("error");
  v7 = (char *)calloc(1u, 0x400u);
  v3 = strlen((const char *)&bindata);
  base64_encode(&bindata, v7, v3);
  v6 = "!NGV%,$h1f4S3%2P(hkQ94==";
  if ( !strcmp("!NGV%,$h1f4S3%2P(hkQ94==", v7) )
    puts("Success");
  else
    puts("Please Try Again");
  free(v7);
  system("pause");
  return 0;
}

if ( !strcmp("!NGV%,$h1f4S3%2P(hkQ94==", v7) ) //和!NGV%,$h1f4S3%2P(hkQ94==比较,相同则成功

base64_encode(&bindata, v7, v3); //自定义的base64加密

进入base64_encode函数

charEncrypt()做了一些操作

aTuvwxtulmnopqr[data]为自定义的映射表

写个python脚本即可,代码如下:
#!/user/bin/env python3
# -*- coding: utf-8 -*-
# Created by xmhwws on 2019/6/27
import base64


def fun(arg):
    result = ord(arg)
    if (result > 32 and result <= 58):
        return result + 64
    if (result > 64 and result <= 90):
        return 155 - result
    if (result > 97 and result <= 107):
        return result - 50
    if (result == 119):
        return 43
    if (result == 121):
        result = 47
    return result


str = "!NGV%,$h1f4S3%2P(hkQ94=="
str2 = ""
for i in str:
    str2 = str2 + chr(fun(i))
RawTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
ModifiedTable = "tuvwxTUlmnopqrs7YZabcdefghij8yz0123456VWXkABCDEFGHIJKLMNOPQRS9+/="
encodedstr = ""
for i in str2:
    encodedstr = encodedstr + (RawTable[ModifiedTable.index(i)])
sn = base64.b64decode(encodedstr)
print("sn:", sn.decode())

运行py脚本

得到密码:KanXue2019ctf_st



第五届安全开发者峰会(SDC 2021)议题征集正式开启!

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回