当前位置: 首页 > 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]内存解释方式修改
http://www.dtcms.com/a/49033.html

相关文章:

  • 【前端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汇编环境,窗口程序中使控件子类化的示例一
  • 使用Linux服务器搭建。
  • (十 九)趣学设计模式 之 中介者模式!
  • Linux IO编程核心要点解析:文件、流与缓冲区实战指南
  • 多空狙击线-新指标-图文教程,多空分界买点以及强弱操盘技术教程,通达信炒股软件指标
  • 从DNS到TCP:DNS解析流程和浏览器输入域名访问流程
  • QKV 注意力机制在Transformer架构中的作用,和卷积在卷积神经网络中的地位,有哪些相似之处?
  • 使用vue3+element plus 的table自制的穿梭框(支持多列数据)
  • 【大厂AI实践】清华:清华古典诗歌自动生成系统“九歌”的算法
  • Linux下安装VS Code
  • HOW - 在Windows浏览器中模拟MacOS的滚动条