[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.pswp.cn/diannao/44365.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44365.shtml
英文地址,請注明出處:http://en.pswp.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…