Fix moduleClassNames (#1796)
This commit is contained in:
parent
ee2c1a3320
commit
be722b2e2e
|
|
@ -373,6 +373,18 @@ public class ConfigFileManager {
|
||||||
}
|
}
|
||||||
if (preLoadedDexes.isEmpty()) return null;
|
if (preLoadedDexes.isEmpty()) return null;
|
||||||
if (moduleClassNames.isEmpty()) return null;
|
if (moduleClassNames.isEmpty()) return null;
|
||||||
|
|
||||||
|
if (obfuscate) {
|
||||||
|
for (int i = 0; i < moduleClassNames.size(); i++) {
|
||||||
|
var s = moduleClassNames.get(i);
|
||||||
|
var original = ObfuscationManager.getOriginalSignature();
|
||||||
|
if (s.startsWith(original)) {
|
||||||
|
var obfuscated = ObfuscationManager.getObfuscatedSignature();
|
||||||
|
moduleClassNames.add(i, s.replace(original, obfuscated));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
file.preLoadedDexes = preLoadedDexes;
|
file.preLoadedDexes = preLoadedDexes;
|
||||||
file.moduleClassNames = moduleClassNames;
|
file.moduleClassNames = moduleClassNames;
|
||||||
file.moduleLibraryNames = moduleLibraryNames;
|
file.moduleLibraryNames = moduleLibraryNames;
|
||||||
|
|
|
||||||
|
|
@ -8,4 +8,6 @@ public class ObfuscationManager {
|
||||||
|
|
||||||
// generates signature
|
// generates signature
|
||||||
static native String getObfuscatedSignature();
|
static native String getObfuscatedSignature();
|
||||||
|
|
||||||
|
static native String getOriginalSignature();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ using namespace lsplant;
|
||||||
namespace {
|
namespace {
|
||||||
std::mutex init_lock{};
|
std::mutex init_lock{};
|
||||||
std::string obfuscated_signature;
|
std::string obfuscated_signature;
|
||||||
const std::string old_signature = "Lde/robv/android/xposed";
|
const std::string original_signature = "Lde/robv/android/xposed/";
|
||||||
|
|
||||||
jclass class_file_descriptor;
|
jclass class_file_descriptor;
|
||||||
jmethodID method_file_descriptor_ctor;
|
jmethodID method_file_descriptor_ctor;
|
||||||
|
|
@ -76,11 +76,11 @@ void maybeInit(JNIEnv *env) {
|
||||||
thread_local static std::uniform_int_distribution<std::string::size_type> choose_slash(0, 10);
|
thread_local static std::uniform_int_distribution<std::string::size_type> choose_slash(0, 10);
|
||||||
|
|
||||||
std::string out;
|
std::string out;
|
||||||
size_t length = old_signature.size();
|
size_t length = original_signature.size();
|
||||||
out.reserve(length);
|
out.reserve(length);
|
||||||
out += "L";
|
out += "L";
|
||||||
|
|
||||||
for (size_t i = 1; i < length; i++) {
|
for (size_t i = 1; i < length - 1; i++) {
|
||||||
if (choose_slash(rg) > 8 && // 80% alphabet + 20% slashes
|
if (choose_slash(rg) > 8 && // 80% alphabet + 20% slashes
|
||||||
out[i - 1] != '/' && // slashes could not stick together
|
out[i - 1] != '/' && // slashes could not stick together
|
||||||
i != 1 && // the first character should not be slash
|
i != 1 && // the first character should not be slash
|
||||||
|
|
@ -90,6 +90,8 @@ void maybeInit(JNIEnv *env) {
|
||||||
out += chrs[pick(rg)];
|
out += chrs[pick(rg)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out += "/";
|
||||||
return out;
|
return out;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -120,7 +122,17 @@ extern "C"
|
||||||
JNIEXPORT jstring JNICALL
|
JNIEXPORT jstring JNICALL
|
||||||
Java_org_lsposed_lspd_service_ObfuscationManager_getObfuscatedSignature(JNIEnv *env, [[maybe_unused]] jclass obfuscation_manager) {
|
Java_org_lsposed_lspd_service_ObfuscationManager_getObfuscatedSignature(JNIEnv *env, [[maybe_unused]] jclass obfuscation_manager) {
|
||||||
maybeInit(env);
|
maybeInit(env);
|
||||||
return env->NewStringUTF(obfuscated_signature.c_str());
|
std::string obfuscated_signature_java(obfuscated_signature, 1);
|
||||||
|
replace(obfuscated_signature_java.begin(), obfuscated_signature_java.end(), '/', '.');
|
||||||
|
return env->NewStringUTF(obfuscated_signature_java.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
JNIEXPORT jstring JNICALL
|
||||||
|
Java_org_lsposed_lspd_service_ObfuscationManager_getOriginalSignature(JNIEnv *env, [[maybe_unused]] jclass obfuscation_manager) {
|
||||||
|
std::string original_signature_java(original_signature, 1);
|
||||||
|
replace(original_signature_java.begin(), original_signature_java.end(), '/', '.');
|
||||||
|
return env->NewStringUTF(original_signature_java.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
static int obfuscateDex(const void *dex, size_t size) {
|
static int obfuscateDex(const void *dex, size_t size) {
|
||||||
|
|
@ -131,7 +143,7 @@ static int obfuscateDex(const void *dex, size_t size) {
|
||||||
auto ir = reader.GetIr();
|
auto ir = reader.GetIr();
|
||||||
for (auto &i: ir->strings) {
|
for (auto &i: ir->strings) {
|
||||||
const char *s = i->c_str();
|
const char *s = i->c_str();
|
||||||
char* p = const_cast<char *>(strstr(s, old_signature.c_str()));
|
char* p = const_cast<char *>(strstr(s, original_signature.c_str()));
|
||||||
if (p) {
|
if (p) {
|
||||||
// NOLINTNEXTLINE bugprone-not-null-terminated-result
|
// NOLINTNEXTLINE bugprone-not-null-terminated-result
|
||||||
memcpy(p, new_sig, strlen(new_sig));
|
memcpy(p, new_sig, strlen(new_sig));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue