Initial version
[xposed-ouya-plain-purchases.git] / xposed-ouya-plain-purchases / src / main / java / de / cweiske / ouya / plainpurchases / PlainPurchases.java
1 package de.cweiske.ouya.plainpurchases;
2
3 import javax.crypto.Cipher;
4
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;
10
11 /**
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
15  *
16  * @author Christian Weiske <cweiske+ouya@cweiske.de>
17  */
18 public class PlainPurchases implements IXposedHookLoadPackage
19 {
20     @Override
21     public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam)
22     {
23         //we cannot filter on lpparam.packagename because that breaks
24         // in-game receipt decryption
25
26         //XposedBridge.log("Loaded app: " + lpparam.packageName);
27
28         XposedHelpers.findAndHookMethod(Cipher.class, "doFinal", byte[].class, new XC_MethodHook() {
29             @Override
30             protected void beforeHookedMethod(MethodHookParam param) {
31                 byte[] input = (byte[]) param.args[0];
32
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);
37             }
38         });
39     }
40 }