巅峰极客 决赛 re wp

news/2024/4/19 21:36:03/文章来源:https://www.cnblogs.com/FW-ltlly/p/16623930.html

misc

开端:strangeTempreture

根据提示 温度传感器有异常数据

image-20220824180931796

看到modbus中的reg0 绝大多数都是0或者27 但也有很大的数 猜测这就是温度

导出流量包到json

先正则匹配拿

with open("1.json","r",encoding="utf-8") as f:a=f.read()
a=a.split("\n")
d=[]
for x in a:if "Register 0 (UINT16):" in x:print(x)

再手敲对应的异常的数

d=[23149,30824,23091,29493,20018,19053,23127,18807,19833,12653,22868,22122,19543,18024,20077,22900,22871,20856,23123,12341,22906,22123,19834,26730,20090,20784,20311,22073]
for x in d:print(hex(x)[2:].zfill(4),end="")

得到

5a6d78685a3373354e324a6d5a5749774d79316d5954566a4c5746684e6d5974595751785a533035597a566b4d7a686a4e7a51304f575639

image-20220824181134781

得到base64

image-20220824181145569

得到flag

1-3:babyProtocol

题目说控制流量 只用看udp即可

image-20220824181341760

可以看到data中有两个字节一直在变 其中一个都是可见字符

先把所有udp导出到json

再尝试提取这两个字节

import rewith open("udp.json","r",encoding="utf-8") as f:a=f.read()
a=a.split("\n")
e=[]
for x in a:if "data.data" in x:e.append(x.split(":"))print(x)
for i in range(len(e[0])):d1=[x[i] for x in e]f=""for x in d1:f+=xprint(f)

提取出之后hex转ascii

发现其中一个是

image-20220824181521527

一眼flag 但是顺序什么的不对 猜测另一个字节是字符顺序

a="0101030b080c11151a1e2718050305060a0c141719191b1c1e271804030405060708090d0e0a090e0f0f140e16191c27270102030405060708090a0b0c0d0e0f101112131415161728191a1b1c1d1e1f202122232425262718251d060401021024091006222426200202050b11261c04080d0a081a20"
b="6666616462393830653835647b617b363439353963632d643835646761677b363862333264343364383835643363643535666c61677b3638623334643932643861383434353033397d63652d6436383139643233363264356432363667666c6136336136323664396c6c7b6438646467623234626539"
c='00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",80",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",80",00",00",00",00",00",00",00",00",00",00",80",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",80",00",00",80",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",00",'.replace('"','').replace(",","")
eddd_a="ffadb980e85d{a{64959cc-d85dgag{68b32d43d885d3cd55flag{68b34d92d8a8445039}ce-d6819d2362d5d266gfla63a626d9ll{d8ddgb24be9"
tem=[0]*1000
a=re.findall(".{2}",a)
c=re.findall(".{2}",c)
for index in range(len(a)):x=int(a[index],16)tem[x]=eddd_a[index]print(str(x).zfill(2),eddd_a[index],c[index])
print(tem)

得到flag{68b34d92d8a8445039dce-d6819d2362d5}

但是不对 这时候返回去看 其实还有一个字节 (最后一个)有变化 只有80和00两种

尝试将80的字符删掉

即flag{68b34d92d88445039dced6819d2362d5}

re

easy_mb

go arm 跑不起来 qemu也没跑起来

直看到左边

image-20220824182054035

点开一看 Encrypt有内容 Decrypt没内容 稳了

然后开始几个小时的不知道干嘛的找enc和key时间

想了半天想起来&31好像是rc5

先尝试化简一下加密逻辑

image-20220824182215152

确实是RC5

然后找enc和key

image-20220824182332612

client里面看到一个指针调用 上面是New 猜测这个就调用的Encrypt

右键 set call type改一下

根据rc5的特点和byte_145A30长8字节 这个就是enc

最顶上调用了一个byte_146DD0 长16字节 这个是原始密钥

然后偷脚本改脚本

#include <stdio.h>
#include <iostream>
#include <stdio.h>
#include <string>
#include <iostream>
#include <cstring>
using namespace std;
#define ROTL32(x, c) (((x) << (c)) | ((x) >> (32 - c)))
#define ROTR32(x, c) (((x) >> (c)) | ((x) << (32 - c)))
#define ROTL(x, y) (((x) << (y & (32 - 1))) | ((x) >> (32 - (y & (32 - 1)))))
#define ROTR(x, y) (((x) >> (y & (32 - 1))) | ((x) << (32 - (y & (32 - 1)))))
int w = 32; //字长 32bit 4字节
int r = 12; // 12;//加密轮数12
int b = 16; //主密钥(字节为单位8bit)个数  这里有16个
int t = 26; // 2*r+2=12*2+2=26
int c = 4;  //主密钥个数*8/w = 16*8/32
void generateChildKey(uint8_t *KeyK, uint32_t *ChildKeyS)
{// const double e = 2.718281828459;// const double Phia = 1.618033988749;int PW = 0xB7E15163; // 0xb7e1;int QW = 0x9E3779B9; // 0x9e37;//genggaiint i;int u = w / 8; // b/8;uint32_t A, B, X, Y;uint32_t L[4]; // c=16*8/32A = B = X = Y = 0;//初始化数组SChildKeyS[0] = PW;printf("\n初始子密钥(没有主密钥的参与):\n%.8X ", ChildKeyS[0]);for (i = 1; i < t; i++) // t=26{if (i % 13 == 0)printf("\n");ChildKeyS[i] = (ChildKeyS[i - 1] + QW);printf("%.8X ", ChildKeyS[i]);}printf("\n");//将K数组转换为L数组for (i = 0; i < c; i++) //初始化L数组c=8{L[i] = 0;}for (i = b - 1; i != -1; i--) // b=16  转换主密钥数组(16个 单位为8bit)为L数组(8个单位为16bit),数组L每一元素长为16bit,数组K每一元素长为8bit{L[i / u] = (L[i / u] << 8) + KeyK[i];}printf("\n把主密钥变换为4字节单位:\n");for (i = 0; i < c; i++) // 16进制输出gaidong{printf("%.8X ", L[i]);}printf("\n\n");//产生子密钥,存储在ChildKeyS中for (i = 0; i < 3 * t; i++){X = ChildKeyS[A] = ROTL(ChildKeyS[A] + X + Y, 3);A = (A + 1) % t;Y = L[B] = ROTL(L[B] + X + Y, (X + Y));B = (B + 1) % c;}printf("生成的子密钥(初始主密钥参与和初始子密钥也参与):");for (i = 0; i < t; i++) // 16进制输出{if (i % 13 == 0)printf("\n");printf("0X%.8X, ", ChildKeyS[i]);}printf("\n\n");
}
/**5、    加密函数加密函数
*/
void Encipher(uint32_t *In, uint32_t *Out, uint32_t *S)
{uint32_t X, Y; //定义两个16位存储器int i, j;for (j = 0; j < 2; j += 2){X = In[j] + S[0];     // In[j]+S[0];Y = In[j + 1] + S[1]; // In[j+1]+S[1];for (i = 1; i <= 12; i++){X = ROTL((X ^ Y), Y) + S[2 * i];     // X=ROTL((X^Y),Y) + S[2*i];   异或,循环移位,相加 //ROTL(x,y) (((x)<<(y&(w-1))) | ((x)>>(w-(y&(w-1)))))Y = ROTL((Y ^ X), X) + S[2 * i + 1]; // Y=ROTL((Y^X),X) + S[2*i+1];}Out[j] = X;Out[j + 1] = Y; //密文}
}
void Decipher(uint32_t *In, uint32_t *Out, uint32_t *S)
{int i = 0, j;uint32_t X, Y;for (j = 0; j < 2; j += 2){X = In[j];Y = In[j + 1];for (i = 12; i > 0; i--){Y = ROTR(Y - S[2 * i + 1], X) ^ X; // Y = ROTR(Y-S[2*i+1],X)^X;相减,循环移位,异或  //ROTR(x,y) (((x)>>(y&(w-1))) | ((x)<<(w-(y&(w-1)))))X = ROTR(X - S[2 * i], Y) ^ Y;     // X = ROTR(X-S[2*i],Y)^Y;}Out[j] = X - S[0];     // Out[j]=X - S[0];Out[j + 1] = Y - S[1]; //明文 Out[j+1]=Y - S[1];}
}
int main()
{uint8_t inkey[16] = {0x2D, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00, 0x95, 0x2C, 0x49, 0x1E, 0x48, 0x81, 0xFF, 0x48};uint32_t key[26] = {0};generateChildKey(inkey, key);uint32_t v[2] = {0x73189ACE, 0x7C282BAA};uint32_t t[3] = {0};// decode(v, key);Decipher(v, t, key);puts((char *)t);
}

得到8t9Dl3Xm

image-20220824183602895

然后流量包里面标明寄存器是UINT16 两个字节 然后按小端序即可

t8D93lmX

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

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

相关文章

ubuntu18 : QEMU中新建S3C2440模拟器

1.下载 wget http://repo.or.cz/w/qemu/mini2440.git/snapshot/HEAD.tar.gz 2.解压 tar -zxvf HEAD.tar.gz cd mini2440-HEAD-18b91f2 3.安装依赖包 sudo apt-get install libsdl1.2-dev4.添加链接库 打开 Makefile.target文件,搜索-lz 将 LIBS+=-lz 这一行 改为 LIBS+=-…

第二届长城杯-MISC

1.知识点: (1)pdf隐写:wbStego4.3open工具的使用 (2)7进制转字符 2.解题过程:打开word,滑到最下方,发现有个password根据题目描述,以及password后缀猜测可能还有一个密码,因为它说word分为内在和外在两部分直接在word里搜,发现确实有两个直接用这两个去解PPT,发现…

awesome-exploration-rl 前沿追踪——如何高效地探索未知的奥秘

引言 探索和利用的平衡 (The banlance between exploration and exploitation) 是强化学习中最核心的问题之一。 一般来说,利用指的是利用当前已知知识做出最优动作,探索指的是探索未知的环境以获取新的知识,从而潜在地可能得到回报更大的动作。探索与利用如何平衡的问题即是…

How to Porsche Option Change Coding with PIWIS 3

How to Porsche Option Change Coding with PIWIS 3

KBPC5010W-ASEMI马达专用方桥KBPC5010W

编辑:ll KBPC5010W-ASEMI马达专用方桥KBPC5010W 型号:KBPC5010W 品牌:ASEMI 封装:KBPCW-4 正向电流:50A 反向电压:1000V 引脚数量:4 芯片个数:4 芯片尺寸:120MIL 漏电流:>10ua 恢复时间:ns 浪涌电流:300A 芯片材质:GPP硅芯片 正向电压:1.05V 封装尺寸:如图 特…

PE结构之RVA转换成FOA(3)

RVA转FOA 简介 PE文件有两种状态, 一种是在文件中的状态,另外一种是在内存中展开 若我们运行了一个PE文件且知道了某个全局变量的地址, 那么该如何通过这个全局变量地址来获得此变量在文件状态下的地址是什么呢? RVA(relative Virtual Address), 又称为相对虚拟偏移,简单来说就…

倒计时1天!计算巢软件免费试用中心发布,即刻报名!

免费、快速、开箱即用的云上应用新体验。免费、快速、开箱即用的云上应用新体验。计算巢即将重磅推出软件免费试用中心,为客户提供自动化交付的 ISV 软件试用版产品,包括 NebulaGraph、PingCAP、GitLab、EMQ、数云、用友等。计算巢充分利用快速部署的优势和云计算的弹性,实现…

微信上怎么设置每周二汽车限行限号提醒

对于很多人来说,每天手机不离手主要是为了接收各种各样的微信消息,无论是我们和孩子老师的交流还是和家人、同事们之间的交流都要用到微信。既然大多数人的都比较重视微信消息,所以有不少人都想要在手机微信上设置每周的汽车限行提醒,这样每周固定时间收到限号提醒,就不会…

学习:python异常

异常就是我们在写python时,经常看到的报错信息,例如:NameError TyperError ValueError 等 这些都是异常 异常会终止程序 SyntaxError 语法错误 NameError: name b is not defined变量名写错 IndentationError: unexpected indent缩进出错 ModuleNotFoundError第三方包未安装…

【深度学习】DNN房价预测

前言 我们使用深度学习网络实现波士顿房价预测,深度学习的目的就是寻找一个合适的函数输出我们想要的结果。深度学习实际上是机器学习领域中一个研究方向,深度学习的目标是让机器能够像人一样具有分析学习的能力,能够识别文字、图像、声音等数据。我认为深度学习与机器学习最…

视图(View)

视图家族有四个成员:View,ViewGroup,布局,控件 视图包括各类布局和控件,因为不管是布局还是控件,都是由视图基类View派生而来的,他们继承了View的所有属性。 视图组ViewGroup既是View的子类同时也是各种布局的基类,布局可以容纳其他视图,而控件不行,正是由于ViewGrou…

MAC【在线视频播放器】 ,300个电视直播,以及在线影视!

介绍 今天,我要来分享的是Mac下一款全能直播软件——在线视频播放器,目前作者已经更新至11.4版本。大家都知道,现在在网上收看一些直播是非常的难了,我曾经也为之苦恼过,后来发现了这么一款在线播放器才算解决了这一问题。这款在线播放器的开发者是Q群一位名叫“fosi”的大…

Makefile的使用

1 概要 软件的分层使软件的逻辑关系更清晰,但是也带来一个副作用,即Makefile也变得复杂了。道理显而易见:对于一个简单项目,如果所有文件都放在同一个文件夹内,Makefile写起来也会十分简单,但是我们不能一直停留在原始时代,当复杂项目的源文件按类型、功能、模块等分散到…

Codeforces Round #772 (Div. 2)

Codeforces Round #772 (Div. 2) VPA B C3min 12min 52min+4排名:rk3893 基准分:\(\color{ForestGreen}{1362}\) 从天选到天崩 A \(\color{Gray}{800}\)CF1635A Min Or Sum简要分析可知,其实答案就是对于所有数取或运算和(具体懒得管) 时间复杂度:\(O(n)\) int n,x; void w…

SMB登录事件排查经验分享

1. 概述1.1 案例先来看两张图: 看到这两张图的第一印象应该是这是一个成功的登陆,其类型为3,代表网络登陆,4624表示成功登陆,可能大部分人都是如此认为。 那么实际上呢?这里面是存在一定歧义的,今天给大家同步一下这里面的详细细节。1.2 原理当用户使用SMB 协议连接时,…

GET 和 POST详解

https://blog.csdn.net/qq_44204058/article/details/113984363 一、HTTP请求方法Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,…

leetcode 594. Longest Harmonious Subsequence 最长和谐子序列(简单).md

题目给我们一个数组,让我们找出最长的和谐子序列,和谐子序列就是序列中数组的最大最小差值均为1,这里只让我们求长度,而不需要返回具体的子序列。所以我们可以对数组进行排序,实际上只要找出来相差为1的两个数的总共出现个数就是一个和谐子序列长度了。一、题目大意 https…

2022DASCTF X SU 三月春季挑战赛 web

2022DASCTF——web1.ezpop 2.calc 3.upgdstoreezpop 给出了源码: <?phpclass crow {public $v1;public $v2;function eval() {echo new $this->v1($this->v2);}public function __invoke(){$this->v1->world();} }class fin {public $f1;public function __de…

SAAS市场不是“出身之争”,客户需求主导一切

“Salesforce中国区宣布解散”的消息,市场已经给出诸多分析和猜测。有意思的是,每当有外企中国业务受阻,市场就会有一波声音出来,认为这是外企在中国水土不服。这次也不例外,有一种观点认为外国软件不适合中国国情,未来将是中国SAAS厂商的机遇。 抛开现象看本质,抛开推测…