C语言 求解变量

i86rm4rw  于 2023-02-03  发布在  其他
关注(0)|答案(2)|浏览(112)

在比较函数中,我将如何求解变量num,它将是我自己对程序的输入?
主要功能(部分)

int input;
answer = compare(input);

if(answer !=0xb88202) {
   printf("Keep trying!");
   exit(0);
}

puts("You got it");

比较函数

uint compare(uint num) {
     return (num ^ 0x735) >> 4 ^ 0x6f0;
}

老实说,我不知道该怎么做。我想用另一个异或来反转异或会有帮助。我也试着用4 ^ 0x6f0左移0xb88202,但我就是想不通。

hgncfbus

hgncfbus1#

只需在比较函数中反向操作即可。

input = (0xb88202 ^ 0x6f0) << 4 ^ 0x735
bvn4nwqk

bvn4nwqk2#

把它当作一个方程求解。你有

answer == ((num ^ 0x735) >> 4) ^ 0x6f0

异或是它自己的逆运算,所以你得到

answer ^ 0x6f0 == (num ^ 0x735) >> 4

(answer ^ 0x6f0) << 4 == (num ^ 0x735)

((answer ^ 0x6f0) << 4) ^ 0x735 == num

对于移位来说,这并不完全正确,因为右移位丢失了左移位无法恢复的位(从底部移出),但这只是意味着num有多个值,这些值将给予answer,这将找到其中的一个。

相关问题