Simplify nonif expressions while deobfuscation too

Regexp deobfuscation.
Implicit coercion handling.
#1145 double not (!!) fix
This commit is contained in:
Jindra Petřík
2016-02-07 17:13:59 +01:00
parent f9bdb8a35a
commit ef739fbfd9
110 changed files with 1261 additions and 133 deletions
@@ -63,7 +63,7 @@ public class CallFunctionActionItem extends ActionItem {
if (functionName instanceof DirectValueActionItem) {
writer.append(IdentifiersDeobfuscation.printIdentifier(false, (functionName).toStringNoQuotes(localData)));
} else {
functionName.appendTo(writer, localData);
functionName.appendTry(writer, localData);
}
writer.spaceBeforeCallParenthesies(arguments.size());
writer.append("(");
@@ -86,7 +86,7 @@ public class CallMethodActionItem extends ActionItem {
}
} else {
writer.append("this[");
methodName.appendTo(writer, localData);
methodName.appendTry(writer, localData);
writer.append("].call");
}
@@ -47,7 +47,7 @@ public class FSCommandActionItem extends ActionItem {
writer.append("fscommand");
writer.spaceBeforeCallParenthesies(1);
writer.append("(");
command.appendTo(writer, localData);
command.appendTry(writer, localData);
return writer.append(")");
}
@@ -76,7 +76,7 @@ public class GetVariableActionItem extends ActionItem {
return IdentifiersDeobfuscation.appendObfuscatedIdentifier(((DirectValueActionItem) name).toStringNoQuotes(localData), writer);
} else if ((!(name instanceof DirectValueActionItem)) || (!((DirectValueActionItem) name).isString())) {
writer.append("eval(");
name.appendTo(writer, localData);
name.appendTry(writer, localData);
return writer.append(")");
}
HighlightData srcData = getSrcData();
@@ -40,7 +40,7 @@ public class AddActionItem extends BinaryOpItem {
boolean version2;
public AddActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide, boolean version2) {
super(instruction, lineStartIns, PRECEDENCE_ADDITIVE, leftSide, rightSide, "+");
super(instruction, lineStartIns, PRECEDENCE_ADDITIVE, leftSide, rightSide, "+", "", "");
this.version2 = version2;
}
@@ -34,7 +34,7 @@ import java.util.List;
public class AndActionItem extends BinaryOpItem {
public AndActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_LOGICALAND, leftSide, rightSide, "and");
super(instruction, lineStartIns, PRECEDENCE_LOGICALAND, leftSide, rightSide, "and", "Boolean", "Boolean");
}
@Override
@@ -34,7 +34,7 @@ import java.util.List;
public class BitAndActionItem extends BinaryOpItem {
public BitAndActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_BITWISEAND, leftSide, rightSide, "&");
super(instruction, lineStartIns, PRECEDENCE_BITWISEAND, leftSide, rightSide, "&", "int", "int");
}
@Override
@@ -34,7 +34,7 @@ import java.util.List;
public class BitOrActionItem extends BinaryOpItem {
public BitOrActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_BITWISEOR, leftSide, rightSide, "|");
super(instruction, lineStartIns, PRECEDENCE_BITWISEOR, leftSide, rightSide, "|", "int", "int");
}
@Override
@@ -37,7 +37,7 @@ import java.util.List;
public class BitXorActionItem extends BinaryOpItem {
public BitXorActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_BITWISEXOR, leftSide, rightSide, "^");
super(instruction, lineStartIns, PRECEDENCE_BITWISEXOR, leftSide, rightSide, "^", "int", "int");
}
@Override
@@ -56,7 +56,7 @@ public class BitXorActionItem extends BinaryOpItem {
if (leftSide.getPrecedence() > PRECEDENCE_UNARY) {
writer.append("(");
}
leftSide.appendTo(writer, localData);
leftSide.appendTry(writer, localData);
if (leftSide.getPrecedence() > PRECEDENCE_UNARY) {
writer.append(")");
}
@@ -33,7 +33,7 @@ import java.util.List;
public class DivideActionItem extends BinaryOpItem {
public DivideActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_MULTIPLICATIVE, leftSide, rightSide, "/");
super(instruction, lineStartIns, PRECEDENCE_MULTIPLICATIVE, leftSide, rightSide, "/", "Number", "Number");
}
@Override
@@ -39,7 +39,7 @@ public class EqActionItem extends BinaryOpItem implements LogicalOpItem, EqualsT
boolean version2;
public EqActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide, boolean version2) {
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "==");
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "==", "", "");
this.version2 = version2;
}
@@ -42,7 +42,7 @@ public class GeActionItem extends BinaryOpItem implements LogicalOpItem, Inverte
boolean version2;
public GeActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide, boolean version2) {
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, ">=");
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, ">=", "", "");
this.version2 = version2;
}
@@ -39,7 +39,7 @@ import java.util.List;
public class GtActionItem extends BinaryOpItem implements LogicalOpItem {
public GtActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, ">");
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, ">", "", "");
}
@Override
@@ -30,7 +30,7 @@ import java.util.Set;
public class InActionItem extends BinaryOpItem {
public InActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, ActionItem name, ActionItem object) {
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, name, object, "in");
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, name, object, "in", "", "");
}
@Override
@@ -34,7 +34,7 @@ import java.util.Set;
public class InstanceOfActionItem extends BinaryOpItem {
public InstanceOfActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem value, GraphTargetItem type) {
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, value, type, "instanceof");
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, value, type, "instanceof", "", "");
}
@Override
@@ -34,7 +34,7 @@ import java.util.List;
public class LShiftActionItem extends BinaryOpItem {
public LShiftActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_BITWISESHIFT, leftSide, rightSide, "<<");
super(instruction, lineStartIns, PRECEDENCE_BITWISESHIFT, leftSide, rightSide, "<<", "int", "int");
}
@Override
@@ -40,7 +40,7 @@ import java.util.List;
public class LeActionItem extends BinaryOpItem implements LogicalOpItem, Inverted {
public LeActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "<=");
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "<=", "", "");
}
@Override
@@ -41,7 +41,7 @@ public class LtActionItem extends BinaryOpItem implements LogicalOpItem {
boolean version2;
public LtActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide, boolean version2) {
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "<");
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "<", "", "");
this.version2 = version2;
}
@@ -33,7 +33,7 @@ import java.util.List;
public class ModuloActionItem extends BinaryOpItem {
public ModuloActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_MULTIPLICATIVE, leftSide, rightSide, "%");
super(instruction, lineStartIns, PRECEDENCE_MULTIPLICATIVE, leftSide, rightSide, "%", "Number", "Number");
}
@Override
@@ -33,7 +33,7 @@ import java.util.List;
public class MultiplyActionItem extends BinaryOpItem {
public MultiplyActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_MULTIPLICATIVE, leftSide, rightSide, "*");
super(instruction, lineStartIns, PRECEDENCE_MULTIPLICATIVE, leftSide, rightSide, "*", "Number", "Number");
}
@Override
@@ -39,7 +39,7 @@ public class NeqActionItem extends BinaryOpItem implements LogicalOpItem, Invert
boolean version2;
public NeqActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide, boolean version2) {
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "!=");
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "!=", "", "");
this.version2 = version2;
}
@@ -34,7 +34,7 @@ import java.util.List;
public class OrActionItem extends BinaryOpItem {
public OrActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_LOGICALOR, leftSide, rightSide, "or");
super(instruction, lineStartIns, PRECEDENCE_LOGICALOR, leftSide, rightSide, "or", "Boolean", "Boolean");
}
@Override
@@ -45,7 +45,7 @@ import java.util.List;
public class PreDecrementActionItem extends UnaryOpItem {
public PreDecrementActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object) {
super(instruction, lineStartIns, PRECEDENCE_UNARY, object, "--");
super(instruction, lineStartIns, PRECEDENCE_UNARY, object, "--", "Number");
}
@Override
@@ -45,7 +45,7 @@ import java.util.List;
public class PreIncrementActionItem extends UnaryOpItem {
public PreIncrementActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object) {
super(instruction, lineStartIns, PRECEDENCE_UNARY, object, "++");
super(instruction, lineStartIns, PRECEDENCE_UNARY, object, "++", "Number");
}
@Override
@@ -34,7 +34,7 @@ import java.util.List;
public class RShiftActionItem extends BinaryOpItem {
public RShiftActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_BITWISESHIFT, leftSide, rightSide, ">>");
super(instruction, lineStartIns, PRECEDENCE_BITWISESHIFT, leftSide, rightSide, ">>", "int", "int");
}
@Override
@@ -36,7 +36,7 @@ import java.util.List;
public class StrictEqActionItem extends BinaryOpItem implements LogicalOpItem, Inverted, EqualsTypeItem {
public StrictEqActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "===");
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "===", "", "");
}
@Override
@@ -36,7 +36,7 @@ import java.util.List;
public class StrictNeqActionItem extends BinaryOpItem implements LogicalOpItem, Inverted {
public StrictNeqActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "!==");
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "!==", "", "");
}
@Override
@@ -35,7 +35,7 @@ import java.util.Set;
public class StringAddActionItem extends BinaryOpItem {
public StringAddActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_ADDITIVE, leftSide, rightSide, "add");
super(instruction, lineStartIns, PRECEDENCE_ADDITIVE, leftSide, rightSide, "add", "String", "String");
}
@Override
@@ -35,7 +35,7 @@ import java.util.Set;
public class StringEqActionItem extends BinaryOpItem implements Inverted {
public StringEqActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "eq");
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "eq", "String", "String");
}
@Override
@@ -36,7 +36,7 @@ import java.util.Set;
public class StringGeActionItem extends BinaryOpItem implements Inverted {
public StringGeActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "ge");
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "ge", "String", "String");
}
@Override
@@ -37,7 +37,7 @@ import java.util.Set;
public class StringGtActionItem extends BinaryOpItem implements Inverted {
public StringGtActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "gt");
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "gt", "String", "String");
}
@Override
@@ -38,7 +38,7 @@ import java.util.Set;
public class StringLeActionItem extends BinaryOpItem implements Inverted {
public StringLeActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "le");
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "le", "String", "String");
}
@Override
@@ -35,7 +35,7 @@ import java.util.Set;
public class StringLtActionItem extends BinaryOpItem implements Inverted {
public StringLtActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "lt");
super(instruction, lineStartIns, PRECEDENCE_RELATIONAL, leftSide, rightSide, "lt", "String", "String");
}
@Override
@@ -35,7 +35,7 @@ import java.util.Set;
public class StringNeActionItem extends BinaryOpItem implements Inverted {
public StringNeActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "ne");
super(instruction, lineStartIns, PRECEDENCE_EQUALITY, leftSide, rightSide, "ne", "String", "String");
}
@Override
@@ -36,7 +36,7 @@ import java.util.List;
public class SubtractActionItem extends BinaryOpItem {
public SubtractActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_ADDITIVE, leftSide, rightSide, "-");
super(instruction, lineStartIns, PRECEDENCE_ADDITIVE, leftSide, rightSide, "-", "Number", "Number");
}
@Override
@@ -56,28 +56,26 @@ public class SubtractActionItem extends BinaryOpItem {
|| ((((DirectValueActionItem) leftSide).value instanceof Long) && (((Long) ((DirectValueActionItem) leftSide).value) == 0L)))) {
writer.append(operator);
writer.append(" ");
rightSide.appendTo(writer, localData);
rightSide.appendTry(writer, localData);
return writer;
} else {
if (rightSide.getPrecedence() >= precedence) { // >= add or subtract too
if (leftSide.getPrecedence() > precedence) {
writer.append("(");
leftSide.toString(writer, localData);
writer.append(")");
} else {
leftSide.toString(writer, localData);
}
writer.append(" ");
writer.append(operator);
writer.append(" ");
} else if (rightSide.getPrecedence() >= precedence) { // >= add or subtract too
if (leftSide.getPrecedence() > precedence) {
writer.append("(");
rightSide.toString(writer, localData);
return writer.append(")");
leftSide.toString(writer, localData);
writer.append(")");
} else {
return super.appendTo(writer, localData);
leftSide.toString(writer, localData);
}
writer.append(" ");
writer.append(operator);
writer.append(" ");
writer.append("(");
rightSide.toString(writer, localData);
return writer.append(")");
} else {
return super.appendTo(writer, localData);
}
}
@@ -33,7 +33,7 @@ import java.util.List;
public class URShiftActionItem extends BinaryOpItem {
public URShiftActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem leftSide, GraphTargetItem rightSide) {
super(instruction, lineStartIns, PRECEDENCE_BITWISESHIFT, leftSide, rightSide, ">>>");
super(instruction, lineStartIns, PRECEDENCE_BITWISESHIFT, leftSide, rightSide, ">>>", "Number", "Number");
}
@Override
@@ -83,7 +83,7 @@ public class VariableActionItem extends ActionItem {
if (it == null) {
return writer;
}
return it.appendTo(writer, localData);
return it.appendTry(writer, localData);
}
@Override