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

Windows逆向工程入门之MASM过程调用机制深度解析

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

目录

一、过程入口控制与栈帧管理:从ENTRY到LEAVE

1.1 栈帧构建的机器级实现

二、高级过程调用机制:INVOKE与PROTO的逆向对抗

2.1 调用约定的二进制指纹

2.2 PROTO的类型安全验证

三、过程环境控制:USES与LOCAL的深层安全考量

3.1 寄存器保护机制(USES)

3.2 局部变量布局优化

四、地址操作符:ADDR与OFFSET的二进制差异

4.1 操作符语义解析


一、过程入口控制与栈帧管理:从ENTRY到LEAVE
1.1 栈帧构建的机器级实现
main proc
    enter 8, 0   ; 等价于:
                 ; push ebp       (55)
                 ; mov ebp, esp   (8B EC)
                 ; sub esp, 8     (83 EC 08)
    leave        ; mov esp, ebp   (8B E5)
                 ; pop ebp        (5D)
    ret

逆向工程特征识别

  • 黄金三指令序列:55 8B EC 83 EC XX(PUSH EBP/MOV EBP,ESP/SUB ESP,X)
  • 栈指纹分析:OllyDbg的栈窗口显示EBP链式结构
  • 异常处理关联_EXCEPTION_REGISTRATION_RECORD结构中的栈范围验证

二、高级过程调用机制:INVOKE与PROTO的逆向对抗
2.1 调用约定的二进制指纹
; stdcall调用示例
INVOKE MessageBoxA, 0, OFFSET Text, OFFSET Caption, MB_OK

机器码特征

6A 00               push 0            ; MB_OK
68 00 40 40 00      push offset Caption
68 00 40 40 00      push offset Text
6A 00               push 0
FF 15 00 40 40 00   call [MessageBoxA]

调用约定识别矩阵

特征stdcallcdeclfastcall
参数清理方被调用方调用方被调用方
寄存器参数ECX/EDX
典型返回指令RET NRETRET
2.2 PROTO的类型安全验证
Swap PROTO :DWORD, :DWORD  ; 参数类型声明

链接期验证机制

  1. 参数数量匹配检查(通过符号修饰差异实现)
  2. 参数大小验证(DWORD(4) vs WORD(2))
  3. 调用约定一致性(stdcall vs __cdecl修饰差异)


三、过程环境控制:USES与LOCAL的深层安全考量
3.1 寄存器保护机制(USES)
ArraySum PROC USES ESI ECX  ; 生成代码:
    push esi                ; 56
    push ecx                ; 51
    ...
    pop ecx                 ; 59
    pop esi                 ; 5E

安全开发实践

  • 易失性寄存器标记:明确区分调用者保存和被调用者保存寄存器
  • 中断上下文保护:在ISR中必须保存所有使用寄存器

逆向反制技术

  • 寄存器差异分析:对比函数入口/出口的寄存器值变化
3.2 局部变量布局优化
LOCAL var1:BYTE, arr[10]:DWORD  ; 栈布局:
                                ; EBP-1   : BYTE var1
                                ; EBP-4   : (3字节填充)
                                ; EBP-8   : DWORD arr[0]
                                ; EBP-48  : DWORD arr[9]

漏洞模式检测

  • 负偏移访问mov eax, [ebp-0x100](可能越界)
  • 数组越界arr[11]访问破坏返回地址
  • 初始化使用mov eax, [ebp-4]未赋初值

四、地址操作符:ADDR与OFFSET的二进制差异
4.1 操作符语义解析
操作符作用域生成指令适用场景
OFFSET全局变量MOV EAX, 00400000数据段静态地址
ADDR局部变量LEA EAX, [EBP-4]栈/堆动态地址
PTR类型转换WORD PTR [EAX]内存解释方式修改

相关文章:

  • 【前端css】position定位
  • 虚拟机IP的配置,让它上网
  • [BUUCTF]web--wp(持续更新中)
  • 嵌入式C语言学习记录之-14~17day
  • 2024第十六届蓝桥杯模拟赛(第二期)-Python
  • RT-DETR融合YOLOv12中的R-ELAN结构
  • NModbus 连接到Modbus服务器(Modbus TCP)
  • 详解DeepSeek模型底层原理及和ChatGPT区别点
  • 【通俗讲解电子电路】——从零开始理解生活中的电路(三)
  • 什么是 Prompt?——一篇详细的介绍
  • 一周学会Flask3 Python Web开发-Flask3之表单处理WTForms安装与定义WTForms表单类
  • 【向量数据库Weaviate】 和Elasticsearch的区别
  • 0012SSM+VUE学生考勤管理系统的设计与实现程序+文档
  • PGlite:浏览器中运行的PostgreSQL
  • ‌Vetur‌ 与 Vue-Official 的区别
  • Leetcode 316 去除重复字母
  • 第10篇:文件IO与数据持久化(下)(JSON、二进制文件)
  • 塔能物联运维:城市照明运维成本的破局之道
  • Python:全方位赋能,开启科技前沿无限可能
  • win32汇编环境,窗口程序中使控件子类化的示例一
  • 成都最好的网站建设公司/产品软文代写
  • 郑州网站建设国奥大厦/国内seo服务商
  • 橙光游戏制作器手机版/seo系统培训
  • 在深圳市住房和建设局网站/拉新工作室在哪里接项目
  • 中小企业建立网站最经济的方式/求职seo推荐
  • 贵溪网站建设/百度seo怎么查排名