You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.4 KiB
80 lines
3.4 KiB
package moe.tqlwsl.aicemu;
|
|
|
|
import android.util.Log;
|
|
|
|
import de.robv.android.xposed.IXposedHookLoadPackage;
|
|
import de.robv.android.xposed.XC_MethodHook;
|
|
import de.robv.android.xposed.XC_MethodReplacement;
|
|
import de.robv.android.xposed.XposedBridge;
|
|
import de.robv.android.xposed.XposedHelpers;
|
|
import de.robv.android.xposed.callbacks.XC_LoadPackage;
|
|
|
|
public class xp implements IXposedHookLoadPackage {
|
|
private final String TAG = "AICEmu";
|
|
|
|
// from https://github.com/OLIET2357/HCEFUnlocker
|
|
@Override
|
|
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
|
|
XposedBridge.log("In " + lpparam.packageName);
|
|
if (lpparam.packageName.equals("com.android.nfc")) {
|
|
|
|
XposedHelpers.findAndHookMethod("android.nfc.cardemulation.NfcFCardEmulation", lpparam.classLoader,
|
|
"isValidSystemCode", String.class, new XC_MethodReplacement() {
|
|
@Override
|
|
protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {
|
|
String systemCode = (String) param.args[0];
|
|
if (systemCode == null) {
|
|
return false;
|
|
}
|
|
|
|
if (systemCode.length() != 4) {
|
|
Log.e(TAG, "System Code " + systemCode + " is not a valid System Code.");
|
|
return false;
|
|
}
|
|
// check if the value is between "4000" and "4FFF" (excluding "4*FF")
|
|
if (!systemCode.startsWith("4") || systemCode.toUpperCase().endsWith("FF")) {
|
|
// Log.e(TAG, "System Code " + systemCode + " is not a valid System Code.");
|
|
// return false;
|
|
}
|
|
try {
|
|
Integer.parseInt(systemCode, 16);
|
|
} catch (NumberFormatException e) {
|
|
Log.e(TAG, "System Code " + systemCode + " is not a valid System Code.");
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
});
|
|
|
|
XposedHelpers.findAndHookMethod("android.nfc.cardemulation.NfcFCardEmulation", lpparam.classLoader,
|
|
"isValidNfcid2", String.class, new XC_MethodReplacement() {
|
|
@Override
|
|
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
|
String nfcid2 = (String) param.args[0];
|
|
if (nfcid2 == null) {
|
|
return false;
|
|
}
|
|
if (nfcid2.length() != 16) {
|
|
Log.e(TAG, "NFCID2 " + nfcid2 + " is not a valid NFCID2.");
|
|
return false;
|
|
}
|
|
// check if the the value starts with "02FE"
|
|
if (!nfcid2.toUpperCase().startsWith("02FE")) {
|
|
// Log.e(TAG, "NFCID2 " + nfcid2 + " is not a valid NFCID2.");
|
|
// return false;
|
|
}
|
|
try {
|
|
Long.parseLong(nfcid2, 16);
|
|
} catch (NumberFormatException e) {
|
|
Log.e(TAG, "NFCID2 " + nfcid2 + " is not a valid NFCID2.");
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
});
|
|
|
|
XposedBridge.log("Hook succeeded!!!");
|
|
}
|
|
}
|
|
}
|