星痕共鳴數據分析2

今天實驗內容是攻擊力部分

1.思路
由于昨天數據分析出了一個函數
這個函數可以把奇怪的字節變成正常的數字

int parse_varint(unsigned const char* data, int count)
{int value = 0;int shift = 0;for (int i = 0; i < count; i++) {unsigned char byte = data[i];value |= ((byte & 0x7F) << shift);shift += 7;}return value;
}

然后,我們把函數逆推,得到下面的函數
這個函數可以把正常的數字變成奇怪的字符

void encode_varint(unsigned char* output, int* count, int value)
{*count = 0;do {unsigned char byte = value & 0x7F;value >>= 7;if (value != 0) {byte |= 0x80;  // 設置最高位表示還有后續字節}output[(*count)++] = byte;} while (value != 0);
}

然后我們攻擊一下場景內的怪物,造成傷害346,然后抓包
346代入上面的函數,得到0xda, 0x02
結合抓包信息
在這里插入圖片描述
我們可以看到傷害0xda, 0x02已經在包里面出現了(這個包的數據量比較多)
為了確保正確性,可以多次抓包驗證

然后,分析字節數據發現大多數數據都是0x12+長度
可以用這個分析結構

#include <iostream>
#include <vector>
#include <iomanip>
#include <memory>
#include"XHGM.h"
// 定義段節點結構
struct Segment {int length;  // 數據段長度(不包括起始的0x12和長度字節)std::vector<unsigned char> data;  // 段數據(可能包含子段)std::vector<std::unique_ptr<Segment>> children;  // 子段列表
};// 遞歸解析數據為樹形結構
std::unique_ptr<Segment> parseSegment(const unsigned char* data, int data_size, int& index, int depth = 0) {if (index >= data_size) return nullptr;// 創建新節點auto node = std::make_unique<Segment>();// 驗證起始字節if (data[index] != 0x12) {std::cerr << "Error: Expected 0x12 at index " << index << ", found 0x"<< std::hex << std::setw(2) << std::setfill('0')<< static_cast<int>(data[index]) << std::endl;index++;  // 跳過無效字節return nullptr;}index++;  // 跳過0x12// 獲取段長度if (index >= data_size) {std::cerr << "Error: Missing length byte at index " << index << std::endl;return nullptr;}node->length = static_cast<int>(data[index]);index++;  // 跳過長度字節// 提取段數據int end_index = index + node->length;if (end_index > data_size) {std::cerr << "Error: Incomplete segment at index " << index<< ", declared length: " << node->length << std::endl;return nullptr;}// 遞歸解析嵌套的子段while (index < end_index) {if (data[index] == 0x12) {// 遞歸解析子段auto child = parseSegment(data, data_size, index, depth + 1);if (child) {node->children.push_back(std::move(child));}}else {// 添加普通數據字節node->data.push_back(data[index]);index++;}}return node;
}// 打印樹形結構
void printSegmentTree(const Segment* node, int depth = 0) {if (!node) return;// 縮進表示層級std::string indent(depth * 2, ' ');// 打印當前節點信息std::cout << indent.c_str() << "Segment (Length=" << node->length << "): ";// 打印原始數據if (!node->data.empty()) {std::cout << "Data: ";for (auto byte : node->data) {std::cout << "0x" << std::hex << std::setw(2) << std::setfill('0')<< static_cast<int>(byte) << " ";}/*int lens = node->data.size();char *t = new char[lens];int t1 = 0;for (auto byte : node->data) {t[t1++] = byte;}int tt = parse_varint(t, lens);std::cout << tt;delete[] t;*/}std::cout << std::endl;// 遞歸打印子節點for (const auto& child : node->children) {printSegmentTree(child.get(), depth + 1);}
}int main() {// 原始數據unsigned char peer0_5[] = {0x12, 0x0b, 0x08, 0x96, 0xa1, 0x3e, 0x10, 0xa9, 0x06, 0x18, 0xe4, 0xaf, 0x01,
0x12, 0x0a, 0x08, 0x97, 0xa1, 0x3e, 0x10, 0xe0, 0x04, 0x18, 0x98, 0x75,
0x12, 0x0a, 0x08, 0x98, 0xa1, 0x3e, 0x10, 0xc7, 0x06, 0x18, 0x98, 0x75,
0x12, 0x04, 0x08, 0xf7, 0xa1, 0x3e, 
0x12, 0x0b, 0x08, 0xf8, 0xa1, 0x3e, 0x10, 0xec, 0x03, 0x18, 0x80, 0xe1, 0x01, 
0x12, 0x04, 0x08, 0xf9, 0xa1, 0x3e, 
0x12, 0x0a, 0x08, 0xfa, 0xa1, 0x3e, 0x10, 0x01, 0x18, 0x8c, 0xf6, 0x01, 
0x12, 0x0a, 0x08, 0xfb, 0xa1, 0x3e, 0x10, 0x03, 0x18, 0xf8, 0xd2, 0x01,
0x12, 0x04, 0x08, 0xfc, 0xa1, 0x3e, 
0x12, 0x0b, 0x08, 0xfd, 0xa1, 0x3e, 0x10, 0x8e, 0x01, 0x18, 0x88, 0xef, 0x01, 
0x12, 0x0b, 0x08, 0xfe, 0xa1, 0x3e, 0x10, 0xeb, 0x04, 0x18, 0xfc, 0xd9, 0x01};int data_size = sizeof(peer0_5) / sizeof(peer0_5[0]);int index = 0;std::vector<std::unique_ptr<Segment>> rootSegments;// 解析所有頂級段while (index < data_size) {auto segment = parseSegment(peer0_5, data_size, index);if (segment) {rootSegments.push_back(std::move(segment));}else {// 跳過無效字節index++;}}// 打印解析結果std::cout << "Found " << rootSegments.size() << " root segments:\n";for (size_t i = 0; i < rootSegments.size(); ++i) {std::cout << "\nRoot Segment " << i + 1 << ":\n";printSegmentTree(rootSegments[i].get());}return 0;
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90605.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90605.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90605.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

強化學習新發現:僅需更新5%參數的稀疏子網絡可達到全模型更新效果

摘要&#xff1a;強化學習&#xff08;RL&#xff09;已成為大語言模型&#xff08;LLM&#xff09;在完成預訓練后與復雜任務及人類偏好對齊的關鍵步驟。人們通常認為&#xff0c;要通過 RL 微調獲得新的行為&#xff0c;就必須更新模型的大部分參數。本研究對這一假設提出了挑…

electron 使用記錄

目錄 代理設置以打包成功 參考文檔 代理設置以打包成功 參考文檔 使用 JavaScript、HTML 和 CSS 構建跨平臺桌面應用 |電子 --- Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron

Spring boot Grafana優秀的監控模板

JVM (Micrometer) | Grafana Labs 1 SLS JVM監控大盤 | Grafana Labs Spring Boot 2.1 Statistics | Grafana Labs springboot granfana 監控接口指定接口響應的 在Spring Boot應用中&#xff0c;使用Grafana進行監控通常涉及以下幾個步驟&#xff1a; 設置Prometheus作…

LeetCode11~30題解

LeetCode11.盛水最多的容器&#xff1a; 題目描述&#xff1a; 給定一個長度為 n 的整數數組 height 。有 n 條垂線&#xff0c;第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成的容器可以容納最多的水。 返回容器…

計算機結構-邏輯門、存儲器、內存、加法器、鎖存器、程序計數器

邏輯門 邏輯門簡單地理解即通過特定的條件實現與、或、非、異或等相關邏輯二極管 這些最基礎的邏輯門都是通過電路元器件進行搭建的&#xff0c;即半導體材料搭建的二極管二極管有個特點&#xff0c;一定條件下才可以導通&#xff0c;即得接對正負極&#xff0c;具體的原理可以…

連鎖店鋪巡查二維碼的應用

在連鎖店鋪的運營管理中&#xff0c;巡查工作是保障各門店規范運作、提升服務質量的關鍵環節。巡查二維碼的出現&#xff0c;為這一環節帶來了高效、便捷且規范的解決方案&#xff0c;其應用場景廣泛&#xff0c;優勢顯著。在如今的繁雜且效果參差不齊電子二維碼市場中&#xf…

各種前端框架界面

前端技術更新迭代很快&#xff0c;已經有不少新的前端框架問世&#xff0c;而且像geeker-admin風格的界面設計也挺不錯的。 今天去面試了前端開發崗位&#xff0c;感覺希望不大。畢竟中間空了一段時間沒接觸&#xff0c;得趕緊把新的知識點補上&#xff0c;這樣哪怕是居家辦公也…

DApp 開發者 學習路線和規劃

目錄 ?? 一、學習路線圖 階段 1:基礎知識(1~2 周) 階段 2:智能合約開發(3~4 周) 階段 3:前端與區塊鏈交互(2~3 周) 階段 4:進階與生態系統(持續學習) ?? 二、學習規劃建議(3~4 個月) ?? 三、工具推薦 ?? 四、附加建議 ?? 一、學習路線圖 階段 …

數據結構 二叉樹(3)---層序遍歷二叉樹

在上篇文章中我們主要講了關于實現二叉樹的內容&#xff0c;包括遍歷二叉樹&#xff0c;以及統計二叉樹等內容。而在這篇文章中我們將詳細講解一下利用隊列的知識實現層序遍歷二叉樹。那么層序遍歷是什么&#xff1f;以及利用隊列遍歷二叉樹又是怎么遍歷的&#xff1f;下面讓我…

【橘子分布式】gRPC(番外篇-攔截器)

一、簡介 我們之前其實已經完成了關于grpc的一些基礎用法&#xff0c;實際上還有一些比較相對進階的使用方式。比如&#xff1a; 攔截器&#xff1a;包括客戶端和服務端的攔截器&#xff0c;進而在每一端都可以劃分為流式的攔截器和非流式的攔截器。和以前我們在spring web中的…

深入探索嵌入式仿真教學:以酒精測試儀實驗為例的高效學習實踐

引言&#xff1a;嵌入式技術普及下的教學革新 嵌入式系統作為現代科技的核心驅動力&#xff0c;其教學重要性日益凸顯。然而&#xff0c;傳統硬件實驗面臨設備成本高、維護難、時空受限等挑戰。如何突破這些瓶頸&#xff0c;實現高效、靈活、專業的嵌入式教學&#xff1f;本文將…

三種深度學習模型(GRU、CNN-GRU、貝葉斯優化的CNN-GRU/BO-CNN-GRU)對北半球光伏數據進行時間序列預測

代碼功能 該代碼實現了一個光伏發電量預測系統&#xff0c;采用三種深度學習模型&#xff08;GRU、CNN-GRU、貝葉斯優化的CNN-GRU/BO-CNN-GRU&#xff09;對北半球光伏數據進行時間序列預測對北半球光伏數據進行時間序列預測&#xff0c;并通過多維度評估指標和可視化對比模型性…

PostgreSQL對象權限管理

本文記述在postgreSQL中對用戶/角色操作庫、模式、表、序列、函數、存儲過程的權限管理針對數據庫的授權 授權&#xff1a;grant 權限 on database 數據庫 to 用戶/角色; 撤權&#xff1a;revoke 權限 on database 數據庫 from 用戶/角色; 針對模式的授權 授權&#xff1a;gran…

Wordpress主題配置

一、下載主題 主題下載地址&#xff1a;https://www.iztwp.com/tag/blog-theme 二、主題安裝 三、上傳主題安裝即可 四、安裝完成啟動主題

lock 和 synchronized 區別

1. 引言 在多線程編程中&#xff0c;我們經常需要確保某些代碼在同一時刻只由一個線程執行。這種機制通常叫做“互斥鎖”或“同步”。Java 提供了兩種主要的同步機制&#xff1a;synchronized 關鍵字和 Lock 接口。盡管它們的作用相似&#xff0c;都用于實現線程的同步&#xf…

Tkinter - Python圖形界面開發指南

作者&#xff1a;唐叔在學習 專欄&#xff1a;唐叔學python 標簽&#xff1a;Python GUI編程 Tkinter教程 圖形界面開發 Python實戰 界面設計 事件監聽 Python入門 唐叔Python 編程學習 軟件開發 文章目錄一、Tkinter是什么&#xff1f;為什么選擇它&#xff1f;二、Tkinter基礎…

Java基礎day15

目錄 一、Java集合簡介 1.什么是集合&#xff1f; 2.集合接口 3.小結 二、List集合 1.List集合簡介 三、ArrayList容器類 1.初始化 1.1無參初始化 1.2有參初始化 2.數據結構 3.常用方法 3.1增加元素 3.2查找元素 3.3 修改元素 3.4 刪除元素 3.5 其他方法 4.擴…

React Three Fiber 實現晝夜循環:從光照過渡到日月聯動的技術拆解

在 3D 場景中用 React Three Fiber 實現自然的晝夜循環&#xff0c;核心難點在于光照的平滑過渡、日月運動的聯動邏輯、晝夜狀態下的光影差異處理&#xff0c;以及性能與視覺效果的平衡。本文以一個 ReactThree.js 的實現為例&#xff0c;詳細解析如何通過三角函數計算日月位置…

進階向:基于Python的簡易屏幕畫筆工具

用Python打造你的專屬屏幕畫筆工具&#xff1a;零基礎也能輕松實現你是否曾在觀看網課或參加遠程會議時&#xff0c;想要直接在屏幕上標注重點&#xff1f;或者作為設計師&#xff0c;需要快速繪制創意草圖&#xff1f;現在&#xff0c;只需幾行Python代碼&#xff0c;你就能輕…

Elasticsearch-ik分析器

CLI 安裝步驟 1、停止 Elasticsearch&#xff08;如果正在運行&#xff09;&#xff1a; 在安裝插件之前&#xff0c;確保 Elasticsearch 沒有在運行。 命令&#xff1a; systemctl stop elasticsearch2、安裝插件&#xff1a; 使用 elasticsearch-plugin 命令安裝 IK 插件。進…