mirror of
https://github.com/chiteroman/PlayIntegrityFix.git
synced 2025-01-19 11:02:20 +08:00
updates
This commit is contained in:
parent
fb41c62e87
commit
8681f89b70
263
.idea/other.xml
263
.idea/other.xml
@ -1,263 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="direct_access_persist.xml">
|
|
||||||
<option name="deviceSelectionList">
|
|
||||||
<list>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="27" />
|
|
||||||
<option name="brand" value="DOCOMO" />
|
|
||||||
<option name="codename" value="F01L" />
|
|
||||||
<option name="id" value="F01L" />
|
|
||||||
<option name="manufacturer" value="FUJITSU" />
|
|
||||||
<option name="name" value="F-01L" />
|
|
||||||
<option name="screenDensity" value="360" />
|
|
||||||
<option name="screenX" value="720" />
|
|
||||||
<option name="screenY" value="1280" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="28" />
|
|
||||||
<option name="brand" value="DOCOMO" />
|
|
||||||
<option name="codename" value="SH-01L" />
|
|
||||||
<option name="id" value="SH-01L" />
|
|
||||||
<option name="manufacturer" value="SHARP" />
|
|
||||||
<option name="name" value="AQUOS sense2 SH-01L" />
|
|
||||||
<option name="screenDensity" value="480" />
|
|
||||||
<option name="screenX" value="1080" />
|
|
||||||
<option name="screenY" value="2160" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="31" />
|
|
||||||
<option name="brand" value="samsung" />
|
|
||||||
<option name="codename" value="a51" />
|
|
||||||
<option name="id" value="a51" />
|
|
||||||
<option name="manufacturer" value="Samsung" />
|
|
||||||
<option name="name" value="Galaxy A51" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="1080" />
|
|
||||||
<option name="screenY" value="2400" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="34" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="akita" />
|
|
||||||
<option name="id" value="akita" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel 8a" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="1080" />
|
|
||||||
<option name="screenY" value="2400" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="33" />
|
|
||||||
<option name="brand" value="samsung" />
|
|
||||||
<option name="codename" value="b0q" />
|
|
||||||
<option name="id" value="b0q" />
|
|
||||||
<option name="manufacturer" value="Samsung" />
|
|
||||||
<option name="name" value="Galaxy S22 Ultra" />
|
|
||||||
<option name="screenDensity" value="600" />
|
|
||||||
<option name="screenX" value="1440" />
|
|
||||||
<option name="screenY" value="3088" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="32" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="bluejay" />
|
|
||||||
<option name="id" value="bluejay" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel 6a" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="1080" />
|
|
||||||
<option name="screenY" value="2400" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="29" />
|
|
||||||
<option name="brand" value="samsung" />
|
|
||||||
<option name="codename" value="crownqlteue" />
|
|
||||||
<option name="id" value="crownqlteue" />
|
|
||||||
<option name="manufacturer" value="Samsung" />
|
|
||||||
<option name="name" value="Galaxy Note9" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="2220" />
|
|
||||||
<option name="screenY" value="1080" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="34" />
|
|
||||||
<option name="brand" value="samsung" />
|
|
||||||
<option name="codename" value="dm3q" />
|
|
||||||
<option name="id" value="dm3q" />
|
|
||||||
<option name="manufacturer" value="Samsung" />
|
|
||||||
<option name="name" value="Galaxy S23 Ultra" />
|
|
||||||
<option name="screenDensity" value="600" />
|
|
||||||
<option name="screenX" value="1440" />
|
|
||||||
<option name="screenY" value="3088" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="33" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="felix" />
|
|
||||||
<option name="id" value="felix" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel Fold" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="2208" />
|
|
||||||
<option name="screenY" value="1840" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="33" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="felix_camera" />
|
|
||||||
<option name="id" value="felix_camera" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel Fold (Camera-enabled)" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="2208" />
|
|
||||||
<option name="screenY" value="1840" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="33" />
|
|
||||||
<option name="brand" value="samsung" />
|
|
||||||
<option name="codename" value="gts8uwifi" />
|
|
||||||
<option name="id" value="gts8uwifi" />
|
|
||||||
<option name="manufacturer" value="Samsung" />
|
|
||||||
<option name="name" value="Galaxy Tab S8 Ultra" />
|
|
||||||
<option name="screenDensity" value="320" />
|
|
||||||
<option name="screenX" value="1848" />
|
|
||||||
<option name="screenY" value="2960" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="34" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="husky" />
|
|
||||||
<option name="id" value="husky" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel 8 Pro" />
|
|
||||||
<option name="screenDensity" value="390" />
|
|
||||||
<option name="screenX" value="1008" />
|
|
||||||
<option name="screenY" value="2244" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="30" />
|
|
||||||
<option name="brand" value="motorola" />
|
|
||||||
<option name="codename" value="java" />
|
|
||||||
<option name="id" value="java" />
|
|
||||||
<option name="manufacturer" value="Motorola" />
|
|
||||||
<option name="name" value="G20" />
|
|
||||||
<option name="screenDensity" value="280" />
|
|
||||||
<option name="screenX" value="720" />
|
|
||||||
<option name="screenY" value="1600" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="33" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="lynx" />
|
|
||||||
<option name="id" value="lynx" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel 7a" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="1080" />
|
|
||||||
<option name="screenY" value="2400" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="31" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="oriole" />
|
|
||||||
<option name="id" value="oriole" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel 6" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="1080" />
|
|
||||||
<option name="screenY" value="2400" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="33" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="panther" />
|
|
||||||
<option name="id" value="panther" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel 7" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="1080" />
|
|
||||||
<option name="screenY" value="2400" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="31" />
|
|
||||||
<option name="brand" value="samsung" />
|
|
||||||
<option name="codename" value="q2q" />
|
|
||||||
<option name="id" value="q2q" />
|
|
||||||
<option name="manufacturer" value="Samsung" />
|
|
||||||
<option name="name" value="Galaxy Z Fold3" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="1768" />
|
|
||||||
<option name="screenY" value="2208" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="34" />
|
|
||||||
<option name="brand" value="samsung" />
|
|
||||||
<option name="codename" value="q5q" />
|
|
||||||
<option name="id" value="q5q" />
|
|
||||||
<option name="manufacturer" value="Samsung" />
|
|
||||||
<option name="name" value="Galaxy Z Fold5" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="1812" />
|
|
||||||
<option name="screenY" value="2176" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="30" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="r11" />
|
|
||||||
<option name="id" value="r11" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel Watch" />
|
|
||||||
<option name="screenDensity" value="320" />
|
|
||||||
<option name="screenX" value="384" />
|
|
||||||
<option name="screenY" value="384" />
|
|
||||||
<option name="type" value="WEAR_OS" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="30" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="redfin" />
|
|
||||||
<option name="id" value="redfin" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel 5" />
|
|
||||||
<option name="screenDensity" value="440" />
|
|
||||||
<option name="screenX" value="1080" />
|
|
||||||
<option name="screenY" value="2340" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="34" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="shiba" />
|
|
||||||
<option name="id" value="shiba" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel 8" />
|
|
||||||
<option name="screenDensity" value="420" />
|
|
||||||
<option name="screenX" value="1080" />
|
|
||||||
<option name="screenY" value="2400" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="33" />
|
|
||||||
<option name="brand" value="google" />
|
|
||||||
<option name="codename" value="tangorpro" />
|
|
||||||
<option name="id" value="tangorpro" />
|
|
||||||
<option name="manufacturer" value="Google" />
|
|
||||||
<option name="name" value="Pixel Tablet" />
|
|
||||||
<option name="screenDensity" value="320" />
|
|
||||||
<option name="screenX" value="1600" />
|
|
||||||
<option name="screenY" value="2560" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
<PersistentDeviceSelectionData>
|
|
||||||
<option name="api" value="29" />
|
|
||||||
<option name="brand" value="samsung" />
|
|
||||||
<option name="codename" value="x1q" />
|
|
||||||
<option name="id" value="x1q" />
|
|
||||||
<option name="manufacturer" value="Samsung" />
|
|
||||||
<option name="name" value="Galaxy S20" />
|
|
||||||
<option name="screenDensity" value="480" />
|
|
||||||
<option name="screenX" value="1440" />
|
|
||||||
<option name="screenY" value="3200" />
|
|
||||||
</PersistentDeviceSelectionData>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
13
.idea/runConfigurations.xml
Normal file
13
.idea/runConfigurations.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RunConfigurationProducerService">
|
||||||
|
<option name="ignoredProducers">
|
||||||
|
<set>
|
||||||
|
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
|
||||||
|
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
|
||||||
|
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
|
||||||
|
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -2,6 +2,6 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="" vcs="Git" />
|
<mapping directory="" vcs="Git" />
|
||||||
<mapping directory="$PROJECT_DIR$/app/src/main/cpp/Dobby" vcs="Git" />
|
<mapping directory="$PROJECT_DIR$/app/src/main/cpp/glaze" vcs="Git" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -4,8 +4,8 @@ plugins {
|
|||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = "es.chiteroman.playintegrityfix"
|
namespace = "es.chiteroman.playintegrityfix"
|
||||||
compileSdk = 34
|
compileSdk = 35
|
||||||
ndkVersion = "26.3.11579264"
|
ndkVersion = "27.0.12077973"
|
||||||
buildToolsVersion = "34.0.0"
|
buildToolsVersion = "34.0.0"
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
@ -15,17 +15,16 @@ android {
|
|||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "es.chiteroman.playintegrityfix"
|
applicationId = "es.chiteroman.playintegrityfix"
|
||||||
minSdk = 26
|
minSdk = 26
|
||||||
targetSdk = 34
|
targetSdk = 35
|
||||||
versionCode = 16500
|
versionCode = 16500
|
||||||
versionName = "v16.6"
|
versionName = "v16.6"
|
||||||
multiDexEnabled = false
|
multiDexEnabled = false
|
||||||
|
|
||||||
packaging {
|
packaging {
|
||||||
resources {
|
resources {
|
||||||
excludes += "META-INF/**"
|
excludes += "**"
|
||||||
}
|
}
|
||||||
jniLibs {
|
jniLibs {
|
||||||
excludes += "**/liblog.so"
|
|
||||||
excludes += "**/libdobby.so"
|
excludes += "**/libdobby.so"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -38,7 +37,7 @@ android {
|
|||||||
cFlags += "-w"
|
cFlags += "-w"
|
||||||
cppFlags += "-w"
|
cppFlags += "-w"
|
||||||
|
|
||||||
cppFlags += "-std=c++20"
|
cppFlags += "-std=c++2c"
|
||||||
cppFlags += "-fno-exceptions"
|
cppFlags += "-fno-exceptions"
|
||||||
cppFlags += "-fno-rtti"
|
cppFlags += "-fno-rtti"
|
||||||
cppFlags += "-fvisibility=hidden"
|
cppFlags += "-fvisibility=hidden"
|
||||||
@ -72,7 +71,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("dev.rikka.ndk.thirdparty:cxx:1.2.0")
|
implementation("org.lsposed.libcxx:libcxx:27.0.12077973")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register("updateModuleProp") {
|
tasks.register("updateModuleProp") {
|
||||||
|
@ -4,12 +4,10 @@ project(playintegrityfix)
|
|||||||
|
|
||||||
find_package(cxx REQUIRED CONFIG)
|
find_package(cxx REQUIRED CONFIG)
|
||||||
|
|
||||||
link_libraries(log)
|
|
||||||
|
|
||||||
link_libraries(cxx::cxx)
|
link_libraries(cxx::cxx)
|
||||||
|
|
||||||
add_library(${CMAKE_PROJECT_NAME} SHARED main.cpp)
|
add_library(${CMAKE_PROJECT_NAME} SHARED main.cpp)
|
||||||
|
|
||||||
add_subdirectory(Dobby)
|
add_subdirectory(Dobby)
|
||||||
|
|
||||||
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE dobby_static)
|
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE log dobby_static)
|
@ -2,9 +2,10 @@
|
|||||||
#include <sys/system_properties.h>
|
#include <sys/system_properties.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include "dobby.h"
|
#include <filesystem>
|
||||||
#include "json.hpp"
|
|
||||||
#include "zygisk.hpp"
|
#include "zygisk.hpp"
|
||||||
|
#include "json.hpp"
|
||||||
|
#include "dobby.h"
|
||||||
|
|
||||||
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "PIF", __VA_ARGS__)
|
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "PIF", __VA_ARGS__)
|
||||||
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, "PIF", __VA_ARGS__)
|
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, "PIF", __VA_ARGS__)
|
||||||
@ -15,35 +16,11 @@
|
|||||||
|
|
||||||
#define PIF_JSON_DEFAULT "/data/adb/modules/playintegrityfix/pif.json"
|
#define PIF_JSON_DEFAULT "/data/adb/modules/playintegrityfix/pif.json"
|
||||||
|
|
||||||
static ssize_t xread(int fd, void *buffer, size_t count) {
|
static std::string DEVICE_INITIAL_SDK_INT = "21";
|
||||||
ssize_t total = 0;
|
static std::string SECURITY_PATCH;
|
||||||
char *buf = (char *) buffer;
|
static std::string BUILD_ID;
|
||||||
while (count > 0) {
|
|
||||||
ssize_t ret = read(fd, buf, count);
|
|
||||||
if (ret < 0) return -1;
|
|
||||||
buf += ret;
|
|
||||||
total += ret;
|
|
||||||
count -= ret;
|
|
||||||
}
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t xwrite(int fd, void *buffer, size_t count) {
|
static bool DEBUG = false;
|
||||||
ssize_t total = 0;
|
|
||||||
char *buf = (char *) buffer;
|
|
||||||
while (count > 0) {
|
|
||||||
ssize_t ret = write(fd, buf, count);
|
|
||||||
if (ret < 0) return -1;
|
|
||||||
buf += ret;
|
|
||||||
total += ret;
|
|
||||||
count -= ret;
|
|
||||||
}
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int verboseLogs = 0;
|
|
||||||
|
|
||||||
static std::map<std::string, std::string> props;
|
|
||||||
|
|
||||||
typedef void (*T_Callback)(void *, const char *, const char *, uint32_t);
|
typedef void (*T_Callback)(void *, const char *, const char *, uint32_t);
|
||||||
|
|
||||||
@ -59,51 +36,46 @@ static void modify_callback(void *cookie, const char *name, const char *value, u
|
|||||||
|
|
||||||
if (prop == "init.svc.adbd") {
|
if (prop == "init.svc.adbd") {
|
||||||
value = "stopped";
|
value = "stopped";
|
||||||
|
if (!DEBUG) LOGD("[%s]: %s", name, value);
|
||||||
} else if (prop == "sys.usb.state") {
|
} else if (prop == "sys.usb.state") {
|
||||||
value = "mtp";
|
value = "mtp";
|
||||||
|
if (!DEBUG) LOGD("[%s]: %s", name, value);
|
||||||
|
} else if (prop.ends_with("api_level") && !DEVICE_INITIAL_SDK_INT.empty()) {
|
||||||
|
value = DEVICE_INITIAL_SDK_INT.c_str();
|
||||||
|
if (!DEBUG) LOGD("[%s]: %s", name, value);
|
||||||
|
} else if (prop.ends_with(".security_patch") && !SECURITY_PATCH.empty()) {
|
||||||
|
value = SECURITY_PATCH.c_str();
|
||||||
|
if (!DEBUG) LOGD("[%s]: %s", name, value);
|
||||||
|
} else if (prop.ends_with(".build.id") && !BUILD_ID.empty()) {
|
||||||
|
value = BUILD_ID.c_str();
|
||||||
|
if (!DEBUG) LOGD("[%s]: %s", name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props.contains(name)) {
|
if (DEBUG) LOGD("[%s]: %s", name, value);
|
||||||
value = props[name].c_str();
|
|
||||||
if (verboseLogs > 49) LOGD("[%s]: %s", name, value);
|
|
||||||
} else {
|
|
||||||
for (const auto &item: props) {
|
|
||||||
if (item.first.starts_with("*") && prop.ends_with(item.first.substr(1))) {
|
|
||||||
value = item.second.c_str();
|
|
||||||
if (verboseLogs > 49) LOGD("[%s]: %s", name, value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (verboseLogs > 99) LOGD("[%s]: %s", name, value);
|
|
||||||
|
|
||||||
return callbacks[cookie](cookie, name, value, serial);
|
return callbacks[cookie](cookie, name, value, serial);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void (*o_system_property_read_callback)(const prop_info *, T_Callback, void *);
|
static void (*o_system_property_read_callback)(const prop_info *, T_Callback, void *) = nullptr;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
my_system_property_read_callback(const prop_info *pi, T_Callback callback, void *cookie) {
|
my_system_property_read_callback(const prop_info *pi, T_Callback callback, void *cookie) {
|
||||||
if (pi == nullptr || callback == nullptr || cookie == nullptr) {
|
if (callback && cookie) callbacks[cookie] = callback;
|
||||||
return o_system_property_read_callback(pi, callback, cookie);
|
|
||||||
}
|
|
||||||
callbacks[cookie] = callback;
|
|
||||||
return o_system_property_read_callback(pi, modify_callback, cookie);
|
return o_system_property_read_callback(pi, modify_callback, cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void doHook() {
|
static void doHook() {
|
||||||
auto handle = DobbySymbolResolver(nullptr, "__system_property_read_callback");
|
void *handle = DobbySymbolResolver(nullptr, "__system_property_read_callback");
|
||||||
if (!handle) {
|
if (!handle) {
|
||||||
LOGE("Couldn't find __system_property_read_callback symbol!");
|
LOGE("error resolving __system_property_read_callback symbol!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (DobbyHook(handle, (dobby_dummy_func_t) my_system_property_read_callback,
|
if (DobbyHook(handle, (void *) my_system_property_read_callback,
|
||||||
(dobby_dummy_func_t *) &o_system_property_read_callback)) {
|
(void **) &o_system_property_read_callback)) {
|
||||||
LOGE("Couldn't hook __system_property_read_callback!");
|
LOGE("hook failed!");
|
||||||
return;
|
} else {
|
||||||
|
LOGD("hook __system_property_read_callback success at %p", handle);
|
||||||
}
|
}
|
||||||
LOGD("Hooked __system_property_read_callback at %p", handle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class PlayIntegrityFix : public zygisk::ModuleBase {
|
class PlayIntegrityFix : public zygisk::ModuleBase {
|
||||||
@ -159,17 +131,17 @@ public:
|
|||||||
int dexSize = 0, jsonSize = 0;
|
int dexSize = 0, jsonSize = 0;
|
||||||
std::vector<uint8_t> jsonVector;
|
std::vector<uint8_t> jsonVector;
|
||||||
|
|
||||||
xread(fd, &dexSize, sizeof(int));
|
read(fd, &dexSize, sizeof(int));
|
||||||
xread(fd, &jsonSize, sizeof(int));
|
read(fd, &jsonSize, sizeof(int));
|
||||||
|
|
||||||
if (dexSize > 0) {
|
if (dexSize > 0) {
|
||||||
dexVector.resize(dexSize);
|
dexVector.resize(dexSize);
|
||||||
xread(fd, dexVector.data(), dexSize * sizeof(uint8_t));
|
read(fd, dexVector.data(), dexSize * sizeof(uint8_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jsonSize > 0) {
|
if (jsonSize > 0) {
|
||||||
jsonVector.resize(jsonSize);
|
jsonVector.resize(jsonSize);
|
||||||
xread(fd, jsonVector.data(), jsonSize * sizeof(uint8_t));
|
read(fd, jsonVector.data(), jsonSize * sizeof(uint8_t));
|
||||||
json = nlohmann::json::parse(jsonVector, nullptr, false, true);
|
json = nlohmann::json::parse(jsonVector, nullptr, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,13 +149,13 @@ public:
|
|||||||
|
|
||||||
LOGD("Dex file size: %d", dexSize);
|
LOGD("Dex file size: %d", dexSize);
|
||||||
LOGD("Json file size: %d", jsonSize);
|
LOGD("Json file size: %d", jsonSize);
|
||||||
|
|
||||||
parseJSON();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void postAppSpecialize(const zygisk::AppSpecializeArgs *args) override {
|
void postAppSpecialize(const zygisk::AppSpecializeArgs *args) override {
|
||||||
if (dexVector.empty()) return;
|
if (dexVector.empty()) return;
|
||||||
|
|
||||||
|
parseJSON();
|
||||||
|
|
||||||
doHook();
|
doHook();
|
||||||
|
|
||||||
injectDex();
|
injectDex();
|
||||||
@ -202,39 +174,27 @@ private:
|
|||||||
void parseJSON() {
|
void parseJSON() {
|
||||||
if (json.empty()) return;
|
if (json.empty()) return;
|
||||||
|
|
||||||
if (json.contains("verboseLogs") && !json["verboseLogs"].empty()) {
|
if (json.contains("DEVICE_INITIAL_SDK_INT")) {
|
||||||
if (json["verboseLogs"].is_string()) {
|
if (json["DEVICE_INITIAL_SDK_INT"].is_string()) {
|
||||||
verboseLogs = std::stoi(json["verboseLogs"].get<std::string>());
|
DEVICE_INITIAL_SDK_INT = json["DEVICE_INITIAL_SDK_INT"].get<std::string>();
|
||||||
} else if (json["verboseLogs"].is_number_integer()) {
|
} else if (json["DEVICE_INITIAL_SDK_INT"].is_number_integer()) {
|
||||||
verboseLogs = json["verboseLogs"].get<int>();
|
DEVICE_INITIAL_SDK_INT = std::to_string(json["DEVICE_INITIAL_SDK_INT"].get<int>());
|
||||||
}
|
}
|
||||||
json.erase("verboseLogs");
|
json.erase("DEVICE_INITIAL_SDK_INT");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verboseLogs > 0) LOGD("Verbose logging (level %d) enabled", verboseLogs);
|
if (json.contains("SECURITY_PATCH") && json["SECURITY_PATCH"].is_string()) {
|
||||||
|
SECURITY_PATCH = json["SECURITY_PATCH"].get<std::string>();
|
||||||
std::vector<std::string> removeKeys;
|
|
||||||
|
|
||||||
// Java fields are always uppercase, system props are always lowercase
|
|
||||||
for (const auto &item: json.items()) {
|
|
||||||
if (std::all_of(item.key().cbegin(), item.key().cend(), [](unsigned char c) {
|
|
||||||
return c == '_' || (std::isalpha(c) && std::isupper(c));
|
|
||||||
})) {
|
|
||||||
// Java field
|
|
||||||
if (verboseLogs > 99) LOGD("Skip Java field: %s", item.key().c_str());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// System prop
|
|
||||||
if (item.value().is_string()) {
|
|
||||||
props.insert({item.key(), item.value().get<std::string>()});
|
|
||||||
if (verboseLogs > 99) LOGD("Got system prop: %s", item.key().c_str());
|
|
||||||
}
|
|
||||||
removeKeys.push_back(item.key());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LOGD("Loaded %d props to spoof", props.size());
|
if (json.contains("ID") && json["ID"].is_string()) {
|
||||||
|
BUILD_ID = json["ID"].get<std::string>();
|
||||||
|
}
|
||||||
|
|
||||||
for (const auto &item: removeKeys) json.erase(item);
|
if (json.contains("DEBUG") && json["DEBUG"].is_boolean()) {
|
||||||
|
DEBUG = json["DEBUG"].get<bool>();
|
||||||
|
json.erase("DEBUG");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void injectDex() {
|
void injectDex() {
|
||||||
@ -291,23 +251,30 @@ static std::vector<uint8_t> readFile(const char *path) {
|
|||||||
|
|
||||||
static void companion(int fd) {
|
static void companion(int fd) {
|
||||||
|
|
||||||
auto dex = readFile(DEX_PATH);
|
std::vector<uint8_t> dex, json;
|
||||||
|
|
||||||
auto json = readFile(PIF_JSON);
|
if (std::filesystem::exists(DEX_PATH)) {
|
||||||
if (json.empty()) json = readFile(PIF_JSON_DEFAULT);
|
dex = readFile(DEX_PATH);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (std::filesystem::exists(PIF_JSON)) {
|
||||||
|
json = readFile(PIF_JSON);
|
||||||
|
} else if (std::filesystem::exists(PIF_JSON_DEFAULT)) {
|
||||||
|
json = readFile(PIF_JSON_DEFAULT);
|
||||||
|
}
|
||||||
|
|
||||||
int dexSize = static_cast<int>(dex.size());
|
int dexSize = static_cast<int>(dex.size());
|
||||||
int jsonSize = static_cast<int>(json.size());
|
int jsonSize = static_cast<int>(json.size());
|
||||||
|
|
||||||
xwrite(fd, &dexSize, sizeof(int));
|
write(fd, &dexSize, sizeof(int));
|
||||||
xwrite(fd, &jsonSize, sizeof(int));
|
write(fd, &jsonSize, sizeof(int));
|
||||||
|
|
||||||
if (dexSize > 0) {
|
if (dexSize > 0) {
|
||||||
xwrite(fd, dex.data(), dexSize * sizeof(uint8_t));
|
write(fd, dex.data(), dexSize * sizeof(uint8_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jsonSize > 0) {
|
if (jsonSize > 0) {
|
||||||
xwrite(fd, json.data(), jsonSize * sizeof(uint8_t));
|
write(fd, json.data(), jsonSize * sizeof(uint8_t));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id("com.android.application") version "8.5.0" apply false
|
id("com.android.application") version "8.5.1" apply false
|
||||||
}
|
}
|
@ -20,6 +20,12 @@ if [ -d "/data/adb/modules/MagiskHidePropsConf" ]; then
|
|||||||
ui_print "! WARNING, MagiskHidePropsConf module may cause issues with PIF."
|
ui_print "! WARNING, MagiskHidePropsConf module may cause issues with PIF."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# tricky_store must be removed when flashing PIF
|
||||||
|
if [ -d "/data/adb/modules/tricky_store" ]; then
|
||||||
|
touch "/data/adb/modules/tricky_store/remove"
|
||||||
|
ui_print "! tricky_store module removed!"
|
||||||
|
fi
|
||||||
|
|
||||||
# Check custom fingerprint
|
# Check custom fingerprint
|
||||||
if [ -f "/data/adb/pif.json" ]; then
|
if [ -f "/data/adb/pif.json" ]; then
|
||||||
mv -f "/data/adb/pif.json" "/data/adb/pif.json.old"
|
mv -f "/data/adb/pif.json" "/data/adb/pif.json.old"
|
||||||
|
@ -1,95 +1,12 @@
|
|||||||
{
|
{
|
||||||
|
"ID": "AP31.240517.022",
|
||||||
"BRAND": "google",
|
"BRAND": "google",
|
||||||
"DEVICE": "husky",
|
"DEVICE": "husky",
|
||||||
"FINGERPRINT": "google/husky_beta/husky:15/AP31.240517.022/11948202:user/release-keys",
|
"FINGERPRINT": "google/husky_beta/husky:15/AP31.240517.022/11948202:user/release-keys",
|
||||||
"ID": "AP31.240517.022",
|
|
||||||
"MANUFACTURER": "Google",
|
"MANUFACTURER": "Google",
|
||||||
"MODEL": "Pixel 8 Pro",
|
"MODEL": "Pixel 8 Pro",
|
||||||
"PRODUCT": "husky_beta",
|
"PRODUCT": "husky_beta",
|
||||||
"SECURITY_PATCH": "2024-06-05",
|
"SECURITY_PATCH": "2024-06-05",
|
||||||
"*.security_patch": "2024-06-05",
|
"DEVICE_INITIAL_SDK_INT": 21,
|
||||||
"*api_level": "24",
|
"DEBUG": false
|
||||||
"dalvik.vm.appimageformat": "lz4",
|
|
||||||
"dalvik.vm.dex2oat-Xms": "64m",
|
|
||||||
"dalvik.vm.dex2oat-Xmx": "512m",
|
|
||||||
"dalvik.vm.dex2oat-max-image-block-size": "524288",
|
|
||||||
"dalvik.vm.dex2oat-minidebuginfo": "true",
|
|
||||||
"dalvik.vm.dex2oat-resolve-startup-strings": "true",
|
|
||||||
"dalvik.vm.dexopt.secondary": "true",
|
|
||||||
"dalvik.vm.dexopt.thermal-cutoff": "2",
|
|
||||||
"dalvik.vm.image-dex2oat-Xms": "64m",
|
|
||||||
"dalvik.vm.image-dex2oat-Xmx": "64m",
|
|
||||||
"dalvik.vm.madvise.artfile.size": "4294967295",
|
|
||||||
"dalvik.vm.madvise.odexfile.size": "104857600",
|
|
||||||
"dalvik.vm.madvise.vdexfile.size": "104857600",
|
|
||||||
"dalvik.vm.minidebuginfo": "true",
|
|
||||||
"dalvik.vm.usap_pool_enabled": "false",
|
|
||||||
"dalvik.vm.usap_pool_refill_delay_ms": "3000",
|
|
||||||
"dalvik.vm.usap_pool_size_max": "3",
|
|
||||||
"dalvik.vm.usap_pool_size_min": "1",
|
|
||||||
"dalvik.vm.usap_refill_threshold": "1",
|
|
||||||
"dalvik.vm.useartservice": "true",
|
|
||||||
"dalvik.vm.usejit": "true",
|
|
||||||
"debug.atrace.tags.enableflags": "0",
|
|
||||||
"net.bt.name": "Android",
|
|
||||||
"persist.settings.large_screen_opt.enabled": "false",
|
|
||||||
"persist.traced.enable": "1",
|
|
||||||
"pm.dexopt.ab-ota": "speed-profile",
|
|
||||||
"pm.dexopt.bg-dexopt": "speed-profile",
|
|
||||||
"pm.dexopt.boot-after-mainline-update": "verify",
|
|
||||||
"pm.dexopt.boot-after-ota": "verify",
|
|
||||||
"pm.dexopt.cmdline": "verify",
|
|
||||||
"pm.dexopt.first-boot": "verify",
|
|
||||||
"pm.dexopt.inactive": "verify",
|
|
||||||
"pm.dexopt.install": "speed-profile",
|
|
||||||
"pm.dexopt.install-bulk": "speed-profile",
|
|
||||||
"pm.dexopt.install-bulk-downgraded": "verify",
|
|
||||||
"pm.dexopt.install-bulk-secondary": "verify",
|
|
||||||
"pm.dexopt.install-bulk-secondary-downgraded": "verify",
|
|
||||||
"pm.dexopt.install-fast": "skip",
|
|
||||||
"pm.dexopt.post-boot": "verify",
|
|
||||||
"pm.dexopt.shared": "speed",
|
|
||||||
"ro.actionable_compatible_property.enabled": "true",
|
|
||||||
"ro.adb.secure": "1",
|
|
||||||
"ro.allow.mock.location": "0",
|
|
||||||
"ro.apex.updatable": "true",
|
|
||||||
"ro.build.date": "Mon Jun 10 17:11:45 UTC 2024",
|
|
||||||
"ro.build.date.utc": "1718039505",
|
|
||||||
"ro.build.description": "husky_beta-user 15 AP31.240517.022 11948202 release-keys",
|
|
||||||
"ro.build.display.id": "AP31.240517.022",
|
|
||||||
"ro.build.flavor": "husky_beta-user",
|
|
||||||
"ro.build.host": "r-5ed19c9f6e4ddbc5-v0mt",
|
|
||||||
"ro.build.user": "android-build",
|
|
||||||
"ro.build.version.all_codenames": "REL",
|
|
||||||
"ro.build.version.codename": "REL",
|
|
||||||
"ro.build.version.known_codenames": "Base,Base11,Cupcake,Donut,Eclair,Eclair01,EclairMr1,Froyo,Gingerbread,GingerbreadMr1,Honeycomb,HoneycombMr1,HoneycombMr2,IceCreamSandwich,IceCreamSandwichMr1,JellyBean,JellyBeanMr1,JellyBeanMr2,Kitkat,KitkatWatch,Lollipop,LollipopMr1,M,N,NMr1,O,OMr1,P,Q,R,S,Sv2,Tiramisu,UpsideDownCake,VanillaIceCream",
|
|
||||||
"ro.build.version.min_supported_target_sdk": "28",
|
|
||||||
"ro.build.version.preview_sdk": "0",
|
|
||||||
"ro.build.version.preview_sdk_fingerprint": "REL",
|
|
||||||
"ro.build.version.release_or_codename": "15",
|
|
||||||
"ro.build.version.release_or_preview_display": "15",
|
|
||||||
"ro.camerax.extensions.enabled": "true",
|
|
||||||
"ro.dalvik.vm.native.bridge": "0",
|
|
||||||
"ro.debuggable": "0",
|
|
||||||
"ro.force.debuggable": "0",
|
|
||||||
"ro.hotword.detection_service_required": "true",
|
|
||||||
"ro.launcher.blur.appLaunch": "0",
|
|
||||||
"ro.llndk.api_level": "202404",
|
|
||||||
"ro.postinstall.fstab.prefix": "/system",
|
|
||||||
"ro.product.cpu.abi": "arm64-v8a",
|
|
||||||
"ro.product.locale": "en-US",
|
|
||||||
"ro.secure": "1",
|
|
||||||
"ro.system.build.date": "Mon Jun 10 17:11:45 UTC 2024",
|
|
||||||
"ro.system.build.date.utc": "1718039505",
|
|
||||||
"ro.system.build.id": "AP31.240517.022",
|
|
||||||
"ro.system.build.tags": "release-keys",
|
|
||||||
"ro.system.build.type": "user",
|
|
||||||
"ro.system.build.version.incremental": "11948202",
|
|
||||||
"ro.system.build.version.release": "15",
|
|
||||||
"ro.system.build.version.release_or_codename": "15",
|
|
||||||
"ro.system.product.cpu.abilist": "arm64-v8a",
|
|
||||||
"ro.system.product.cpu.abilist64": "arm64-v8a",
|
|
||||||
"ro.treble.enabled": "true",
|
|
||||||
"security.perf_harden": "1",
|
|
||||||
"verboseLogs": 100
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user