Java, как вы deobfuscatate сдвига и & значения? - PullRequest
1 голос
/ 24 июля 2011

Допустим, я получил это, например (из обфускации 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 значений?

1 Ответ

1 голос
/ 24 июля 2011

Ха-ха решил, что мой мозг сделал расчет в своей голове ..

блин, почему мне так трудно ответить ..

i1 << 10 & 0xfc00

тогда вы делаете

0xfc00 >> 10, что дает вам 0x3f

...