More guessing stuff. Need an isobfuscated() func.
This commit is contained in:
@@ -224,60 +224,75 @@ public class ModArith implements Deobfuscator
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
// private Pair guess(Field field, Collection<Integer> values, boolean getter)
|
private Pair guess(Field field, Collection<Integer> values, boolean getter)
|
||||||
// {
|
{
|
||||||
// Map<Integer, Integer> map = CollectionUtils.getCardinalityMap(values); // value -> how many times it occurs
|
Map<Integer, Integer> map = CollectionUtils.getCardinalityMap(values); // value -> how many times it occurs
|
||||||
// int max = Collections.max(map.values()); // largest occurance #
|
int max = Collections.max(map.values()); // largest occurance #
|
||||||
// int size = values.size();
|
int size = values.size();
|
||||||
//
|
|
||||||
//// if (max == size)
|
try
|
||||||
//// {
|
{
|
||||||
//// // all getters are the same value
|
if (max == size)
|
||||||
//// int constant = getters.iterator().next();
|
{
|
||||||
//// Pair pair = new Pair();
|
// all getters are the same value
|
||||||
//// pair.getter = constant;
|
int constant = values.iterator().next();
|
||||||
//// System.out.println("Guessing " + field.getName() + " getter " + constant + " setter ");
|
if (DMath.isBig(constant))
|
||||||
//// pair.setter = DMath.modInverse(constant);
|
{
|
||||||
//// return pair;
|
Pair pair = new Pair();
|
||||||
//// }
|
if (getter)
|
||||||
////
|
{
|
||||||
//// if (size < 50)
|
pair.getter = constant;
|
||||||
//// return null;
|
//System.out.println("Guessing " + field.getName() + " getter " + constant + " setter ");
|
||||||
//
|
pair.setter = DMath.modInverse(constant);
|
||||||
//// if (((float) max / (float) size) < 0.9)
|
}
|
||||||
//// return null;
|
else
|
||||||
//
|
{
|
||||||
// for (final Map.Entry<Integer, Integer> entry : map.entrySet()) {
|
pair.setter = constant;
|
||||||
// if (max == entry.getValue()) {
|
pair.getter = DMath.modInverse(constant);
|
||||||
// int constant = entry.getKey();
|
}
|
||||||
// int inverse;
|
return pair;
|
||||||
// try
|
}
|
||||||
// {
|
}
|
||||||
// inverse = DMath.modInverse(constant);
|
}
|
||||||
// }
|
catch (ArithmeticException ex) { }
|
||||||
// catch (ArithmeticException ex)
|
|
||||||
// {
|
// if (size < 50)
|
||||||
// break;
|
// return null;
|
||||||
// }
|
|
||||||
//
|
if (((float) max / (float) size) < 0.9)
|
||||||
// Pair pair = new Pair();
|
return null;
|
||||||
// if (getter)
|
|
||||||
// {
|
for (final Map.Entry<Integer, Integer> entry : map.entrySet()) {
|
||||||
// pair.getter = constant;
|
if (max == entry.getValue()) {
|
||||||
// pair.setter = inverse;
|
int constant = entry.getKey();
|
||||||
// }
|
int inverse;
|
||||||
// else
|
try
|
||||||
// {
|
{
|
||||||
// pair.getter = inverse;
|
inverse = DMath.modInverse(constant);
|
||||||
// pair.setter = constant;
|
}
|
||||||
// }
|
catch (ArithmeticException ex)
|
||||||
//
|
{
|
||||||
// return pair;
|
break;
|
||||||
// }
|
}
|
||||||
// }
|
|
||||||
//
|
Pair pair = new Pair();
|
||||||
// return null;
|
if (getter)
|
||||||
// }
|
{
|
||||||
|
pair.getter = constant;
|
||||||
|
pair.setter = inverse;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pair.getter = inverse;
|
||||||
|
pair.setter = constant;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pair;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private void reduce()
|
private void reduce()
|
||||||
{
|
{
|
||||||
@@ -287,16 +302,22 @@ public class ModArith implements Deobfuscator
|
|||||||
Collection<Integer> getters = constantGetters.getCollection(f),
|
Collection<Integer> getters = constantGetters.getCollection(f),
|
||||||
setters = constantSetters.getCollection(f);
|
setters = constantSetters.getCollection(f);
|
||||||
|
|
||||||
if (getters == null || setters == null)
|
if (f.getName().equals("field551"))
|
||||||
continue;
|
{
|
||||||
|
int k=5;
|
||||||
|
}
|
||||||
|
|
||||||
Pair answer = reduce(getters, setters);
|
|
||||||
|
Pair answer = null;
|
||||||
|
|
||||||
// if (answer == null)
|
if (getters != null && setters != null)
|
||||||
// answer = guess(f, getters, true);
|
answer = reduce(getters, setters);
|
||||||
//
|
|
||||||
// if (answer == null)
|
if (answer == null && getters != null)
|
||||||
// answer = guess(f, setters, false);
|
answer = guess(f, getters, true);
|
||||||
|
|
||||||
|
if (answer == null && setters != null)
|
||||||
|
answer = guess(f, setters, false);
|
||||||
|
|
||||||
if (answer == null)
|
if (answer == null)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Reference in New Issue
Block a user