Skip to content

Commit fe4a935

Browse files
fix crashes on some roms
1 parent aae578c commit fe4a935

File tree

6 files changed

+65
-37
lines changed

6 files changed

+65
-37
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ android {
2222

2323
task zip(type: Exec) {
2424
workingDir '..'
25-
commandLine 'sh', 'build.sh', project.name, 'v8'
25+
commandLine 'sh', 'build.sh', project.name, 'v9'
2626
}

jni/main/hook.cpp

+14-14
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,25 @@ NEW_FUNC_DEF(int, __system_property_get, const char *key, char *value) {
2828
if (key) {
2929
if (strcmp("ro.miui.ui.version.name", key) == 0) {
3030
strcpy(value, "V9");
31-
LOGI("system_property_get: %s -> %s", key, value);
31+
//LOGI("system_property_get: %s -> %s", key, value);
3232
} else if (strcmp("ro.miui.ui.version.code", key) == 0) {
3333
strcpy(value, "7");
34-
LOGI("system_property_get: %s -> %s", key, value);
34+
//LOGI("system_property_get: %s -> %s", key, value);
3535
} else if (strcmp("ro.miui.version.code_time", key) == 0) {
3636
strcpy(value, "1527550858");
37-
LOGI("system_property_get: %s -> %s", key, value);
37+
//LOGI("system_property_get: %s -> %s", key, value);
3838
} else if (strcmp("ro.miui.internal.storage", key) == 0) {
3939
strcpy(value, "/sdcard/");
40-
LOGI("system_property_get: %s -> %s", key, value);
40+
//LOGI("system_property_get: %s -> %s", key, value);
4141
} else if (strcmp("ro.product.manufacturer", key) == 0) {
4242
strcpy(value, "Xiaomi");
43-
LOGI("system_property_get: %s -> %s", key, value);
43+
//LOGI("system_property_get: %s -> %s", key, value);
4444
} else if (strcmp("ro.product.brand", key) == 0) {
4545
strcpy(value, "Xiaomi");
46-
LOGI("system_property_get: %s -> %s", key, value);
46+
//LOGI("system_property_get: %s -> %s", key, value);
4747
} else if (strcmp("ro.product.name", key) == 0) {
4848
strcpy(value, "Xiaomi");
49-
LOGI("system_property_get: %s -> %s", key, value);
49+
//LOGI("system_property_get: %s -> %s", key, value);
5050
}
5151

5252
}
@@ -58,25 +58,25 @@ NEW_FUNC_DEF(std::string, _ZN7android4base11GetPropertyERKNSt3__112basic_stringI
5858

5959
if (strcmp("ro.miui.ui.version.name", key.c_str()) == 0) {
6060
res = "V9";
61-
LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
61+
//LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
6262
} else if (strcmp("ro.miui.ui.version.code", key.c_str()) == 0) {
6363
res = "7";
64-
LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
64+
//LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
6565
} else if (strcmp("ro.miui.version.code_time", key.c_str()) == 0) {
6666
res = "1527550858";
67-
LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
67+
//LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
6868
} else if (strcmp("ro.miui.internal.storage", key.c_str()) == 0) {
6969
res = "/sdcard/";
70-
LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
70+
//LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
7171
} else if (strcmp("ro.product.manufacturer", key.c_str()) == 0) {
7272
res = "Xiaomi";
73-
LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
73+
//LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
7474
} else if (strcmp("ro.product.brand", key.c_str()) == 0) {
7575
res = "Xiaomi";
76-
LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
76+
//LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
7777
} else if (strcmp("ro.product.name", key.c_str()) == 0) {
7878
res = "Xiaomi";
79-
LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
79+
//LOGI("android::base::GetProperty: %s -> %s", key.c_str(), res.c_str());
8080
}
8181
return res;
8282
}

jni/main/main.cpp

+45-17
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,48 @@ void load_config() {
7373
//empty
7474
}
7575

76+
77+
78+
void injectBuild(JNIEnv *env) {
79+
if (env == 0) {
80+
LOGW("failed to inject android.os.Build for %s due to env is null", package_name);
81+
return;
82+
}
83+
LOGI("inject android.os.Build for %s ", package_name);
84+
85+
jclass build_class = env->FindClass("android/os/Build");
86+
if (build_class == 0) {
87+
LOGW("failed to inject android.os.Build for %s due to build is null", package_name);
88+
return;
89+
}
90+
91+
jstring new_str = env->NewStringUTF("Xiaomi");
92+
93+
jfieldID brand_id = env->GetStaticFieldID(build_class, "BRAND", "Ljava/lang/String;");
94+
if (brand_id != 0) {
95+
env->SetStaticObjectField(build_class, brand_id, new_str);
96+
}
97+
98+
jfieldID manufacturer_id = env->GetStaticFieldID(build_class, "MANUFACTURER", "Ljava/lang/String;");
99+
if (manufacturer_id != 0) {
100+
env->SetStaticObjectField(build_class, manufacturer_id, new_str);
101+
}
102+
103+
jfieldID product_id = env->GetStaticFieldID(build_class, "PRODUCT", "Ljava/lang/String;");
104+
if (product_id != 0) {
105+
env->SetStaticObjectField(build_class, product_id, new_str);
106+
}
107+
108+
if(env->ExceptionCheck())
109+
{
110+
env->ExceptionClear();
111+
}
112+
113+
env->DeleteLocalRef(new_str);
114+
115+
}
116+
117+
76118
void nativeForkAndSpecialize(int res, int enable_hook, const char *package_name, jint uid) {
77119
if (res == 0 && enable_hook) {
78120
install_hook(package_name, uid / 100000);
@@ -104,26 +146,12 @@ __attribute__((visibility("default"))) int nativeForkAndSpecializePost(JNIEnv *e
104146
jint res) {
105147

106148
if (res == 0 && enable_hook) {
107-
if (env) {
108-
LOGI("inject android.os.Build for %s ", package_name);
109-
110-
jclass build_class = env->FindClass("android/os/Build");
111-
jfieldID brand_id = env->GetStaticFieldID(build_class, "BRAND", "Ljava/lang/String;");
112-
jfieldID manufacturer_id = env->GetStaticFieldID(build_class, "MANUFACTURER",
113-
"Ljava/lang/String;");
114-
jfieldID product_id = env->GetStaticFieldID(build_class, "PRODUCT",
115-
"Ljava/lang/String;");
116-
117-
jstring new_str = env->NewStringUTF("Xiaomi");
118-
env->SetStaticObjectField(build_class, brand_id, new_str);
119-
env->SetStaticObjectField(build_class, product_id, new_str);
120-
env->SetStaticObjectField(build_class, manufacturer_id, new_str);
121-
122-
env->DeleteLocalRef(new_str);
123-
}
149+
injectBuild(env);
124150
}
125151

126152
nativeForkAndSpecialize(res, enable_hook, package_name, uid);
127153
return !enable_hook;
128154
}
155+
156+
129157
}

template_override/config.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
AUTOMOUNT=true
2626

2727
# Set to true if you need to load system.prop
28-
PROPFILE=false
28+
PROPFILE=true
2929

3030
# Set to true if you need post-fs-data script
3131
POSTFSDATA=false

template_override/module.prop

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id=mipush_fake
22
name=Riru - MiPushFakeModule
3-
version=v8
4-
versionCode=8
3+
version=v9
4+
versionCode=9
55
author=Timothy
66
description=Fake as XiaoMI device by hook system_property_get. Require Riru - Core installed.
77
minMagisk=17000

template_override/riru_module.prop

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Riru - MiPushFakeModule
2-
version=v8
3-
versionCode=8
2+
version=v9
3+
versionCode=9
44
author=Timothy
55
description=Fake as XiaoMI device by hook system_property_get. Require Riru-Core v9+ installed.

0 commit comments

Comments
 (0)