package mobi.acpm.inspeckage.hooks;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import mobi.acpm.inspeckage.util.Util;
import static de.robv.android.xposed.XposedHelpers.findAndHookConstructor;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
/**
* Created by acpm on 17/01/16.
*/
public class SerializationHook extends XC_MethodHook {
public static final String TAG = "Inspeckage_Serialization:";
static String f = "";
public static void initAllHooks(final XC_LoadPackage.LoadPackageParam loadPackageParam) {
findAndHookConstructor(FileInputStream.class, File.class, new XC_MethodHook() {
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
File file = (File) param.args[0];
if (file != null) {
///
if (!file.getPath().contains("inspeckage") && (file.getPath().contains("data/data/")
|| file.getPath().contains("storage/emulated/") || file.getPath().contains("data/media/"))) {
f = file.getPath();
}
}
}
});
findAndHookMethod(ObjectInputStream.class, "readObject", new XC_MethodHook() {
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Object paramObject = param.getResult();
StringBuilder sb = new StringBuilder();
if (paramObject != null) {
String name = paramObject.getClass().getCanonicalName();
if(name != null) {
if (name.length() > 5 && name.substring(0, 5).contains("java.") || name.substring(0, 5).contains("byte")) {
//do nothing
} else {
sb.append("Read Object[" + name + "] HEX = ");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(paramObject);
byte[] yourBytes = bos.toByteArray();
String hex = Util.toHexString(yourBytes);
sb.append(hex);
XposedBridge.log(TAG + "Possible Path [" + f + "] " + sb.toString());
} catch (NullPointerException e) {
//
} catch (IOException i) {
i.printStackTrace();
}
}
}
}
}
});
}
}