[buuctf.reverse] 108_[GKCTF 2021]Crash

go语言写的大杂汇

ida的f5似乎有些问题,main_check反编译少一半

先是主函数检查了一下外壳 GKCTF{ ... } 总长度43就到main_check了

  if ( v1[1] == 43 && *(_DWORD *)v0 == 0x54434B47 && *(_WORD *)(v0 + 4) == 0x7B46 && *(_BYTE *)(v0 + 42) == 0x7D )
  {
    if ( main_check(*v1, 0x2BuLL) )
    {
      v4[0] = (__int64)&RTYPE_string;
      v4[1] = (__int64)&off_5724B0;
      fmt_Fprintln((__int64)&go_itab__ptr_os_File_comma__ptr_io_Writer, qword_625B28, (__int64)v4, 1LL, 1LL);
    }
    else
    {
      v3[0] = (__int64)&RTYPE_string;
      v3[1] = (__int64)&off_5724C0;
      fmt_Fprintln((__int64)&go_itab__ptr_os_File_comma__ptr_io_Writer, qword_625B28, (__int64)v3, 1LL, 1LL);
    }
  }

第1块是将6-24加密后比较

  v2 = main_encrypto(a1 + 6, 24LL);
  if ( v4 != 44 || !runtime_memequal(v2, (__int64)"o/aWPjNNxMPZDnJlNp0zK5+NLPC4Tv6kqdJqjkL0XkA=", 44LL) )
    return 0;

main_encrypto里可以找到以下语句,显然是3DES加密,CBC,pkcs5padding

 v14 = crypto_des_NewTripleDESCipher(a4, 24LL, a6); //3DES
Encrypt_PKCS5Padding(a1, a2, a3, v12);   //pkcs5padding
 *a7 = 0x7967736E616D7577LL;  //以为这就是key但不是
v15 = crypto_cipher_NewCBCEncrypter(v16, v14, (__int64)a7, 8LL, a9); //CBC
 *(_QWORD *)&result = encoding_base64__ptr_Encoding_EncodeToString(qword_625AD0, v17, v6, v7);  //最后用base64编码

发现a7并不是密钥,于是向回找main_crypto

  v4 = encoding_json_Unmarshal(
         off_61E540,
         qword_61E548,
         qword_61E550,
         (__int64)&RTYPE__ptr_main_secretdata,
         (__int64)v18);

61E540指向一个wellcome的串

.noptrdata:0000000000608840 7B 0D 0A 20 20 20 20 22 6B 65+aKeyWelcometoth db '{',0Dh,0Ah          ; DATA XREF: .data:off_61E540↓o
.noptrdata:0000000000608840 79 22 3A 20 22 57 65 6C 63 6F+db '    "key": "WelcomeToTheGKCTF2021XXX",',0Dh,0Ah
.noptrdata:0000000000608840 6D 65 54 6F 54 68 65 47 4B 43+db '    "iv": "1Ssecret"',0Dh,0Ah
.noptrdata:0000000000608840 54 46 32 30 32 31 58 58 58 22+db '}',0

利用这个key和iv在线网站 http://tool.chacuo.net/crypt3des 上解出第1段flag

87f645e9-b628-412f-9d7a-

第2段是 用HashHex2加密再与6e2b55c78937d63490b4b26ab3ac3cb54df4c5ca7d60012c13d2d1234a732b74比较,根据函数名字第2段4个字符是先sha256加密再hex编码,在线  MD5免费在线解密破解_MD5在线加密-SOMD5得到 e402

  v6 = Encrypt_Sha256(a1, a2, a3);
 encoding_hex_Encode(v7, v5, v5, v6, v4);

第3段密文是"6500fe72abcab63d87f213d2218b0ee086a1828188439ca485a1a40968fd272865d5ca4d5ef5a651270a52ff952d955" 加密方式是sha512得到f20a

第4段密文是"ff6e2fd78aca4736037258f0ede4ecf0"加密方式是hash,在同一个网站得到 f940

最后组装成,不过一般buu都要把壳改成flag{}再提交,但是这个没改,就是原样

GKCTF{87f645e9-b628-412f-9d7a-e402f20af940}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值