Skip to content

Commit

Permalink
修复fakelocation1.3.5
Browse files Browse the repository at this point in the history
  • Loading branch information
bingqiu456 committed Jan 1, 2025
1 parent 15dc41f commit eb748db
Show file tree
Hide file tree
Showing 7 changed files with 159 additions and 111 deletions.
Binary file modified app/release/app-release.apk
Binary file not shown.
2 changes: 1 addition & 1 deletion app/src/main/java/me/bingyue/IceCore/MainHook.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public class MainHook implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if(Objects.equals(lpparam.packageName, "android")){
android.hook_init();
android.hookInit();
}
if(Objects.equals(lpparam.packageName, "me.bingyue.IceCore")){
XposedHelpers.findAndHookMethod("me.bingyue.IceCore.activity.MainActivityKt", lpparam.classLoader, "isModuleActivated", XC_MethodReplacement.returnConstant(true));
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/me/bingyue/IceCore/activity/Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ package me.bingyue.IceCore.activity
class Config {
val settingsMap = mapOf(
"Fake Location New" to listOf(
listOf("总开关", "com_lerist_fakelocation__all", "如果想使用请手动勾选系统框架\n同时把old下面的关了"),
listOf("启用本地VIP", "com_lerist_fakelocation__vip", "仅本地生效"),
listOf("去除APP黑名单", "com_lerist_fakelocation__black_app", "如上所述"),
listOf("去除服务器验证", "com_lerist_fakelocation__verify", "防止定位突然关闭")
),
"Fake Location 1.3.2.2" to listOf(
listOf("总开关", "com_lerist_fakelocation__oid_all", "如果想使用请手动勾选系统框架\n同时把new上面的关了"),
listOf("启用本地VIP", "com_lerist_fakelocation__vip_old", "仅本地生效"),
listOf("去除服务器验证", "com_lerist_fakelocation__verify", "防止定位突然关闭")
listOf("去除服务器验证", "com_lerist_fakelocation__verify_old", "防止定位突然关闭")
),
"Autocmd+" to listOf(
listOf("启用本地VIP", "com_lerist_autocmd__vip", "仅本地生效"),
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/java/me/bingyue/IceCore/config/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

public class Config {
public static boolean com_lerist_fakelocation__oid_all = true;
public static boolean com_lerist_fakelocation__vip = true;
public static boolean com_lerist_fakelocation__black_app = true;
public static boolean com_lerist_fakelocation__verify = true;
public static boolean com_lerist_fakelocation__vip = false;
public static boolean com_lerist_fakelocation__verify = false;
public static boolean com_lerist_fakelocation__vip_old = true;
public static boolean com_lerist_fakelocation__all = false;
public static boolean com_lerist_fakelocation__verify_old = true;
public static boolean com_nowcasting_activity__isvip = true;
public static boolean cn_ticktick_task__isvip = true;
Expand Down
78 changes: 46 additions & 32 deletions app/src/main/java/me/bingyue/IceCore/hook_app/android.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,43 +5,57 @@
import de.robv.android.xposed.XposedHelpers;

public class android {
public static void hook_init(){

public static void hookInit() {
XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
if (param.hasThrowable()) return;

Class<?> cls = (Class<?>) param.getResult();
if(cls.getClassLoader().toString().contains("/data/fakeloc/libfakeloc.so")) {
XposedBridge.log("hook libfakeloc.so");
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3500);
XposedBridge.log("start");
XposedHelpers.findAndHookMethod("com.lerist.inject.utils.ޏ", cls.getClassLoader(), "އ", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult(true);
}
});
XposedHelpers.findAndHookMethod("com.lerist.inject.utils.ބ", cls.getClassLoader(), "ރ", java.lang.String.class, int.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
param.args[0]="114.114.114.114";//把vef.api.fakeloc.cc改为114.114.114.114
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
}
});
}catch (Exception e){
e.printStackTrace();
}
String classLoaderInfo = cls.getClassLoader().toString();

if (classLoaderInfo.contains("/data/fakeloc/libfakeloc.so")) {
XposedBridge.log("Detected libfakeloc.so, preparing to hook...");

new Thread(() -> {
try {
Thread.sleep(3500); // 延迟执行以确保目标类加载完毕
XposedBridge.log("Starting hooks...");

// Hook 方法 com.lerist.inject.utils.ޏ.އ
XposedHelpers.findAndHookMethod("com.lerist.inject.utils.ޏ", cls.getClassLoader(), "އ", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}

@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult(true); // 强制返回 true
XposedBridge.log("Hooked އ method successfully.");
}
});

// Hook 方法 com.lerist.inject.utils.ބ.ރ
XposedHelpers.findAndHookMethod("com.lerist.inject.utils.ބ", cls.getClassLoader(), "ރ", String.class, int.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
param.args[0] = "114.114.114.114"; // 修改第一个参数为指定 IP
XposedBridge.log("Modified method argument to 114.114.114.114.");
}

@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
}
});

} catch (InterruptedException e) {
XposedBridge.log("Thread interrupted: " + e.getMessage());
} catch (Exception e) {
XposedBridge.log("Error during hooking: " + e.getMessage());
e.printStackTrace();
}
}).start();
}
Expand Down
177 changes: 104 additions & 73 deletions app/src/main/java/me/bingyue/IceCore/hook_app/fake_location_vip.java
Original file line number Diff line number Diff line change
@@ -1,112 +1,143 @@
package me.bingyue.IceCore.hook_app;

import android.app.Application;
import android.content.Context;
import android.util.Base64;
import android.util.Log;

import java.util.ArrayList;
import java.util.Objects;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import de.robv.android.xposed.XC_MethodHook;
import me.bingyue.IceCore.config.Config;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;


public class fake_location_vip {
public static void hook_init(XC_LoadPackage.LoadPackageParam lpparam) throws ClassNotFoundException {
Class applicationClazz = lpparam.classLoader.loadClass("com.stub.StubApp");
XposedHelpers.findAndHookMethod(
applicationClazz,
"a",
Context.class,
new XC_MethodHook() {
public static void hook_init(XC_LoadPackage.LoadPackageParam lpparam){
if(!Config.com_lerist_fakelocation__all){
return;
}
XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
Context context = (Context) param.args[0];
ClassLoader classLoader = context.getClassLoader();
XposedHelpers.findAndHookMethod("\u0627.\u078C$\u037F", classLoader,"\u0529", java.lang.String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
if(Config.com_lerist_fakelocation__verify){
param.args[0]="114.114.114.114";
}
}

@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Context context = (Context) param.args[0];
ClassLoader finalClassLoader = context.getClassLoader();
hook_vip(finalClassLoader.loadClass("\u0D5F.\u0588"));
hook_black_app(finalClassLoader.loadClass("\u0D5F.\u052C"));
hook_black_app_se(finalClassLoader.loadClass("\u0CF2.\u0528"));
hook_verify(finalClassLoader.loadClass("\u0828.\u052C"));
super.afterHookedMethod(param);
}
}
);
}
});

public static void hook_verify(Class init){
if (!Config.com_lerist_fakelocation__verify){
return;
}
XposedHelpers.findAndHookMethod(init, "\u052C", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}
Class<?> JSONClass =XposedHelpers.findClass("com.alibaba.fastjson.JSON",classLoader);
XposedHelpers.findAndHookMethod("ၼ.Ԩ", classLoader, "Ϳ", java.lang.Class.class, java.lang.String.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
if(Objects.equals(param.args[1].toString(), "key_userinfo") && Config.com_lerist_fakelocation__vip){
long proindate=System.currentTimeMillis()+200000000;
long tokenTime=System.currentTimeMillis()+500000000;
String key = "1#" + Long.toString(proindate) + "#" + Long.toString(tokenTime) + "#T";
String data = "{\"key\":\"" + desEncryptECB(key, "Lerist.T") + "\",\"loginName\":\"IceCore\",\"loginTime\":0,\"loginType\":\"email\",\"proindate\":" + Long.toString(proindate) + ",\"stability\":0,\"token\":\"T\",\"type\":1}";
param.setResult(XposedHelpers.callStaticMethod(JSONClass,"parseObject", data, param.args[0]));
return;
}
super.afterHookedMethod(param);
}
});

@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
param.setResult(true);
}
});
}
public static void hook_vip(Class initActivityClazz){
if(!Config.com_lerist_fakelocation__vip){
return;
}
XposedHelpers.findAndHookMethod(
initActivityClazz,
"\u052B",
new XC_MethodHook() {
XposedHelpers.findAndHookMethod("ၼ.Ԩ", classLoader, "Ԭ", Context.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

super.beforeHookedMethod(param);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult(true);
super.afterHookedMethod(param);
}
});

XposedHelpers.findAndHookMethod("\u0CF2.\u0528", classLoader, "\u052C", java.lang.String.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult(true);
}
}
);
}
});

XposedHelpers.findAndHookMethod("\u0CF2.\u0528", classLoader, "\u0529", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult(null);
}
});

public static void hook_black_app(Class initActivityClazz){
if(!Config.com_lerist_fakelocation__black_app){
return;
}
XposedHelpers.findAndHookMethod(
initActivityClazz,
"\u037F",
new XC_MethodHook() {
XposedHelpers.findAndHookMethod("ൟ.ֈ", classLoader, "ԫ", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult(new ArrayList<>(new ArrayList<>()));
param.setResult(true);
super.afterHookedMethod(param);
}
}
);
});

XposedHelpers.findAndHookMethod("ൟ.ֈ", classLoader, "Ԫ", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult(false);
super.afterHookedMethod(param);
}
});

}
});

}
public static void hook_black_app_se(Class init){
if(!Config.com_lerist_fakelocation__black_app){
return;


public static String desEncryptECB(String content, String key) {
try {
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] result = cipher.doFinal(content.getBytes());
return Base64.encodeToString(result, Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}
XposedHelpers.findAndHookMethod(init
, "\u052C", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}

@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult(new ArrayList<>());
super.afterHookedMethod(param);
}
});
return null;
}
public static String desECBDecrypt(byte[] data, String key) throws Exception {
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] encryptedData = Base64.decode(data, Base64.DEFAULT);
byte[] decryptedData = cipher.doFinal(encryptedData);
return new String(decryptedData);
}

}
3 changes: 3 additions & 0 deletions app/src/main/java/me/bingyue/IceCore/hook_core.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package me.bingyue.IceCore;

import android.util.Log;

import de.robv.android.xposed.callbacks.XC_LoadPackage;
import me.bingyue.IceCore.config.Config;
import me.bingyue.IceCore.hook_app.com_clover_daysmatter_vip;
Expand Down Expand Up @@ -41,6 +43,7 @@ public void e(XC_LoadPackage.LoadPackageParam lpparam) throws ClassNotFoundExcep
if(Config.com_lerist_fakelocation__oid_all){
com_lerist_fakelocation_old.hook_init(lpparam);
}else{
Log.d("test", "1");
fake_location_vip.hook_init(lpparam);
}
}
Expand Down

0 comments on commit eb748db

Please sign in to comment.