如何求解使compare函数返回0xb88202的输入变量num?
求解输入变量num的步骤
已知compare函数的逻辑为:
uint compare(uint num) { return (num ^ 0x735) >> 4 ^ 0x6f0; }
要求调用compare(num)返回0xb88202,可通过逆向运算推导num:
逆向最后一步异或
设A = (num ^ 0x735) >> 4,根据函数逻辑有:A ^ 0x6f0 = 0xb88202
异或的逆操作是自身,两边同时异或0x6f0得到:A = 0xb88202 ^ 0x6f0 = 0xb884f2逆向右移4位操作
A是(num ^ 0x735)右移4位的结果,逻辑右移4位会丢弃原数的低4位,因此逆运算时(num ^ 0x735)可表示为:(num ^ 0x735) = (A << 4) | k
其中k是0~0xf之间的任意整数(对应被丢弃的低4位)。
计算A << 4:0xb884f2 << 4 = 0xb884f20
- 逆向第一步异或
对等式两边同时异或0x735得到num:num = ((A << 4) | k) ^ 0x735
代入数值计算基础解(取k=0时):num = 0xb884f20 ^ 0x735 = 0xb884815
所有可能的解
由于k可取0~0xf,num的低4位会对应变化,所有可能值为:
- 0xb884810、0xb884811、0xb884812、0xb884813
- 0xb884814、0xb884815、0xb884816、0xb884817
- 0xb884818、0xb884819、0xb88481a、0xb88481b
- 0xb88481c、0xb88481d、0xb88481e、0xb88481f
任意选择其中一个值作为输入,都能让compare函数返回0xb88202。
内容的提问来源于stack exchange,提问作者user1803637
相关产品推荐
相关产品推荐

