[GDOUCTF 2023]Tea writeup

通过strings找到关键函数

int __fastcall main_0(int argc, const char **argv, const char **envp)
{char *v3; // rdi__int64 i; // rcxchar v6; // [rsp+20h] [rbp+0h] BYREFint v7; // [rsp+24h] [rbp+4h]int v8; // [rsp+44h] [rbp+24h]int four_key[12]; // [rsp+68h] [rbp+48h] BYREF_DWORD input[16]; // [rsp+98h] [rbp+78h] BYREFint flag[31]; // [rsp+D8h] [rbp+B8h] BYREFint j; // [rsp+154h] [rbp+134h]int k; // [rsp+174h] [rbp+154h]int m; // [rsp+194h] [rbp+174h]v3 = &v6;for ( i = 102i64; i; --i ){*(_DWORD *)v3 = -858993460;v3 += 4;}j___CheckForDebuggerJustMyCode(&unk_7FF600623009, argv, envp);v7 = 32;v8 = 0;four_key[0] = 1234;four_key[1] = 5678;four_key[2] = 9012;four_key[3] = 3456;memset(input, 0, 0x28ui64);flag[15] = 0;flag[23] = 0;print_strs();for ( j = 0; j < 10; ++j )scanf("%x", &input[j]);key(four_key);copy(input, flag);tea(input, four_key);v8 = fun4(input);if ( v8 ){print("you are right\n");for ( k = 0; k < 10; ++k ){for ( m = 3; m >= 0; --m )print("%c", (unsigned __int8)((unsigned int)flag[k] >> (8 * m)));}}else{print("fault!\nYou can go online and learn the tea algorithm!");}return 0;
}

发现xtea算法函数

for ( i = 0; i <= 8; ++i ){v6 = 0;delta = 256256256 * i;i_plus_1 = i + 1;do{++v6;*(_DWORD *)(res + 4i64 * i) += delta ^ (*(_DWORD *)(res + 4i64 * i_plus_1)+ ((*(_DWORD *)(res + 4i64 * i_plus_1) >> 5) ^ (16* *(_DWORD *)(res + 4i64 * i_plus_1)))) ^ (delta + *(_DWORD *)(key + 4i64 * (delta & 3)));*(_DWORD *)(res + 4i64 * i_plus_1) += (delta + *(_DWORD *)(key + 4i64 * ((delta >> 11) & 3))) ^ (*(_DWORD *)(res + 4i64 * i) + ((*(_DWORD *)(res + 4i64 * i) >> 5) ^ (16 * *(_DWORD *)(res + 4i64 * i))));delta += 256256256;}while ( v6 <= 0x20 );result = (unsigned int)(i + 1);}

找到key和result

{v7 = 4455;v8 = 6677;v9 = 8899;*a1 = 2233;a1[1] = v7;a1[2] = v8;result = v9;a1[3] = v9;return result;
}
v7 = 0;
v8[0] = 0x1A800BDA;
v8[1] = 0xF7A6219B;
v8[2] = 0x491811D8;
v8[3] = 0xF2013328;
v8[4] = 0x156C365B;
v8[5] = 0x3C6EAAD8;
v8[6] = 0x84D4BF28;
v8[7] = 0xF11A7EE7;
v8[8] = 0x3313B252;
v8[9] = 0xDD9FE279;
for ( j = 0; j < 10; ++j )
v7 = *(_DWORD *)(a1 + 4i64 * j) == v8[j];
return v7;

修改xtea解密模板中,修改key,delta,result和算法魔改部分

import binascii
from ctypes import *def decrypt(v, key, num):v0, v1 = c_uint32(v[0]), c_uint32(v[1])total = c_uint32(delta * (num + 33))for i in range(33):total.value -= deltav1.value -= (((v0.value * 16) ^ (v0.value >> 5)) + v0.value) ^ (total.value + key[(total.value >> 11) & 3])v0.value -= (((v1.value * 16) ^ (v1.value >> 5)) + v1.value) ^ (total.value + key[total.value & 3]) ^ total.valuereturn v0.value, v1.value# test
if __name__ == "__main__":################# 需要修改数据区域 ##################res = [0x1A800BDA, 0xF7A6219B, 0x491811D8, 0xF2013328, 0x156C365B, 0x3C6EAAD8, 0x84D4BF28, 0xF11A7EE7, 0x3313B252,0xDD9FE279]key = [2233, 4455, 6677, 8899]delta = 256256256################# 需要修改数据区域 ##################result = []for i in range(len(res) - 2, -1, -1):lists = res[i:i + 2]result = decrypt(lists, key, i)res[i] = result[0]res[i + 1] = result[1]# print("Decrypted data is : ", hex(result[0]), hex(result[1]))strs = ''
for i in res:strs += hex(i)[2:]
print(strs)
for i in range(0,len(strs)):try:print(binascii.a2b_hex(strs[:i*(-1)]).decode())except:pass

得到flag:HZCTF{hzCtf_94_re666fingcry5641qq}

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

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

相关文章

你知道滚筒式高速视觉检测机外观怎么“看”出产品质量吗?

点火线圈胶套是一种用于保护点火线圈绝缘部分的胶质套管。这种胶套通常由高温耐磨的橡胶或硅胶材料制成&#xff0c;具有良好的绝缘性能和耐高温性能。点火线圈胶套的作用是防止点火线圈与外部环境接触&#xff0c;防止受潮、灰尘或化学物质的侵蚀&#xff0c;同时起到绝缘和保…

python怎么调用cmd命令

关于python调用cmd命令&#xff1a; 1、python的OS模块 OS模块调用CMD命令有两种方式&#xff1a;os.popen()、os.system()都是用当前进程来调用。 OS.system是无法获取返回值的。当运行结束后接着往下面执行程序。用法如&#xff1a;OS.system("ipconfig"). OS.…

随身WiFi市场乱象横生,随身WiFi测评最好的格行随身WiFi如何引领变革?

在当今随身WiFi市场乱象频发、内卷严重的背景下&#xff0c;消费者对于产品的性能与商家是否会后台割韭菜依旧存疑&#xff0c;尤其是“随身WiFi到底卡不卡&#xff1f;”的问题&#xff0c;成为了广大消费者关注的重点。然而&#xff0c;在众多品牌中&#xff0c;格行随身WiFi…

【音频特征提取】傅里叶变换算法源码学习记录

目录 背景快速理解FFT&#xff08;快速傅里叶变换&#xff09;IFFT&#xff08;逆傅里叶变换&#xff09;STFT&#xff08;短时傅里叶变换&#xff09; 代码实现FFT源代码IFFT源代码FFT、IFFT自己实验STFT源代码STFT自己实验 总结 背景 最近用到了相关操作提取音频信号特征&am…

Vue3 根据相对路径加载vue组件

一、设置动态组件加载器 1、"DynamicFormLoader.vue" <template><div><component :is"formComponent" v-if"formComponent" /></div> </template><script setup> import { ref, watch } from vue; import …

如何测试扫地机器人的稳定性

测试扫地机器人的稳定性是一个综合性的过程&#xff0c;旨在确保机器人在各种环境和条件下都能稳定运行。以下是一些关键的测试步骤和方面&#xff1a; 清洁效果测试 目的&#xff1a;评估扫地机器人在不同地面和污渍类型上的清洁能力。 方法&#xff1a; 使用不同类型的地面&…

标签印刷检测,如何做到百分百准确?

印刷标签是一种用于标识、识别或包装产品的平面印刷制品。这些标签通常在纸张、塑料膜、金属箔等材料上印刷产品信息、条形码、图像或公司标识&#xff0c;以便于产品识别和管理。印刷标签有各种形状、尺寸和材质&#xff0c;可以根据具体需求进行定制设计。常见的印刷标签包括…

FlutterFlame游戏实践#15 | 生命游戏 - 演绎启动

theme: cyanosis 本文为稀土掘金技术社区首发签约文章&#xff0c;30天内禁止转载&#xff0c;30天后未获授权禁止转载&#xff0c;侵权必究&#xff01; Flutter\&Flame 游戏开发系列前言: 该系列是 [张风捷特烈] 的 Flame 游戏开发教程。Flutter 作为 全平台 的 原生级 渲…

android 居中对齐

在 Android 中&#xff0c;要使 LinearLayout 中的内容居中对齐&#xff0c;你可以通过设置 android:gravity 属性或使用 android:layout_gravity 属性来实现。这两个属性的使用取决于你希望对齐的内容是 LinearLayout 内部的子视图还是 LinearLayout 本身相对于其父布局的对齐…

4.3 设备管理

大纲 设备分类 输入输出 虚设备和SPOOLING技术

管理客户的10个CRM系统技巧

客户是企业生存和发展的基石。为此&#xff0c;客户关系管理系统&#xff08;CRM&#xff09;应运而生&#xff0c;旨在帮助企业实现大规模的个性化客户接触&#xff0c;并通过定制化的互动增强客户忠诚度&#xff0c;从而推动企业的持续增长。 然而&#xff0c;引入CRM系统并…

vue3对比 Setup、Render、SFC 从 vue 底层实现和性能开销上全面分析三者区别及优略

vue3 中对比 Setup、Render、SFC 从 vue 底层实现和性能开销上全面分析三者区别及优略 /* setup 方式 */ export const Setup defineComponent({setup() {const handleChange (v: any) > {};return () > {return (<div><button onClick{handleChange}>Tes…

AD确定板子形状

方法1 修改栅格步进值&#xff0c;手动绘制 https://cnblogs.com/fqhy/p/13768031.html 方法2 器件摆放确定板子形状 https://blog.csdn.net/Mark_md/article/details/116445961

Java实战:寻找完美数

文章目录 一、何谓完美数二、寻找完美数&#xff08;一&#xff09;编程思路&#xff08;二&#xff09;编写程序&#xff08;三&#xff09;运行程序 三、实战小结 一、何谓完美数 完美数是一种特殊的自然数&#xff0c;它等于其所有正除数&#xff08;不包括其本身&#xff…

百问网全志D1h开发板MIPI屏适配

MIPI屏适配 100ASK-D1-H_DualDisplay-DevKit V11 1. 显示适配 1.1 修改设备树 1.1.1 修改内核设备树 进入目录&#xff1a; cd /home/ubuntu/tina-d1-h/device/config/chips/d1-h/configs/nezha/linux-5.4修改board.dts: &lcd0 {lcd_used <1>;lcd…

类的生命周期详解

第1部分&#xff1a;引言 1.1 面向对象编程简介 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来设计软件。对象可以包含数据&#xff08;通常称为属性或字段&#xff09;和代码&#xff08;通常称为方法或函数&#xff09;。OOP的核心概…

Vue 项目中 history 路由模式的使用

在最近帮客户开发的一个项目中&#xff0c;由于项目的特殊性&#xff0c;需要用到 Vue 中的 history路由模式。该模式使用时会涉及到“上传白屏”和“刷新 404 问题”。在帮助客户解决这两个问题的过程中&#xff0c;总结问题的解决方案并记录下来&#xff0c;希望能够保留这篇…

眼外伤险失明辗转成都爱尔眼科就医保视力,患者复查送锦旗!

近日患者王先生到成都爱尔眼科医院进行硅油取出后的二次复查&#xff08;硅油为眼底病手术中一种“填充物”&#xff09;&#xff0c;他激动地为蔡裕主任献上锦旗&#xff0c;感谢医生的救治避免了失明。 意外发生在半年之前&#xff0c;王先生不慎滑倒右眼磕碰到茶几边缘&…

【前端从入门到精通:第九课:CSS3新增属性及伸缩盒布局】

弹性盒模型 介绍 伸缩盒模型也叫弹性盒模型&#xff0c;或flex。它决定一个盒子在其它盒子中的分布&#xff0c;以及如何处理可用的空间。使用该模型&#xff0c;可以轻松的创建“自适应”浏览器窗口的流动布局。 flexbox是一个很新的东西&#xff0c;在w3c希望可以使用flexbo…

力扣1472.设计浏览器历史记录

力扣1472.设计浏览器历史记录 用双指针记录历史记录 以及栈顶高度移动时会直接把之前的记录消掉 class BrowserHistory {int pos-1;int top0;string history[5010];public:BrowserHistory(string homepage) {visit(homepage);}void visit(string url) {pos ;top pos;histor…