BUUCTF-re-[GWCTF 2019]re3------day.1

BUUCTF-re-[GWCTF 2019]re3------day.1

感觉作为CTFer RE手还是要做一下刷题日志的,此blog是第一篇,勉励自己。
题目链接:[GWCTF 2019]re3

main

main

直接拖进IDA,发现简易SMC,直接shift+F2调用以下脚本:

import idautils
import idc

addr = 0x402219  # 起始位置
for i in range(224):
    patch_byte(addr+i, 0x99 ^ idc.get_wide_byte(addr+i))

主要加密函数便是下面两个

sub_40207B(&unk_603170);
sub_402219(s);

FindCrypt

使用FindCrypt插件发现有三个加密:MD5,AES,Base64,慌的一批

在这里插入图片描述

sub_40207B(&unk_603170)

在这里插入图片描述

可以点击BASE64_table_603120将其化为字符串后发现ida自动显示出来这几个字符串的名字。

这个函数的作用是为接下来的AES加密制作密钥。

动调分析:

sub_401CF9(int [64], ,int[16])

五次调用同一个函数,前4次每次用已有的64字节各生成一个16字节。

最后一次将4次生成16字节组合在一起,作为参数,加密&unk_603170.

sub_402219():经典AES加密

接下来我们来看sub_402219()函数,分析可知sub_400A71函数第二个参数是正好是2次base64后得到的&unk_603170,分析出其函数是AES初始化,而初始化必然需要key,因此猜测&unk_603170为AES加密的key。

而且发现此key的产生和输入无关,所以可以直接动调得到该key。

在这里插入图片描述

从sub_40196E函数点进去可以看到AES具体加密函数(就不多说分析过程了,各位师傅应该对此小菜一碟吧)

在这里插入图片描述

AES之后便是判断flag,从byte_6030A0处取得密文,然后开始写解题脚本咯!


解题脚本

from Crypto.Cipher import AES
from Crypto.Util.number import *
encrypted_data = long_to_bytes(0xbc0aadc0147c5ecce0b140bc9c51d52b46b2b9434de5324bad7fb4b39cdb4b5b)
key = long_to_bytes(0xcb8d493521b47a4cc1ae7e62229266ce)

aes_ = AES.new(key, mode=AES.MODE_ECB)
flag = aes_.decrypt(mi)
print(flag)

得到最终flag为flag{924a9ab2163d390410d0a1f670}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值