Windows逆向工程入門之MASM數據結構使用

  • 公開視頻 ->?鏈接點擊跳轉公開課程
  • 博客首頁 ->????鏈接點擊跳轉博客主頁

目錄

第一章:MASM數據定義體系精要

1.1 基礎數據類型全景

1.1.1 整型數據規范

1.1.2 浮點數據編碼

1.2 復合數據結構

1.2.1 多維數組定義

1.2.2 復雜結構體

第二章:逆向工程數據結構重建

2.1 PE文件數據段逆向

2.1.1 全局變量定位

2.1.2 導入表解析

2.2 運行時數據結構

2.2.1 堆內存結構

2.2.2 線程環境塊(TEB)

第三章:高級逆向技術專題

3.1 虛函數表逆向

3.1.1 C++對象模型

3.2 反匯編對抗技術

3.2.1 控制流混淆

3.2.2 數據混淆


第一章:MASM數據定義體系精要

1.1 基礎數據類型全景

1.1.1 整型數據規范
; 標準定義語法
var_raw    BYTE    0CCh        ; 原始字節定義
var_signed SWORD   -32768      ; 帶符號最大值
var_hex    DWORD   0DEADBEEFh  ; 十六進制表示法
var_oct    QWORD   177777q     ; 八進制表示法

存儲特征對比矩陣:?

類型位寬值域范圍機器碼示例內存布局模式
SBYTE8-128~12788 FF補碼存儲
WORD160~65535B8 00 01小端序
SDWORD32-2147483648~2147483647C7 45 FC FF FF FF擴展符號位
REAL864±1.7E±308 (精確到15位小數)66 0F 28 05IEEE-754標準
1.1.2 浮點數據編碼
fp_32    REAL4   3.1415926       ; 單精度浮點
fp_64    REAL8   2.7182818284    ; 雙精度浮點
fp_80    REAL10  1.6180339887    ; 擴展精度

IEEE-754編碼詳解:?

  • 單精度浮點(REAL4):

    • 符號位(1) + 指數位(8) + 尾數位(23)
    • 偏移值:127 → 實際指數=存儲值-127
    • 示例:0.15625 → 0_01111100_01000000000000000000000
  • 擴展雙精度(REAL10):

    • 顯式整數位設計(與x87 FPU兼容)
    • 指數偏移值:16383 → 支持更大數值范圍

1.2 復合數據結構

1.2.1 多維數組定義
; 二維數組定義技巧
matrix DWORD 3 DUP(5 DUP(0))     ; 3行5列零矩陣
access_example:mov eax, matrix[ebx*4 + esi] ; 訪問matrix[row][col]

內存布局驗證:?

00403000: 00 00 00 00 00 00 00 00 00 00 00 00...  ; 15個DWORD零值
1.2.2 復雜結構體
ProcessInfo STRUCTpid     DWORD ?ppid    DWORD ?flags   BYTE  ?_align  BYTE  3 DUP(?)  ; 結構體對齊填充name    QWORD ?
ProcessInfo ENDS; 嵌套結構應用
ThreadStruct STRUCTproc    ProcessInfo <>tid     DWORD ?status  DWORD ?
ThreadStruct ENDS

內存對齊規則:?

  • 自然對齊原則:成員偏移量必須為類型大小的整數倍
  • 手動填充技巧:使用BYTE數組補足對齊間隙
  • 編譯器差異:MASM與MSVC對齊策略對比(/Zp參數)

第二章:逆向工程數據結構重建

2.1 PE文件數據段逆向

2.1.1 全局變量定位
; 典型全局變量訪問模式
mov eax, [00403000h]          ; 絕對地址訪問
lea esi, [ebx+GlobalVarOffset] ; 基址偏移訪問

逆向識別技巧:?

  1. 查找跨函數數據引用(XREF)
  2. 分析初始化代碼段(.data節區)
  3. 跟蹤API參數中的常量地址
2.1.2 導入表解析
// IMAGE_IMPORT_DESCRIPTOR結構
typedef struct _IMAGE_IMPORT_DESCRIPTOR {DWORD   OriginalFirstThunk; // INT RVADWORD   TimeDateStamp;DWORD   ForwarderChain;DWORD   Name;              // DLL名稱RVADWORD   FirstThunk;        // IAT RVA
} IMAGE_IMPORT_DESCRIPTOR;

動態IAT修改檢測:?

  • 對比內存IAT與磁盤IAT差異
  • 檢查跳轉指令(JMP [IAT])完整性
  • 監控LoadLibrary/GetProcAddress調用

2.2 運行時數據結構

2.2.1 堆內存結構
// Windows堆塊結構(HEAP_ENTRY)
struct _HEAP_ENTRY {WORD Size;                 // 塊大小(含頭)WORD PreviousSize;         // 前塊大小BYTE SegmentIndex;BYTE Flags;DWORD UnusedBytes;
};

堆溢出漏洞模式:?

  • 覆蓋相鄰堆塊頭部信息
  • 破壞空閑鏈表結構
  • 利用Unlink操作寫入任意地址
2.2.2 線程環境塊(TEB)
; TEB關鍵成員訪問
mov eax, fs:[18h]       ; 獲取當前TEB地址
mov ecx, [eax+30h]      ; 獲取PEB地址
mov edx, [eax+20h]      ; 獲取ClientId

關鍵偏移解析:?

+0x000 NtTib            : _NT_TIB
+0x018 EnvironmentPointer : Ptr32 Void
+0x020 ClientId         : _CLIENT_ID
+0x030 ActiveRpcHandle  : Ptr32 Void
+0x034 ThreadLocalStorage : Ptr32 Void

第三章:高級逆向技術專題

3.1 虛函數表逆向

3.1.1 C++對象模型
; 典型虛函數調用
mov eax, [ecx]      ; 獲取虛表指針
call [eax+10h]      ; 調用第三個虛函數

虛表重建步驟:?

  1. 定位對象實例首地址
  2. 追蹤虛表指針的交叉引用
  3. 重建虛函數地址列表
  4. 分析RTTI信息(若有)

3.2 反匯編對抗技術

3.2.1 控制流混淆
; 動態計算跳轉目標
call $+5
pop eax
add eax, 15h
jmp eax

反制策略:?

  • 動態調試跟蹤執行流
  • 使用符號執行恢復路徑
  • 二進制插樁記錄跳轉軌跡
3.2.2 數據混淆
// 加密字符串存儲
char encrypted_str[] = {0xA1,0xB2,0xC3,0x00};void decrypt(char* str) {for(int i=0; str[i]; ++i)str[i] ^= 0x55;
}

自動化識別方法:?

  • 查找連續異或操作模式
  • 檢測解密函數特征(循環結構+位操作)
  • 使用angr符號執行求解

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

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

相關文章

筑牢安全防線:工商業場所燃氣泄漏防護新方案

燃氣安全是企業經營不可逾越的生命線。在餐飲后廚、化工車間、酒店鍋爐房等場所&#xff0c;可燃氣體一旦泄漏&#xff0c;極易引發嚴重事故。如何實現精準監測、快速響應&#xff0c;成為工業及商業領域安全管理的核心訴求。旭華智能深耕安全監測領域&#xff0c;推出的工業及…

本地部署大數據集群前置準備

1. 設置VMware網段 虛擬網絡編輯器——更改設置——選擇VMnet8——子網改成192.168.88.0——NAT設置——網關設置為192.168.88.2 2. 下載CentOS操作系統 下載CentOS 7.6(1810)版本 3. 在VMware中安裝CentOS操作系統 創建新的虛擬機——典型——安裝光盤映像文件——輸入賬…

【藍橋杯單片機】第十二屆省賽

一、真題 二、模塊構建 1.編寫初始化函數(init.c) void Cls_Peripheral(void); 關閉led led對應的鎖存器由Y4C控制關閉蜂鳴器和繼電器 由Y5C控制 2.編寫LED函數&#xff08;led.c&#xff09; void Led_Disp(unsigned char ucLed); 將ucLed取反的值賦給P0 開啟鎖存器…

PyCharm接入本地部署DeepSeek 實現AI編程!【支持windows與linux】

今天嘗試在pycharm上接入了本地部署的deepseek&#xff0c;實現了AI編程&#xff0c;體驗還是很棒的。下面詳細敘述整個安裝過程。 本次搭建的框架組合是 DeepSeek-r1:1.5b/7b Pycharm專業版或者社區版 Proxy AI&#xff08;CodeGPT&#xff09; 首先了解不同版本的deepsee…

CSS 系列之:grid 布局

基本概念 <template><div class"parent"><div class"box">p1-1</div><div class"box">p1-2</div><div class"box">p1-3</div></div><div class"parent"><…

數學軟件Matlab下載|支持Win+Mac網盤資源分享

如大家所了解的&#xff0c;Matlab與Maple、Mathematica并稱為三大數學軟件。Matlab應用廣泛&#xff0c;常被用于數據分析、無線通信、深度學習、圖像處理與計算機視覺、信號處理、量化金融與風險管理、機器人&#xff0c;控制系統等領域。 Matlab將數值分析、矩陣計算、科學…

水仙花數(華為OD)

題目描述 所謂水仙花數&#xff0c;是指一個n位的正整數&#xff0c;其各位數字的n次方和等于該數本身。 例如153是水仙花數&#xff0c;153是一個3位數&#xff0c;并且153 13 53 33。 輸入描述 第一行輸入一個整數n&#xff0c;表示一個n位的正整數。n在3到7之間&#x…

物聯網同RFID功能形態 使用場景的替代品

在物聯網&#xff08;IoT&#xff09;和自動識別技術領域&#xff0c;除了RFID標簽外&#xff0c;還有一些其他技術產品可以在形態和大小上與RFID標簽相似&#xff0c;同時提供類似或更強大的功能。以下是幾種能夠替代RFID標簽的產品&#xff1a; 一、NFC標簽 NFC&#xff08;…

03.03 QT

1.在注冊登錄的練習里面&#xff0c;追加一個QListwidget 項目列表 要求:點擊注冊之后&#xff0c;將賬號顯示到 1istwidget上面去 以及&#xff0c;在listwidget中雙擊某個賬號的時候&#xff0c;將該賬號刪除 Widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWi…

c++ cout詳解

在 C++ 中,cout 是標準輸出流對象,用于向控制臺(或標準輸出設備)輸出數據。它是 iostream 庫的核心組件之一,與 << 流插入運算符配合使用。 一、基本用法 1. 頭文件和命名空間 #include <iostream> // 必須包含的頭文件 using namespace std; // 命名空間(…

深入解析 .NET Core 的應用啟動流程

隨著 .NET Core 的發展&#xff0c;它逐漸成為構建跨平臺、高性能 Web 應用的首選框架。了解 .NET Core 的應用啟動流程是開發者成功使用該框架的關鍵&#xff0c;尤其是在調試、優化和部署時。本文將深入探討 .NET Core 的應用啟動過程&#xff0c;從創建 Web 主機、配置服務、…

(十二)基于 Vue 3 和 Mapbox GL 實現的坐標拾取器組件示例

下面是一個基于 Vue 3 和 Mapbox GL 實現的坐標拾取器組件示例: <template><div class="map-container"><div ref="mapContainer" class="map"></div><div class="coordinates-box"><div v-if=&qu…

LINUX網絡基礎 - 網絡編程套接字,UDP與TCP

目錄 前言 一. 端口號的認識 1.1 端口號的作用 二. 初識TCP協議和UDP協議 2.1 TCP協議 TCP的特點 使用場景 2.2 UDP協議 UDP的特點 使用場景 2.3 TCP與UDP的對比 2.4 思考 2.5 總結 三. 網絡字節序 3.1 網絡字節序的介紹 3.2 網絡字節序思考 四. socket接口 …

歌曲分類和流行度預測

1. 項目介紹 本項目從kaggle平臺上下載了數據集&#xff0c;該數據集包含了3萬多首來自Spotify API 的歌曲&#xff0c;共有23個特征。首先對數據集進行預處理&#xff0c;如重復行、缺失值、標準化處理等。再對預處理后的數據進行探索性分析&#xff0c;觀察各變量的分布情況&…

Trae:國內首款AI原生IDE,編程效率大提升

今年一月&#xff0c;在新聞上看到字節跳動面向海外市場推出了一款名為Trae的AI集成開發環境&#xff08;IDE&#xff09;。起初&#xff0c;我并未給予過多關注&#xff0c;因為市面上已有不少IDE集成了AI插件&#xff0c;功能也非常全面&#xff0c;而字節跳動自家的MarsCode…

實訓任務1.3 使用eNSP搭建基礎網絡

目錄 1.【實訓目標】 2.【實訓內容】 1.【實訓目標】 1.掌握eNSP仿真軟件的基本操作方法。 2.掌握使用eNSP仿真軟件搭建簡單的端到端網絡的方法。 【實訓環境】 1.硬件環境&#xff1a;每人一臺配置網卡的計算機。 2.軟件環境&#xff1a;華為eNSP仿真軟件。 2.【實訓內…

藍橋杯備賽Day12 動態規劃1基礎

動態規劃 動態規劃基礎 動態規劃將復雜問題分解成很多重疊的子問題&#xff0c;再通過子問題的解得到整個問題的解 分析步驟: 確定狀態:dp[i][j]val,“到第i個為止&#xff0c;xx為j的方案數/最小代價/最大價值” 狀態轉移方程: 確定最終狀態 要求: (1)最優子結構 (2)無后效性…

mac Homebrew安裝、更新失敗

我這邊使用brew安裝git-lfs 一直報這個錯&#xff1a; curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL更新brew update也是報這個錯誤。最后使用使用大佬提供的腳本進行操作&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/mast…

簡易的微信聊天網頁版【項目測試報告】

文章目錄 一、項目背景二、項目簡介登錄功能好友列表頁面好友會話頁面 三、測試工具和環境四、測試計劃測試用例部分人工手動測試截圖web自動化測試測試用例代碼框架配置內容代碼文件&#xff08;Utils.py&#xff09;登錄頁面代碼文件&#xff08;WeChatLogin.py&#xff09;好…

【開源-鴻蒙土撥鼠大理石系統】鴻蒙 HarmonyOS Next App+微信小程序+云平臺

?本人自己開發的開源項目&#xff1a;土撥鼠充電系統 ?踩坑不易&#xff0c;還希望各位大佬支持一下&#xff0c;在GitHub給我點個 Start ??&#x1f44d;&#x1f44d; ?GitHub開源項目地址&#x1f449;&#xff1a;https://github.com/cheinlu/HarmonyOS-groundhog-mar…