BUUCTF [GXYCTF2019]simple CPP

news/2025/1/21 16:25:08/文章来源:https://www.cnblogs.com/reverse-chen/p/18335195

buu上的一道z3题,记录一下z3奇怪的用法。
首先扔进ida,打开主函数,非常混乱的算法,大概发现两个关键点:

这里应该是对flag进行异或得到v6

而这里的比较应该就是求解flag的关键,可以看出来有四个未知数,求解也是非常简单,z3直接求解即可:

from z3 import *
x,  y,  z,  w = BitVecs("x y z w",  64)
#2 1 0 3
s = Solver()s.add(x & ~z == 0x11204161012)
s.add(((x & ~y) & z) | x & ((y & z) | y & ~z | ~(y | z)) == 0x8020717153E3013)
s.add((x & ~z) | (y & z) | (x & ~y) | (z & ~y) == 0x3E3A4717373E7F1F)
s.add((0x3E3A4717373E7F1F ^ w) == 0x3E3A4717050F791F)
s.add(((x & ~z) | (y & z) | y & x) == (~z & x | 0xC00020130082C0C) and 1)if s.check() == unsat:print("无解")
else:m = s.model()for i in m:print(f"%s = 0x%x"%(i, m[i].as_long()))

注意这里的y应该是有不唯一解,但在比赛中好像给出了中间部分的结果,所以这里并无大碍

接下来就是看求出来的四个未知数和flag的关系了,这里看到有这么个函数:

可以看到每相隔8位有一个case,如果不满8位则将v17加上w并右移八位。不难猜想,该函数的作用是将encode的前24个字母每8个分成一组,并按序号从小到低拼成一个十六进制数,最后未满8个的字母在一组,然后存进数组里进行刚才的z3运算
因此我们只要按顺序将刚才的x,y,z,w两位两位提取出来即可得到encode的内容。然后encode与key异或即可得到flag。交叉应用key,非常容易发现key的值为i_will_check_is_debug_or_not
因此写出解密脚本:

key = "i_will_check_is_debug_or_not"
enc = [0x3E, 0x3A, 0x46, 0x05, 0x33, 0x28, 0x6F, 0x0D, 0x8C, 0x00, 0x8A, 0x09, 0x78, 0x49, 0x2C, 0xAC, 0x08, 0x02, 0x07, 0x17, 0x15, 0x3E, 0x30, 0x13, 0x32, 0x31, 0x06]
flag = ''
for i in range(len(enc)):flag += chr(enc[i] ^ ord(key[i % len(key)]))
print(flag)

得出结果:We1l_D0näeéb' _ólgebra_am_i
将中间的y换成题目给的e!P0or_a即可
flag{We1l_D0ne!P0or_algebra_am_i}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/775718.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 `useServerSeoMeta` 优化您的网站 SEO

title: 使用 useServerSeoMeta 优化您的网站 SEO date: 2024/7/31 updated: 2024/7/31 author: cmdragon excerpt: 摘要:本文介绍了Nuxt3框架中的useServerSeoMeta函数,它用于服务器端渲染(SSR)中设置SEO元标签,以优化性能和搜索引擎排名。内容包括其基本用法、详细示例及…

即构场景化SDK UIKits,互动应用开发周期缩短 75%

随着泛娱乐社交行业的日益成熟,创业者在探索新场景并将其产品化的过程中,面临着可利用的时间窗口正在急剧收窄的挑战。因此产品能否迅速迭代和高效上线,成为衡量企业创新效率的核心标准。 即构科技作为行业领先的实时互动音视频云服务商,通过提供场景化 SDK UIKits,助力企…

Paper Reading: Cost-sensitive deep forest for price prediction

针对价格预测问题的特点,本文提出了一种代价敏感的深度森林价格预测方法 CSDF。通过代价敏感方案对远离真实价格类别的错误分类施加更高的成本,期望降低错误分类的成本并将其推向真实价格范围。此外为了进一步提高整体性能,通过修改传统的 K-means 方法,开发了一种改进的 K…

EtherCAT从站重启及状态检测

VAR nSlaveState:ETC_SLAVE_STATE;pSlave:POINTER TO ETCSlave; END_VAR(* 示例1 :检查单个从站状态 *) InoSV630N(xSetOperational:= TRUE, wState=> nSlaveState);(* 示例2 :检查所有从站的链表 *) pSlave:=EtherCAT.FirstSlave; WHILE pSlave<>0 DOpSlave^(…

Java图片处理Thumbnailator

原文链接:https://zhuanlan.zhihu.com/p/604121848Thumbnailator是Google开源的优秀图片处理的第三方Java类库,比JDK自带的库要好用的多。 官网Github地址 Maven依赖 目前最新版本是0.4.19<dependency><groupId>net.coobird</groupId><artifactId>thu…

局域网这客户端连接MySQL数据库,含(CMT X进阶屏连接MySQL数据库)

1:首先安装MySQL服务器,服务器端安装的是Server version: 8.0.37 MySQL Community Server - GPL版本 2. 修改MySQL配置文件允许远程访问找到并编辑MySQL配置文件my.ini,该文件通常位于C:\ProgramData\MySQL\MySQL Server <version>\my.ini。 使用文本编辑器(VsCode)…

EtherCAT主站重启及状态检测

VARxReset: BOOL;xReset_R:R_TRIG;xETC_StateOK:BOOL; END_VAR(*注:FB 实例声明 当设备仅有 1 个 EtherCAT 主站时,实例化名称应该是 ETHERCAT;如汇川 AM600/AM400 系列 当设备有 2 个 EtherCAT 主站时,实例化名称应该是 ETHERCAT_C 或者 ETHERCAT_D;如汇川 AC800 系列等*…

接口结果判断(Jemeter断言)

操作 与CSV结合起来跑多组用例减少手动测试 补充:CSV文件不仅可以写请求参数而且可以写响应结果 展示效果

fastapi 的uvicorn配置日志

目前从flask框架转fastapi,之前flask框架日志很好用。这次学习了fastapi的日志使用,第一种是自定义日志,这个不讲了,自己封装就好,第二种是使用uvicorn自带日志, Uvicorn 是 fastapi 框架的默认ASGI服务器,它提供了强大的异步能力和高性能。一、配置输出格式化 uvicorn …

MySQL 学习笔记 进阶(锁 下,InnoDB引擎 上)

锁锁-表级锁-表锁介绍表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM,InnoDB,BDB等存储引擎中。 对于表级锁,主要分为以下三类:表锁 元数据锁(meta data lock,MDL) 意向锁表锁对于表锁,分为两类:表共享读锁(read lock) 表…

伙伴匹配系统踩坑日记1

伙伴匹配系统踩坑日记1 前端初始化 文档参考https://cn.vitejs.dev/guide/输入指令后报错解决方法参考https://blog.csdn.net/qq_26018335/article/details/126201219 yarn安装默认在c盘所以其global和cache配置在c盘,输入以下指令查看默认配置在哪个盘 yarn global dir只要在…

OpenAI 向部分用户开放 GPT-4o 高级语音模式;AI 视频生成工具 Vidu 全球上线丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点…