1 package de.cweiske.ouya.plainpurchases;
3 import javax.crypto.Cipher;
5 import de.robv.android.xposed.IXposedHookLoadPackage;
6 import de.robv.android.xposed.XC_MethodHook;
7 import de.robv.android.xposed.XposedBridge;
8 import de.robv.android.xposed.XposedHelpers;
9 import de.robv.android.xposed.callbacks.XC_LoadPackage;
12 * Hook into Java's main encryption method and simply return the input.
13 * This disables encryption completely, and allows our OUYA store to retrieve
14 * plain text requests and send plain text responses that the OUYA understands
16 * @author Christian Weiske <cweiske+ouya@cweiske.de>
18 public class PlainPurchases implements IXposedHookLoadPackage
21 public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam)
23 //we cannot filter on lpparam.packagename because that breaks
24 // in-game receipt decryption
26 //XposedBridge.log("Loaded app: " + lpparam.packageName);
28 XposedHelpers.findAndHookMethod(Cipher.class, "doFinal", byte[].class, new XC_MethodHook() {
30 protected void beforeHookedMethod(MethodHookParam param) {
31 byte[] input = (byte[]) param.args[0];
33 //XposedBridge.log("input: " + new String(input));
34 //XposedBridge.log("returning unencrypted input");
35 //XposedBridge.log(new Exception("doFinal stack trace"));
36 param.setResult(input);