1/0 works once again, maybe.
This commit is contained in:
@@ -92,9 +92,9 @@ public class Deob
|
|||||||
{
|
{
|
||||||
new MultiplicationDeobfuscator().run(group);
|
new MultiplicationDeobfuscator().run(group);
|
||||||
|
|
||||||
//new MultiplyOneDeobfuscator().run(group);
|
new MultiplyOneDeobfuscator().run(group);
|
||||||
|
|
||||||
//new MultiplyZeroDeobfuscator().run(group);
|
new MultiplyZeroDeobfuscator().run(group);
|
||||||
|
|
||||||
if (last == cur)
|
if (last == cur)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package net.runelite.deob.deobfuscators.arithmetic;
|
package net.runelite.deob.deobfuscators.arithmetic;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import net.runelite.deob.ClassGroup;
|
import net.runelite.deob.ClassGroup;
|
||||||
import net.runelite.deob.Deobfuscator;
|
import net.runelite.deob.Deobfuscator;
|
||||||
import net.runelite.deob.attributes.code.Instruction;
|
import net.runelite.deob.attributes.code.Instruction;
|
||||||
@@ -35,6 +38,9 @@ public class MultiplyOneDeobfuscator implements Deobfuscator
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
Instructions ins = ictx.getInstruction().getInstructions();
|
Instructions ins = ictx.getInstruction().getInstructions();
|
||||||
|
if (ins == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
List<Instruction> ilist = ins.getInstructions();
|
List<Instruction> ilist = ins.getInstructions();
|
||||||
|
|
||||||
if (!ilist.contains(ictx.getInstruction()))
|
if (!ilist.contains(ictx.getInstruction()))
|
||||||
@@ -58,6 +64,9 @@ public class MultiplyOneDeobfuscator implements Deobfuscator
|
|||||||
if (removeIdx == -1)
|
if (removeIdx == -1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (!MultiplicationDeobfuscator.isOnlyPath(e, ictx))
|
||||||
|
continue;
|
||||||
|
|
||||||
ictx.removeStack(removeIdx);
|
ictx.removeStack(removeIdx);
|
||||||
ins.replace(ictx.getInstruction(), new NOP(ins));
|
ins.replace(ictx.getInstruction(), new NOP(ins));
|
||||||
//ins.remove(ictx.getInstruction());
|
//ins.remove(ictx.getInstruction());
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ public class MultiplyZeroDeobfuscator implements Deobfuscator
|
|||||||
{
|
{
|
||||||
Instruction instruction = ictx.getInstruction();
|
Instruction instruction = ictx.getInstruction();
|
||||||
Instructions ins = instruction.getInstructions();
|
Instructions ins = instruction.getInstructions();
|
||||||
|
if (ins == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!(instruction instanceof IMul))
|
if (!(instruction instanceof IMul))
|
||||||
continue;
|
continue;
|
||||||
@@ -69,6 +71,9 @@ public class MultiplyZeroDeobfuscator implements Deobfuscator
|
|||||||
if (!ilist.contains(instruction))
|
if (!ilist.contains(instruction))
|
||||||
continue; // already done
|
continue; // already done
|
||||||
|
|
||||||
|
if (!MultiplicationDeobfuscator.isOnlyPath(e, ictx))
|
||||||
|
continue;
|
||||||
|
|
||||||
// remove both, remove imul, push 0
|
// remove both, remove imul, push 0
|
||||||
|
|
||||||
ictx.removeStack(1);
|
ictx.removeStack(1);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import org.junit.Test;
|
|||||||
public class MultiplyOneDeobfuscatorTest
|
public class MultiplyOneDeobfuscatorTest
|
||||||
{
|
{
|
||||||
@Test
|
@Test
|
||||||
public void test()
|
public void testDir()
|
||||||
{
|
{
|
||||||
ClassGroup group = ClassGroupFactory.generateGroup();
|
ClassGroup group = ClassGroupFactory.generateGroup();
|
||||||
Code code = group.findClass("test").findMethod("func").getCode();
|
Code code = group.findClass("test").findMethod("func").getCode();
|
||||||
@@ -77,4 +77,58 @@ public class MultiplyOneDeobfuscatorTest
|
|||||||
|
|
||||||
Assert.assertTrue(one.getInstructions() != null);
|
Assert.assertTrue(one.getInstructions() != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test()
|
||||||
|
{
|
||||||
|
ClassGroup group = ClassGroupFactory.generateGroup();
|
||||||
|
Code code = group.findClass("test").findMethod("func").getCode();
|
||||||
|
Instructions ins = code.getInstructions();
|
||||||
|
|
||||||
|
code.setMaxStack(2);
|
||||||
|
|
||||||
|
// vars[0] = 3
|
||||||
|
Instruction[] prepareVariables = {
|
||||||
|
new IConst_3(ins),
|
||||||
|
new IStore_0(ins)
|
||||||
|
};
|
||||||
|
|
||||||
|
for (Instruction i : prepareVariables)
|
||||||
|
ins.addInstruction(i);
|
||||||
|
|
||||||
|
NOP label = new NOP(ins),
|
||||||
|
label2 = new NOP(ins);
|
||||||
|
|
||||||
|
IConst_1 one = new IConst_1(ins);
|
||||||
|
IMul mul = new IMul(ins);
|
||||||
|
|
||||||
|
Instruction body[] = {
|
||||||
|
new SiPush(ins, (short) 256),
|
||||||
|
|
||||||
|
new ILoad(ins, 0),
|
||||||
|
new If0(ins, label),
|
||||||
|
|
||||||
|
label,
|
||||||
|
one,
|
||||||
|
|
||||||
|
label2,
|
||||||
|
mul,
|
||||||
|
|
||||||
|
new VReturn(ins)
|
||||||
|
};
|
||||||
|
|
||||||
|
for (Instruction i : body)
|
||||||
|
ins.addInstruction(i);
|
||||||
|
|
||||||
|
// check execution runs ok
|
||||||
|
Execution e = new Execution(group);
|
||||||
|
e.populateInitialMethods();
|
||||||
|
e.run();
|
||||||
|
|
||||||
|
Deobfuscator d = new MultiplyOneDeobfuscator();
|
||||||
|
d.run(group);
|
||||||
|
|
||||||
|
Assert.assertTrue(one.getInstructions() == null);
|
||||||
|
Assert.assertTrue(mul.getInstructions() == null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user