re学习笔记(54)BUUCTF-re-[GWCTF 2019]re3 SMC自修改代码 | AES加密

新手一枚,如有错误(不足)请指正,谢谢!!
个人博客:点击进入/点击进入
题目链接:[GWCTF 2019]re3
参考资料:

IDA64载入,shift+f12查找关键字,找到main函数。
在这里插入图片描述
此时sub_402219处是一堆无用数据
在这里插入图片描述
写idc脚本进行解密

#include <idc.idc>

static main()
{
    auto addr = 0x402219;
    auto i = 0;
    for(i=0;i<224;i++)
    {
        PatchByte(addr+i,Byte(addr+i)^0x99);
    }
}

然后强制分析数据成代码(选择Force)
在这里插入图片描述
在这里插入图片描述
全部选中摁P将其声明成函数
此时就可以F5伪代码查看了。。
使用Findcrypt插件查看一下加密算法……好多
在这里插入图片描述
看main函数里的sub_40207B()函数
在这里插入图片描述
一大堆忽悠人的MD5加密,,也就第10行和14行的MD5加密有用
大体是将base64密码表进行两次sub_401CF9加密然后赋值给参数a1
这里没有用到用户输入,可以动调一下获得加密后的a1
IDA先在sub_40207B()函数执行后一条下断点
在这里插入图片描述
IDA远程调试运行,被断下来之后,双击跟进,获取到unk_603170
在这里插入图片描述
提取出来,加密后的a1也就是unk_603170为

CB8D493521B47A4CC1AE7E62229266

然后看main函数里的sub_402219函数。
在这里插入图片描述
加密后的密文为

BC0AADC0147C5ECCE0B140BC9C51D52B46B2B9434DE5324BAD7FB4B39CDB4B5B

其中sub_40196E函数
在这里插入图片描述

大体流程

  1. 经过MD5加密得到AES ECB模式的 密钥(可动调提取)
  2. 然后将32位的输入分成两部分,进行AES128加密
  3. 最后与密文进行比较

写脚本

from Crypto.Cipher import AES
from Crypto.Util.number import *
key = long_to_bytes(0xcb8d493521b47a4cc1ae7e62229266ce)
mi = long_to_bytes(0xbc0aadc0147c5ecce0b140bc9c51d52b46b2b9434de5324bad7fb4b39cdb4b5b)
lun = AES.new(key, mode=AES.MODE_ECB)
flag = lun.decrypt(mi)
print(flag)

在这里插入图片描述

得到最终flag为flag{924a9ab2163d390410d0a1f670}

原创文章 77 获赞 29 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Palmer9/article/details/105034093