具有 2 个未知数的反向函数
reverse function with 2 unknowns
在将数据存储到设备之前,我在逆向完成以下功能时遇到了一些困难。
ss = enum + 16
u32ts = number << 8
u32timestamp = ss+u32ts
enum
和 number
是我试图找回的两个值,但当我从 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.
在将数据存储到设备之前,我在逆向完成以下功能时遇到了一些困难。
ss = enum + 16
u32ts = number << 8
u32timestamp = ss+u32ts
enum
和 number
是我试图找回的两个值,但当我从 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.