Created
October 22, 2015 09:05
-
-
Save tewilove/a5a66c7a3ef3216013c4 to your computer and use it in GitHub Desktop.
306SH HOOK, partial works on CHINA MOBILE/TDD BAND 41
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<resources> | |
<string-array name="preferred_network_mode_choices"> | |
<item>LTE/CDMA</item> | |
<item>CDMA</item> | |
<item>LTE/WCDMA/GSM</item> | |
<!--<item>GSM only</item>--> | |
</string-array> | |
<string-array name="preferred_network_mode_values"> | |
<item>8</item> | |
<item>4</item> | |
<item>9</item> | |
<!--<item>1</item>--> | |
</string-array> | |
</resources> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package tewilove.unlock.pb25; | |
import java.util.HashMap; | |
import java.util.Map; | |
import de.robv.android.xposed.IXposedHookLoadPackage; | |
import de.robv.android.xposed.XC_MethodHook; | |
import de.robv.android.xposed.XposedBridge; | |
import de.robv.android.xposed.XposedHelpers; | |
import de.robv.android.xposed.callbacks.XC_LoadPackage; | |
/** | |
* Created by ming on 15-10-22. | |
*/ | |
public class XHook_SystemProperties implements IXposedHookLoadPackage { | |
private static Map<String,String> sStringProperties = new HashMap<String,String>(); | |
private static Map<String,Integer> sIntegerProperties = new HashMap<String,Integer>(); | |
private static XC_MethodHook sHook_android_os_SystemProperties_get = new XC_MethodHook() { | |
@Override | |
protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { | |
if (param.args == null) | |
return; | |
if (param.args.length < 1) | |
return; | |
if (!(param.args[0] instanceof String)) | |
return; | |
String key = (String) param.args[0]; | |
if (sStringProperties.containsKey(key)) | |
param.setResult(sStringProperties.get(key)); | |
param.hasThrowable(); | |
} | |
}; | |
private static XC_MethodHook sHook_android_os_SystemProperties_getInt = new XC_MethodHook() { | |
@Override | |
protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { | |
if (param.args == null) | |
return; | |
if (param.args.length < 1) | |
return; | |
if (!(param.args[0] instanceof String)) | |
return; | |
String key = (String) param.args[0]; | |
if (sIntegerProperties.containsKey(key)) | |
param.setResult(sIntegerProperties.get(key)); | |
} | |
}; | |
static { | |
sStringProperties.put("ro.debuggable", "1"); | |
sStringProperties.put("telephony.lteOnCdmaDevice", "0"); | |
sStringProperties.put("ro.telephony.default_network", "9"); | |
sIntegerProperties.put("ro.debuggable", Integer.valueOf(1)); | |
sIntegerProperties.put("telephony.lteOnCdmaDevice", Integer.valueOf(0)); | |
sIntegerProperties.put("ro.telephony.default_network", Integer.valueOf(9)); | |
} | |
@Override | |
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { | |
// Those are properties applies to ALL | |
XposedHelpers.findAndHookMethod("android.os.SystemProperties", lpparam.classLoader, | |
"get", String.class, | |
sHook_android_os_SystemProperties_get); | |
XposedHelpers.findAndHookMethod("android.os.SystemProperties", lpparam.classLoader, | |
"get", String.class, String.class, | |
sHook_android_os_SystemProperties_get); | |
XposedHelpers.findAndHookMethod("android.os.SystemProperties", lpparam.classLoader, | |
"getInt", | |
String.class, int.class, | |
sHook_android_os_SystemProperties_getInt); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package tewilove.unlock.pb25; | |
import java.lang.reflect.Constructor; | |
import java.lang.reflect.Field; | |
import java.util.ArrayList; | |
import java.util.Objects; | |
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; | |
/** | |
* Created by ming on 15-10-22. | |
*/ | |
public class XHook_TelephonyCommon implements IXposedHookLoadPackage { | |
@Override | |
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { | |
if (!lpParam.packageName.equals("com.android.phone")) | |
return; | |
XposedHelpers.findAndHookMethod("com.android.internal.telephony.gsm.GSMPhone", lpParam.classLoader, | |
"setProperties", new XC_MethodHook() { | |
@Override | |
protected void beforeHookedMethod(MethodHookParam param) throws Throwable { | |
XposedBridge.log("create missing ApnListTracker bgn"); | |
try { | |
Class<?> clz = Class.forName("jp.co.sharp.android.internal.telephony.dataconnection.ApnListTracker"); | |
Constructor<?> ctor = clz.getConstructor(Class.forName("com.android.internal.telephony.PhoneBase")); | |
ctor.newInstance(param.thisObject); | |
} catch (Throwable t) { | |
XposedBridge.log(t); | |
} | |
XposedBridge.log("create missing ApnListTracker end"); | |
} | |
}); | |
XposedHelpers.findAndHookMethod("jp.co.sharp.android.internal.telephony.dataconnection.ApnListTracker", lpParam.classLoader, | |
"createAllApnList", new XC_MethodHook() { | |
protected void afterHookedMethod(MethodHookParam param) throws Throwable { | |
XposedBridge.log("fix mAllApns bgn"); | |
try { | |
Object thz = param.thisObject; | |
Class<?> clz = thz.getClass(); | |
Field fid = clz.getDeclaredField("mAllApns"); | |
fid.setAccessible(true); | |
Object obj = fid.get(thz); | |
ArrayList<Object> mAllApns = (ArrayList<Object>) obj; | |
for (Object apn : mAllApns) { | |
Class<?> clzApn = apn.getClass(); | |
Field fidApn = clzApn.getDeclaredField("apnClass"); | |
fidApn.setAccessible(true); | |
// internet 1 | |
// ota 2 | |
// pam 3 | |
fidApn.setInt(apn, 1); | |
} | |
} catch (Throwable t) { | |
XposedBridge.log(t); | |
} | |
XposedBridge.log("fix mAllApns end"); | |
} | |
}); | |
XposedHelpers.findAndHookMethod("jp.co.sharp.android.internal.telephony.dataconnection.ApnSyncedToBP", lpParam.classLoader, | |
"log", String.class, new XC_MethodReplacement() { | |
@Override | |
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { | |
if (param.args != null && param.args[0] instanceof String) { | |
String str = (String) param.args[0]; | |
XposedBridge.log("[ApnSyncedToBP] " + str); | |
} | |
return null; | |
} | |
}); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package tewilove.unlock.pb25; | |
/** | |
* Created by tewilove on 15/10/18. | |
*/ | |
import android.content.res.XModuleResources; | |
import java.lang.Override; | |
import java.lang.reflect.Field; | |
import de.robv.android.xposed.IXposedHookLoadPackage; | |
import de.robv.android.xposed.XC_MethodHook; | |
import de.robv.android.xposed.XposedHelpers; | |
import de.robv.android.xposed.IXposedHookInitPackageResources; | |
import de.robv.android.xposed.IXposedHookZygoteInit; | |
import de.robv.android.xposed.XposedBridge; | |
import de.robv.android.xposed.callbacks.XC_InitPackageResources; | |
import de.robv.android.xposed.callbacks.XC_LoadPackage; | |
public class XHook_TeleService implements IXposedHookZygoteInit, IXposedHookInitPackageResources, | |
IXposedHookLoadPackage { | |
private static String MODULE_PATH = null; | |
@Override | |
public void initZygote(StartupParam startupParam) throws Throwable { | |
MODULE_PATH = startupParam.modulePath; | |
} | |
@Override | |
public void handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam resparam) throws Throwable { | |
if (!resparam.packageName.equals("com.android.phone")) | |
return; | |
try { | |
XposedBridge.log("hook bgn"); | |
// resparam.res.setReplacement("com.android.phone", "bool", "world_phone", false); | |
// resparam.res.setReplacement("com.android.phone", "bool", "config_enabled_lte", true); | |
XModuleResources modRes = XModuleResources.createInstance(MODULE_PATH, resparam.res); | |
resparam.res.setReplacement("com.android.phone", "array", "preferred_network_mode_choices", | |
modRes.fwd(R.array.preferred_network_mode_choices)); | |
resparam.res.setReplacement("com.android.phone", "array", "preferred_network_mode_values", | |
modRes.fwd(R.array.preferred_network_mode_values)); | |
XposedBridge.log("hook end"); | |
} catch (Throwable t) { | |
XposedBridge.log(t); | |
} | |
} | |
@Override | |
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { | |
if (!lpParam.packageName.equals("com.android.phone")) | |
return; | |
try { | |
XposedHelpers.findAndHookMethod("com.android.internal.telephony.CallManager", lpParam.classLoader, | |
"unregisterPhone", | |
Class.forName("com.android.internal.telephony.Phone"), | |
new XC_MethodHook() { | |
@Override | |
protected void beforeHookedMethod(MethodHookParam param) throws Throwable { | |
XposedBridge.log("prevent com.android.phone from force closing"); | |
try { | |
Object thz = param.thisObject; | |
Class<?> clz = thz.getClass(); | |
Field fid = clz.getDeclaredField("mWFCStateRegistered"); | |
fid.setAccessible(true); | |
fid.setBoolean(thz, false); | |
} catch (Throwable t) { | |
XposedBridge.log(t); | |
} | |
} | |
} | |
); | |
} catch (Throwable t) { | |
XposedBridge.log(t); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment