You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何暴力逆向有损AND例程?求标准方法与实现指引

逆向包含AND/SHL/XOR的位变换:方法与思路

首先,我们先把你给出的变换流程转化为数学表达式,这样更容易分析:

设原始输入为x(即例子中的0x5b3e0be0),最终输出为y(0xc63a5be0),变换过程可以写成:

y = ((x << 7) & 0x9d2c5680) ^ x

一、高效逆向方法:逐位推导(无需暴力破解)

因为移位、AND、XOR都是按位独立操作的,我们可以从高位到低位逐个计算x的每一位,这比暴力破解高效得多:

  1. 高位直接复制:对于32位寄存器来说,当i + 7 >= 32时(i是位索引,从0开始,最低位为0),x << 7的第i位是0(超出寄存器范围),因此((x <<7) & mask)的第i位也是0。此时y_i = 0 ^ x_i,即x_i = y_i。

    • 对应位范围:i = 25 ~ 31(因为25+7=32,刚好超出32位的0~31范围),所以x的这7位直接等于y的对应位。
  2. 低位逐位推导:对于i = 24 ~ 0,i +7 <32,此时(x <<7)的第i位等于x的第i+7位。结合变换公式可得:

    y_i = (x_{i+7} & mask_i) ^ x_i
    

    变形后可以解出x_i:

    x_i = y_i ^ (x_{i+7} & mask_i)
    

    因为x_{i+7}是更高位,我们已经通过第一步得到了这些值,所以可以从i=24开始往下逐个计算x的每一位。

用你的例子验证:已知y=0xc63a5be0,mask=0x9d2c5680,先取x的高位(25~31位)等于y的对应位,然后依次计算低位,最终就能得到原始的x=0x5b3e0be0。

二、暴力破解的思路(不推荐,但可理解)

如果一定要用暴力破解,核心思路是遍历所有可能的x值(32位的话是2^32个,约42亿次),对每个x执行原变换,看结果是否等于y。但这种方法效率极低,实际中几乎不会使用,除非是位数极少的情况。

你之前用PeachPy写的代码问题在于:它是在遍历变换的参数(AND的掩码esi和移位量cl),而不是遍历原始输入x。如果你的目标是逆向求x,这个方向就错了——你应该固定变换的参数(移位7位、掩码0x9d2c5680),然后遍历x验证结果。

三、推荐学习资料

  • 书籍:
    • Reverse Engineering for Beginners:这本书涵盖了汇编指令分析、位运算逆向的基础内容,案例丰富,非常适合入门逆向工程中的位变换问题。
    • Hacking: The Art of Exploitation:书中有大量关于位运算、汇编逆向的实用场景讲解,能帮助你理解这类变换的底层逻辑和逆向思路。
  • 文章:可以关注逆向工程领域中关于「可逆位变换分析」「逐位推导技术」的主题内容,这类文章会深入讲解如何拆解各种位运算组合的逆向方法。

内容的提问来源于stack exchange,提问作者Involar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:32:48