当前位置: 首页 > news >正文

Windows逆向工程入门之MASM编程深度解析

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

第一章:MASM程序架构与核心要素

1.1 标准程序框架解析

1.2 数据定义与内存管理

1.3 寻址模式全解

直接寻址

寄存器相对寻址

基址变址寻址

带比例的间接寻址

第二章:逆向工程基础与PE文件精析

2.1 PE文件结构三维透视

2.2 函数调用逆向追踪

典型函数框架

2.3 逆向工程工具链

IDA Pro高级功能

WinDbg实战命令

第三章:进阶逆向技术专题

3.1 反汇编对抗技术

代码混淆手段

反动态分析技术

3.2 异常处理机制逆向

SEH链遍历方法

VEH与SEH对比

第四章:安全编程与防御体系

4.1 缓冲区溢出防护

GS安全机制

DEP/NX保护绕过

4.2 代码完整性验证

哈希校验实现

数字签名验证


第一章:MASM程序架构与核心要素

1.1 标准程序框架解析

.586                ; 指定80386指令集及更高版本
.model flat,stdcall ; 内存模型与调用约定
option casemap:none ; 强制区分大小写

.data               ; 初始化数据段
    szMsg db 'Hello Reversing!',0
.code               ; 代码段入口
main proc
    invoke MessageBoxA,0,offset szMsg,0,0
    invoke ExitProcess,0
main endp
end main

关键组件说明:​

  • 内存模型(Memory Model)​
    flat模式表示32位线性地址空间,所有段寄存器(CS/DS/ES/SS)指向同一4GB空间

  • 调用约定(Calling Convention)​
    stdcall参数压栈顺序为从右向左,被调用函数负责栈平衡,典型特征如:
    push arg3 → push arg2 → push arg1 → call func

  • 混合编程特性
    支持invoke伪指令实现API调用,自动处理参数压栈和栈平衡

1.2 数据定义与内存管理

数据类型伪指令对照表:​

伪指令位宽等价类型
BYTE8unsigned char
WORD16short
DWORD32long
QWORD64__int64
REAL432float

内存分配高级技巧:​

.data
    dwArray DWORD 50 DUP(?)       ; 200字节未初始化数组
    struc _POINT                  ; 自定义结构体
        x DWORD ?
        y DWORD ?
    ends
    pt1 _POINT <100,200>         ; 结构体实例化

1.3 寻址模式全解

直接寻址
mov eax, [00401000h]       ; 绝对地址访问(需VirtualQuery验证可读性)
寄存器相对寻址
mov ecx, [esi+20h]         ; 常用于结构体字段访问
基址变址寻址
mov edx, [ebx+edi*4]       ; 数组元素访问(元素大小=4字节)
带比例的间接寻址
lea eax, [ebp-40h]         ; 获取局部变量地址

第二章:逆向工程基础与PE文件精析

2.1 PE文件结构三维透视

typedef struct _IMAGE_DOS_HEADER {  // DOS头
    WORD e_magic;                   // "MZ"
    LONG e_lfanew;                  // PE头偏移
} IMAGE_DOS_HEADER;

typedef struct _IMAGE_NT_HEADERS {  // PE头
    DWORD Signature;                // "PE\0\0"
    IMAGE_FILE_HEADER FileHeader;
    IMAGE_OPTIONAL_HEADER OptionalHeader;
} IMAGE_NT_HEADERS;

// 关键数据目录项(Index枚举值)
#define IMAGE_DIRECTORY_ENTRY_IMPORT    1   // 导入表
#define IMAGE_DIRECTORY_ENTRY_EXPORT    0   // 导出表

逆向分析要点:​

  • 节区特征识别

    • .text: 可执行代码(常包含OEP)
    • .data: 全局变量/静态数据
    • .rdata: 导入表/IAT等重要结构
  • RVA转换公式
    文件偏移 = VirtualAddress - VirtualSectionStart + RawDataOffset

2.2 函数调用逆向追踪

典型函数框架
; 函数序言(Prologue)
push ebp
mov ebp, esp
sub esp, 0C0h              ; 分配局部变量空间

; 函数尾声(Epilogue)
mov esp, ebp
pop ebp
retn 8                     ; 清理8字节参数

栈帧分析技巧:​

  • 参数定位[ebp+8]为第一个参数地址
  • 局部变量[ebp-4]为第一个局部变量
  • 返回地址[ebp+4]保存call指令下条地址

2.3 逆向工程工具链

IDA Pro高级功能
  • 交叉引用(Xrefs)​Ctrl+X查看数据/代码引用路径
  • 结构体重建ALT+Q快速应用结构模板
  • 脚本扩展:IDAPython实现自动化分析
WinDbg实战命令
!peb                  // 查看进程环境块
lm m kernel32         // 列出模块信息
u 00401000 L5         // 反编译指定地址代码
dt _PEB @$peb         // 解析PEB结构

第三章:进阶逆向技术专题

3.1 反汇编对抗技术

代码混淆手段
jz $+5                 ; 动态跳转
call $+5               ; 动态计算地址
pop eax                ; 获取当前EIP
反动态分析技术
  • TLS回调检测:在EP执行前初始化反调试
  • NtQueryInformationProcess:检测ProcessDebugPort
  • 时间戳检测:RDTSC指令检查执行时间差

3.2 异常处理机制逆向

SEH链遍历方法
assume fs:nothing
mov eax, fs:[0]       ; 获取EXCEPTION_REGISTRATION
@@:
cmp eax, -1           ; 链尾检测
je @f
mov ebx, [eax+4]      ; 异常处理函数地址
mov eax, [eax]        ; 下一节点
jmp @b
VEH与SEH对比
特性SEHVEH
作用范围线程级进程级
执行顺序最后执行最先执行
注册方式FS:[0]链AddVectoredExceptionHandler
反调试应用较少常见于高级保护

第四章:安全编程与防御体系

4.1 缓冲区溢出防护

GS安全机制
; 典型GS Cookie生成
mov eax, ___security_cookie
xor eax, ebp
mov [ebp-4], eax
DEP/NX保护绕过
  • ROP链构造:利用现有代码片段拼接攻击链
  • JIT喷射攻击:通过可执行内存区域注入代码

4.2 代码完整性验证

哈希校验实现
mov esi, offset CodeStart
mov edi, offset CodeEnd
sub edi, esi
invoke CalcHash, esi, edi
cmp eax, [dwExpectedHash]
jnz Alarm
数字签名验证
WinVerifyTrust(
    hWnd,
    &ACTION_VERIFY,
    &WinTrustData
);

相关文章:

  • Spring MVC视图解析器的定制与应用
  • 【强化学习笔记1】从强化学习的基本概念到近端策略优化(PPO)
  • Parquet 编码
  • SQL Server 中遇到的常见问题集
  • 2025学年安徽省职业院校技能大赛 “信息安全管理与评估”赛项 比赛样题任务书
  • docker-compose部署onlyoffice8.3.0并支持ssl,且支持通过nginx代理,关闭JWT配置
  • RabbitMQ系列(四)基本概念之Exchange
  • 线上服务器的文件下载到本地Windows电脑
  • hackmyvm-hero
  • Python学习第十八天之深度学习之Tensorboard
  • 网络安全和爬虫的关系
  • 网络协议 HTTP、HTTPS、HTTP/1.1、HTTP/2 对比分析
  • 算法——分治
  • Java从根上理解 ConcurrentHashMap:缓存机制与性能优化
  • 欧几里得算法
  • 计算机视觉 |解锁视频理解三剑客——SlowFast
  • 基于云函数的自习室预约微信小程序+LW示例参考
  • 服务器为什么会禁止 Ping?服务器禁止 Ping 的好处
  • 【项目管理工具推荐二】【信息化系统需求管理工具万字指南:从需求收集到落地全链路拆解】
  • 如何在Android中实现多线程
  • 河北6人在河道倒污泥被控污染环境案撤诉后,已拿到国赔决定书
  • 老旧小区加装电梯后续维护谁负责?上海:各区属房管集团托底保障
  • 脱欧后首次英欧峰会召开前夕,双方却因渔业和青年流动议题僵住了
  • 曾毓群说未来三年重卡新能源渗透率将突破50%,宁德时代如何打好换电这张牌
  • 外媒:哈马斯一名高级指挥官尸体被发现,系辛瓦尔弟弟
  • 美官方将使用华为芯片视作违反美出口管制行为,外交部回应