Windows逆向工程入门之汇编位运算

目录

一、汇编位运算基础

二、逆向工程中的位运算应用

三、拓展知识点


一、汇编位运算基础

  1. AND(逻辑与)

    • 语法AND dest, src

    • 作用:按位与操作,常用于掩码清零或保留特定位。

    • 示例

      复制代码
      AND EAX, 0x0F  ; 保留EAX的低4位,其余位清零
  2. OR(逻辑或)

    • 语法OR dest, src

    • 作用:按位或操作,用于设置特定位为1。

    • 示例

      复制代码
      OR EBX, 0x80   ; 设置EBX的第7位为1
  3. XOR(逻辑异或)

    • 语法XOR dest, src

    • 作用:按位异或,常用于加密、清零寄存器或交换值。

    • 特性XOR EAX, EAX 可高效清零EAX。

    • 示例

      复制代码
      XOR ECX, 0x55AA  ; 对ECX进行异或加密
  4. NOT(逻辑非)

    • 语法NOT dest

    • 作用:按位取反,常用于生成补码或掩码反转。

    • 示例

      复制代码
      NOT EDX        ; EDX所有位取反
  5. 移位指令

    • SHL/SHR(逻辑左移/右移)

      复制代码
      SHL EAX, 3    ; 左移3位(相当于乘以8)
      SHR EBX, 2    ; 右移2位(相当于除以4)
    • SAL/SAR(算术左移/右移)

      • SAR保留符号位,适用于有符号数。
      复制代码
      SAR EAX, 4    ; 算术右移4位(保留符号位)
  6. 循环移位

    • ROL/ROR(循环左移/右移)

      复制代码
      ROL ECX, 1    ; 循环左移1位(最高位到最低位)
      ROR EDX, 8    ; 循环右移8位(常用于字节交换)

二、逆向工程中的位运算应用
  1. 加密与解密

    • XOR加密:常见于恶意软件或简单算法中。

      复制代码
      ; 解密循环示例
      mov esi, encrypted_data
      mov ecx, data_length
      decrypt_loop:
          xor byte ptr [esi], 0xAA
          inc esi
          loop decrypt_loop
  2. 标志位操作

    • 测试特定位 :通过TEST指令结合掩码检查标志位。

      复制代码
      TEST AL, 0x01   ; 检查AL的最低位是否为1(奇偶判断)
      JNZ is_odd
  3. 数据压缩与解压

    • 使用移位和掩码提取数据字段。

      复制代码
      ; 从AX中提取高4位
      MOVZX EBX, AX
      SHR EBX, 12     ; 右移12位获取高4位
  4. 反调试与混淆

    • 通过位运算隐藏关键代码逻辑。

      复制代码
      ; 混淆后的跳转计算
      MOV EAX, [target_address]
      XOR EAX, 0xDEADBEEF
      JMP EAX

三、拓展知识点
  1. 标志寄存器(EFLAGS)

    • CF(Carry Flag):无符号运算进位/借位时置1。

    • ZF(Zero Flag):结果为0时置1。

    • SF(Sign Flag):结果最高位为1时置1(负数)。

    • OF(Overflow Flag):有符号运算溢出时置1。

  2. 位域操作(Bit Fields)

    • 在结构体中定义位字段,常见于系统数据结构(如PE文件头)。

    • 示例:

      复制代码
      struct {
          unsigned int permission : 3;  // 3位权限标志
          unsigned int reserved   : 5;  // 5位保留位
      } flags;
  3. SIMD位运算(SSE/AVX)

    • 128位寄存器(XMM) :用于并行位操作(如PAND, POR)。

    • 应用场景:图像处理、加密算法加速。

  4. 调试技巧

    • 动态调试:使用x64dbg/OllyDbg观察位运算后的寄存器状态。

    • 静态分析 :IDA Pro反编译后识别位运算模式(如^0x55可能为XOR加密)。

  5. 高级语言中的位运算

    • C/C++代码

      复制代码
      uint32_t mask = 0xFF << 8;  // 生成掩码0x0000FF00
      uint32_t key = data ^ 0x1234; // XOR加密

相关推荐
挨踢攻城4 小时前
项目实战 | 新建校区网络安全项目:从搭建到交付
安全·web安全·公众号:厦门微思网络·华为网络安全项目·项目实战案例·网络安全项目·新建校区网络安全项目
ACP广源盛139246256735 小时前
(ACP广源盛)GSV2231---DisplayPort 1.4 MST 到 HDMI 2.0/DP/Type-C 转换器(带嵌入式 MCU)
c语言·开发语言·单片机·嵌入式硬件·音视频·mst
FreeBuf_5 小时前
研究人员披露 Windows SMB 服务器权限提升漏洞(CVE-2025-58726)
运维·服务器·windows
QT 小鲜肉5 小时前
【QT/C++】Qt网络编程进阶:UDP通信和HTTP请求的基本原理和实际应用(超详细)
c语言·网络·c++·笔记·qt·http·udp
Yurko135 小时前
【C语言】选择结构和循环结构的进阶
c语言·开发语言·学习
范纹杉想快点毕业6 小时前
12个月嵌入式进阶计划ZYNQ 系列芯片嵌入式与硬件系统知识学习全计划(基于国内视频资源)
c语言·arm开发·单片机·嵌入式硬件·学习·fpga开发·音视频
木木木丫7 小时前
嵌入式项目:韦东山驱动开发第六篇 项目总结——显示系统(framebuffer编程)
c语言·c++·驱动开发·dsp开发
柳鲲鹏7 小时前
RGB转换为NV12,查表式算法
linux·c语言·算法
我就是一粒沙7 小时前
网络安全培训
网络·安全·web安全
钛投标免费AI标书工具8 小时前
【官方认证】2025年AI标书工具:免费、零废标、安全
大数据·人工智能·安全