【BUUCTF逆向 [2019红帽杯]xx】

本文记录了一道BUUCTF的逆向分析题目,主要涉及C++程序的理解与解密。重点在于理解代码逻辑,特别是输入处理、循环异或和XXTEA解密部分。解题关键在于正确识别变量含义,如Code的两个不同用法,以及密钥生成过程。通过分析加密算法,找到密钥来源于输入的前4位,最终使用脚本成功解密。
摘要由CSDN通过智能技术生成

前言

BUUCTF刷题记录,本题主要是一道C++程序题,主要在于理清代码逻辑,c++的反汇编伪代码看的还不是很熟练。

一、题目分析

代码稍长,可以分段看,首先来到第一段,是一个获取输入的部分:
在这里插入图片描述这里有一个容易看错的地方,就是存储输入的那个变量叫Code,然后v6指向的内容也叫Code,但是这两个不是一个东西,后者跟进去后可以看到如图上标注所示
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述这里是最后一个异或的逻辑,相当于从v20[3]开始,每一位都会和前面的几个数据循环异或,范围就是range(i//3),逆的时候从后往前算
总体的逻辑差不多是这样,但是在解的时候卡在了解密xxtea上,虽然这里之前遇到过很多次xxtea解密的题,手上也有现成脚本,但是刚开始没解出来答案,后看看了下其他师傅的WP,发现是密钥key找错了,这里我们可以回顾加密那里,传入的密钥是&v30,这个地址指向的内容是输入的前4位+后面都是0,长度为16字节,跟进加密算法:
在这里插入图片描述前面很大这一坨应该就是在生成密钥那个列表v18,xxtea加密的密钥是四个unsigned int,所以这部分就是在从&v30这里读出4个unsigned int,后面三个其实都是0,理清这些,直接上脚本解题。

二、代码示例

import libnum
enc = [0xce,0xbc,0x40,0x6b,0x7c,0x3a,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值