当前位置: 首页 > article >正文

记:2023羊城杯-Ez加密器-题目复现和学习记录““

文章目录

  • 前言
  • 题目分析and调试过程
  • 完整exp

前言

前段时间的比赛,那会刚入门o(╥﹏╥)o都不会写,现在复现一下。

羊城杯题目复现:
第二题 知识点 :动态调试 : CSGO
第三题 虚假控制流 py字典 MD5加密“”“” Blast

题目分析and调试过程

在这里插入图片描述
查壳nie

进入IDA,shift+F12查找下字符串看看,定位过去

在这里插入图片描述
在这里插入图片描述
先用N重命名一下函数,方便阅读。这里就是要求我们输入 code 和 flag。 分别 放入 a1 和 a2 中,查看一下该函数被谁调用了。
在这里插入图片描述

跳到上一级函数。

在这里插入图片描述
发现俩个参数a000000,a11111111111111,有点奇怪,推测一下应该是输入的长度。长度分别是 6 和 40
在这里插入图片描述
在这里插入图片描述
接着分析 看看sub_1400036A0里面的东西,
在这里插入图片描述
这里移位 4 移位 6 有点像base64编码,接着下面看,
在这里插入图片描述
在这里插入图片描述
一个base64变表,可以动态调试验证一下,输入code 为 123456,构造flag : DASCTF{11111111111111111111111111111111}
在这里插入图片描述
在这里插入图片描述
验证成功,sub_1400036A0就是对code进行一个base64编码。

接着看sub_7FF6D8B93AE0,点进去发现实在看不懂是什么,借助一下插件Signsrch
在这里插入图片描述
在这里插入图片描述
发现DES加密,随便双击跟进一下,会发现跟进到sub_7FF6D8B93AE0里面去了,因此可以判断这里是DES加密。
在这里插入图片描述
关于DES加密的介绍,可以看一下博主总结的DES加密原理

这里如果明白DES加密,就知道会有一个key,key的长度为8个字节(64-bit),经由这个主钥匙进行密钥调度得到16个子钥匙,再对密文继续迭代加密,总共16轮,得到密文
在这里插入图片描述

这里就已经分析完了,str1是给出的,不过还有一步,程序在运行时对Str1进行了修改,动态调试到下图处,得到真正的Str1。

在这里插入图片描述

完整exp

from Crypto.Cipher import DES
import base64

encrypted_data = bytes.fromhex(
    "0723105D5C12217DCDC3601F5ECB54DA9CCEC2279F1684A13A0D716D17217F4C9EA85FF1A42795731CA3C55D3A4D7BEA")
print(encrypted_data)


def decrypt_DES(key, encrypted_data):
    cipher = DES.new(key, DES.MODE_ECB)
    decrypted_data = cipher.decrypt(encrypted_data)
    return decrypted_data


string1 = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ+/'
string2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

string = str.maketrans(string2, string1)

for i in range(1000000):
    key = base64.b64encode(str(i).zfill(6).encode()).decode().translate(string).encode()

    decrypted_data = decrypt_DES(key, encrypted_data)

    if b"DASCTF{" in decrypted_data:
        print(decrypted_data)
        exit()
# DASCTF{f771b96b71514bb6bc20f3275fa9404e}

http://www.kler.cn/news/107370.html

相关文章:

  • Unity C#中LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查
  • 使用Jetpack Compose构建Flappy Musketeer街机游戏
  • C语言每日一题(20)最大公因数等于 K 的子数组数目
  • 《C和指针》笔记35:结构体
  • HackTheBox-Starting Point--Tier 0---Preignition
  • CAD2024最新中文版安装教程分享
  • 关于维度上的注意事项
  • LeetCode217——存在重复元素
  • 【PG】PostgreSQL字符集
  • 1-径向基(RBF)神经网络PID控制器仿真
  • 如何使用python快速修改Excel表单中的大量数据
  • python常用操作汇总
  • 华为NAT配置实例(含dhcp、ospf配置)
  • Java项目中将MySQL改为8.0以上
  • RabbitMQ-死信交换机和死信队列
  • Vue2 跨域问题报错AxiosError net::ERR_FAILED、 Network Error、ERR_NETWORK
  • 基于单片机的智能清洁小车设计—控制系统设计
  • GienTech动态|入选软件和信息技术服务名牌企业;荣获城市数字化转型优秀案例;参加第四届深圳国际人工智能展
  • 基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(一)上位机设计
  • Java流(Stream)详解
  • tomcat必要的配置
  • Centos使用tomcat部署jenkins
  • cola架构:有限状态机(FSM)源码分析
  • jenkins如何安装?
  • 基于SpringBoot+Vue的服装销售系统
  • Python深度学习实战-基于Sequential方法搭建BP神经网络实现分类任务(附源码和实现效果)
  • 基于GPIO子系统编写LED驱动,编写应用程序进行测试设置定时器,5秒钟打印一次hello world
  • 软考 系统架构设计师系列知识点之设计模式(4)
  • GoLong的学习之路(十四)语法之标准库 time(时间包)的使用
  • MySQL语言分类