2016-10-05 40 views
0

我對ASM很陌生。Java ASM操作IntInsnNodes

我試圖禁止在反編譯器中的int搜索,所以我試圖多次否定數學運算。

例子:int i = 10; - >int i = 2 + 8;

我已經做了,但我想這樣做是這樣的:

int i = -(-(2+8)); 

如果你知道,我怎麼能做到這一點,請告訴我! 謝謝!

+0

你真的認爲,這會混淆任何反編譯器嗎?此外,如果您已經設法將常數重寫爲總和,那麼否定的問題是什麼? – Holger

+0

問題是,它只會否定第一個數字,而不是全部數字。 – ra1nb0wsparkl3zz

回答

1

您需要與

ICONST_2 // InsnNode 
BIPUSH 8 // IntInsnNode 
IADD  // InsnNode 
INEG  // InsnNode 
INEG  // InsnNode 

鏈,以取代單一BIPUSH 10IntInsnNode)指令如果你的目標是,在十六進制編輯器打開一個上課的時候BIPUSH 10不應該發現,這可能會做訣竅,但我幾乎不會稱之爲混淆。將這個字節碼鏈減少到原始值是很容易的。

最後,請注意,此替換會更改堆棧大小要求,因此您可能需要調整maxStack變量。