Допустим, я получил это, например (из обфускации java) с сильно переполненным значением сдвига
x = buffer[count + -3] << 0x8f553768 & 0xff00
После попытки я понял это ..
8 = 0x ff 00
16 = 0x ff 00 00
24 = 0x ff 00 00 00
в значительной степени я deobfuscatating, чтобы выглядеть так.
x = ((buffer[coint - 3] << 8) & 0xff)
Iбольшинство из них работает, как переворачивание [+ -]
на [- +]
, все это легко исправить .. Но эти сдвиги действительно доставляют мне трудности.
Я нашел метод использования AND для значениякак 0x8f553768 & 31
, который дает правильный ответ 8
и т. д. Затем я бы преобразовал 0xff00
в эквивалент байта без знака .. который равен 0xff
Мой вопрос: как мне опуститьбитовые маски для правильных значений .. скажем, этот пример
i1 << 0xf7c13d2a & 0xfc00 //Aka 0xf7c13d2a & 31 == 10
, который я получил до ..
i1 << 10 & 0xfc00
как мне понизить 0xfc00
до его правильного значения?
Я взял guess
, должно выглядеть так
i1 << 10 & 0x3f
, но какая формула для понижения AND
значений?