具有 2 个未知数的反向函数

reverse function with 2 unknowns

在将数据存储到设备之前,我在逆向完成以下功能时遇到了一些困难。

ss = enum + 16
u32ts = number << 8
u32timestamp = ss+u32ts

enumnumber 是我试图找回的两个值,但当我从 u32timestamp 开始时,我不知道它们是什么。

我尝试做的是

uint temp = u32timestamp;
number  = 0;
if (u32timestamp > 100)
{
   number  = (u32timestamp >> 8 & 8 );
   temp = u32timestamp - number ;
}
enum = temp - 16;

但我总是得到不正确的值。请帮我解决这个问题。 enum 总是介于 16 和 21 之间,但 number 可以是任何正数。

// sample a and b
int a = 5, b = 7;

int ss = a + 16;
int u32ts = b << 8;
int u32timestamp = ss + u32ts;

// reversing...
int rev_b = u32timestamp >> 8;
int rev_ss = u32timestamp - (rev_b << 8);
int rev_a = rev_ss - 16;
public void Decode
{
   uint u32timestamp = 31778;
   var number = u32timestamp >> 8;
   var temp = u32timestamp - (number << 8);
   var en  = temp - 16;
}
var a = u32timestamp&0xFF;
var number= u32timestamp >>8;
var en = a-16;

编码位置 "number" 向左移动 8 位,因此右移 8 位将通过丢弃 LS 位来恢复它。然后我们屏蔽低位以恢复en.