騰訊面試題算法還原【游戲安全】

本題的參考鏈接:https://share.weiyun.com/5Xg2b7v

其實拿到這個題我就感覺在哪里看過,后來想想是在旺仔那里看到的,以下是旺仔寫的分析過程可以參考一下https://bbs.kanxue.com/thread-276536.htm

但是這個題要比旺仔拿到的那個要增加些許難度,主要就是增加了類似于CRC校驗的東西還有反調試的一些東西,需要動態的獲取到目標偏移位置的字節值作為運算

后續還有更高級的其它要求,比如過掉反調試,但是我感覺像過反調試這種東西一定要用驅動的,不然隨意的重寫幾個反調試的API就會讓分析變得非常難,當然也可以選擇使用一些別人寫好的插件(但是那樣并不代表你自身的實力),在分析了一些反調試后發現果真重寫了幾個反調試API,隨即停止后續分析,以下是算法的整個還原結果

#include<stdio.h>
#include<Windows.h>int main()
{char True_Key[26];char Name[1024] = "12345678";char v20[28];char v18[28];char v22[28];int j;int i;unsigned int v13 = 0x19820714;int m;int v2;DWORD targetProcessId;printf("請輸入目標進程PID:");scanf_s("%d",&targetProcessId);// 打開目標進程HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, targetProcessId);if (hProcess == NULL){return 1;}// 要讀取的內存地址LPVOID address = (LPVOID)0x401BA9; // 替換成目標進程中要讀取的實際內存地址// 讀取的數據緩沖區BYTE buffer[10000] = { 0 }; // 根據需要調整緩沖區大小// 實際讀取的字節數SIZE_T bytesRead = 0;// 讀取內存if (ReadProcessMemory(hProcess, address, buffer, sizeof(buffer), &bytesRead)){// 在此處處理讀取到的內存數據for (i = 0; i < 2400; v13 ^= *((DWORD*)buffer + i++))v2 = i;}else{// 讀取失敗處理邏輯printf("讀取失敗\n");}// 關閉目標進程句柄CloseHandle(hProcess);memset(v20, 0, 25);memset(v22, 0, 25);memset(v18, 0, 28);memset(True_Key, 0, sizeof(True_Key));v20[0] = '0';v22[0] = 'A';v18[0] = 'a';unsigned __int8 v8;unsigned __int8 v7;unsigned __int8 v6;for (j = 1; j < 26; ++j){v20[j] = v20[j - 1] + 1;v22[j] = v22[j - 1] + 1;v18[j] = v18[j - 1] + 1;}char v25[] = { 0xF7,0xFF,0xFF,0x89,0x8D,0x4C,0xF7,0xFF };char v19[] = { 0x07,0x82,0x19,0xE8,0x1F,0xFE,0xFF,0xFF };int k;for (k = 0; k < 8; ++k){Name[k] ^= k;Name[k] ^= v25[k];Name[k] ^= v19[k];}*(DWORD*)Name ^= v13;*(DWORD*)&Name[4] ^= v13;memset(True_Key, 0, sizeof(True_Key));for (m = 0; m < 8; ++m){v8 = (unsigned __int8)(Name[m] & 0xE0) / 32;v6 = (Name[m] & 0x1C) / 4;v7 = Name[m] & 3;if (m % 3 == 2){True_Key[3 * m] = v20[v7];True_Key[3 * m + 1] = v22[v8 + 8];True_Key[3 * m + 2] = v18[v6 + 16];}if (m % 3 == 1){True_Key[3 * m] = v22[v8 + 16];True_Key[3 * m + 1] = v18[v6 + 8];True_Key[3 * m + 2] = v20[v7];}if (!(m % 3)){True_Key[3 * m] = v22[v6 + 16];True_Key[3 * m + 1] = v18[v7 + 8];True_Key[3 * m + 2] = v20[v8];}}printf("%s\n", True_Key);system("pause");
}

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

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

相關文章

Flowable 6.8.0中主要數據表及其字段

在Flowable 6.8.0中&#xff0c;以下是每個表的作用并列出每張表的所有字段及其含義&#xff1a; act_evt_log (用于記錄流程引擎事件的日志) log_nr&#xff1a;日志編號type&#xff1a;事件類型proc_def_id&#xff1a;流程定義IDproc_inst_id&#xff1a;流程實例IDexecuti…

AI 繪畫Stable Diffusion 研究(七) 一文讀懂 Stable Diffusion 工作原理

大家好&#xff0c;我是風雨無阻。 本文適合人群&#xff1a; 想要了解AI繪圖基本原理的朋友。 對Stable Diffusion AI繪圖感興趣的朋友。 本期內容&#xff1a; Stable Diffusion 能做什么 什么是擴散模型 擴散模型實現原理 Stable Diffusion 潛擴散模型 Stable Diffu…

【量化課程】02_4.數理統計的基本概念

2.4_數理統計的基本概念 數理統計思維導圖 更多詳細內容見notebook 1.基本概念 總體&#xff1a;研究對象的全體&#xff0c;它是一個隨機變量&#xff0c;用 X X X表示。 個體&#xff1a;組成總體的每個基本元素。 簡單隨機樣本&#xff1a;來自總體 X X X的 n n n個相互…

資料分析(二)—— 速算技巧 - 高照

常用方法 A * 1.5 A A的一半 120*1.5 120 60 A * 1.1 A 錯位相加 123*1.1 12312.3 A * 0.9 A 錯位相減 123*0.9 123-12.3 A/5 A * 2 &#xff0c;小數點左移一位 24/5 4.8 A/25 A * 4 &#xff0c;小數點左移兩位 24/25 0.96 A/125 A * 8 &#xff0c;小數點左移…

mtl文件解釋

.mtl文件是一種文本文件&#xff0c;通常用于與三維模型文件&#xff08;如.obj文件&#xff09;一起描述三維模型的材質&#xff08;Material&#xff09;屬性和外觀。這些屬性包括顏色、紋理、光照等信息&#xff0c;以便在渲染或展示三維模型時能夠正確地呈現出模型的外觀效…

【leetcode】【圖解】617. 合并二叉樹

題目 難度&#xff1a;簡單 給你兩棵二叉樹&#xff1a; root1 和 root2 。 想象一下&#xff0c;當你將其中一棵覆蓋到另一棵之上時&#xff0c;兩棵樹上的一些節點將會重疊&#xff08;而另一些不會&#xff09;。你需要將這兩棵樹合并成一棵新二叉樹。合并的規則是&#xf…

Python web實戰之Django的AJAX支持詳解

關鍵詞&#xff1a;Web開發、Django、AJAX、前端交互、動態網頁 今天和大家分享Django的AJAX支持。AJAX可實現在網頁上動態加載內容、無刷新更新數據的需求。 1. AJAX簡介 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一種在網頁上實現異步通信的技術。通過…

electron 使用node C++插件 node-gyp

node C插件使用&#xff0c;在我們常規使用中&#xff0c;需要使用node-gyp指定對飲的node版本即可 在electron的使用中&#xff0c;我們需要指定的是electron版本要不然會報錯使用的v8內核版本不一致導致C擴展無法正常引入 electron官方文檔-node原生模塊 package.json {&quo…

標準的rust后端項目的結構是怎樣的呢?

一個標準的Rust后端項目通常遵循一種常見的項目結構&#xff0c;以下是一個示例&#xff1a; . ├── Cargo.toml ├── src │ ├── main.rs │ ├── lib.rs │ ├── handlers │ │ ├── mod.rs │ │ └── user_handler.rs │ ├── models │…

一百五十四、Kettle——Linux上安裝Kettle9.3(踩坑,親測有效,附截圖)

一、目的 由于kettle8.2在Linux上安裝后&#xff0c;共享資源庫創建遇到一系列問題&#xff0c;所以就換成kettle9.3 二、kettle版本以及安裝包網盤鏈接 kettle9.3.0安裝包網盤鏈接 鏈接&#xff1a;https://pan.baidu.com/s/1MS8QBhv9ukpqlVQKEMMHQA?pwddqm0 提取碼&…

解決電腦聲音正常但就是某些游戲沒聲音問題

電腦聲音正常&#xff0c;玩普遍游戲也正常&#xff0c;就有游戲不出聲音 詳細介紹經過&#xff0c;不喜歡的請直接跳 第三部分。 一、先說下起因現象。 1 大富翁11 沒聲音。 前段時間無聊懷舊就買了個大富翁11玩玩&#xff0c;近二十年前的老臺式機正常無問題。后來想在性能…

Java多線程編程:實現并發處理的高效利器

Java多線程編程&#xff1a;實現并發處理的高效利器 作者&#xff1a;Stevedash 發表于&#xff1a;2023年8月13日 20點45分 來源&#xff1a;Java 多線程編程 | 菜鳥教程 (runoob.com) ? 在計算機領域&#xff0c;多線程編程是一項重要的技術&#xff0c;可以使程序同時執…

InnoDB文件物理結構解析6 - FIL_PAGE_INDEX

本文討論Secondary Key Page的解析&#xff0c;也就是表非主鍵索引的記錄存儲。與Clustered Key Page有相同的基本記錄結構&#xff0c;也細分為Leaf Page和Non-Leaf Page&#xff0c;我們先看結構&#xff1a; ### Contents (Secondary Key - Leaf Page) ### ---------------…

從小白到大神之路之學習運維第79天-------Kubernetes網絡組件詳解

第四階段 時 間&#xff1a;2023年8月14日 參加人&#xff1a;全班人員 內 容&#xff1a; Kubernetes網絡組件詳解 目錄 一、Kubernetes網絡組件 &#xff08;一&#xff09;Flannel網絡組件 &#xff08;二&#xff09;Calico 網絡插件 &#xff08;1&#xff09;…

設計模式——建造者(Builder)模式

建造者模式&#xff08;Builder Pattern&#xff09;&#xff0c;又叫生成器模式&#xff0c;是一種對象構建模式 它可以將復雜對象的建造過程抽象出來&#xff0c;使這個抽象過程的不同實現方法可以構造出不同表現的對象。建造者模式是一步一步創建一個復雜的對象&#xff0c;…

(14)嵌套列表,Xpath路徑表達式,XML增刪查改,Implicit,Operator,Xml序列化,淺拷貝與深拷貝

一、作業問題 1、問&#xff1a;listbox1.items[i]返回的object是指的字符串嗎&#xff1f; 答&#xff1a;items是真正的對象集合&#xff0c;在Add時加的是Person對象p&#xff0c;則里面的item就是Person對象p。 但是&#xff0c;在listbox1顯…

在單元測試中使用Jest模擬VS Code extension API

對VS Code extension進行單元測試時通常會遇到一個問題&#xff0c;代碼中所使用的VS Code編輯器的功能都依賴于vscode庫&#xff0c;但是我們在單元測試中并沒有添加對vscode庫的依賴&#xff0c;所以導致運行單元測試時出錯。由于vscode庫是作為第三方依賴被引入到我們的VS C…

[oneAPI] BERT

[oneAPI] BERT BERT訓練過程Masked Language Model&#xff08;MLM&#xff09;Next Sentence Prediction&#xff08;NSP&#xff09;微調 總結基于oneAPI代碼 比賽&#xff1a;https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI&…

JVM 中的編譯器

在Java的世界里,JVM(Java Virtual Machine)扮演了重要的角色。JVM是一個虛擬機,是Java程序的運行環境,它能夠將Java字節碼文件解釋執行,使得Java程序可以跨平臺。在JVM內部,有一個重要的組件就是編譯器,它的作用就是將Java源代碼編譯成字節碼,讓JVM可以識別并執行。 …

redis集群和分片-Redis Cluster:分布式環境中的數據分片、主從復制和 Sentinel 哨兵

當涉及到 Redis 中的集群、分片、主從復制和 Sentinel 哨兵時&#xff0c;這些是構建分布式 Redis 環境中非常重要的概念和組件。下面詳細介紹這些概念以及它們在分布式環境中的作用。 Redis Cluster Redis Cluster 是 Redis 官方提供的分布式解決方案&#xff0c;用于管理和…