You've already forked PlayIntegrityFork
mirror of
https://github.com/osm0sis/PlayIntegrityFork.git
synced 2025-09-06 06:37:06 +00:00
spoofVendingFingerprint = 0 / 1 When 0, no impact on Vending When 1, same FINGERPRINT from custom.pif.json is injected into Vending Unless spoofVendingSdk is enabled also, in which case FINGERPRINT is not injected since it's not used
205 lines
7.5 KiB
Bash
205 lines
7.5 KiB
Bash
#!/system/bin/sh
|
|
|
|
if [ "$USER" != "root" -a "$(whoami 2>/dev/null)" != "root" ]; then
|
|
echo "autopif2: need root permissions"; exit 1;
|
|
fi;
|
|
case "$HOME" in
|
|
*termux*) echo "autopif2: need su root environment"; exit 1;;
|
|
esac;
|
|
|
|
FORCE_TOP=1;
|
|
FORCE_DEPTH=1;
|
|
until [ -z "$1" ]; do
|
|
case "$1" in
|
|
-h|--help|help) echo "sh autopif2.sh [-a|-s] [-m] [-t #] [-d #]"; exit 0;;
|
|
-a|--advanced|advanced) ARGS="-a"; shift;;
|
|
-s|--strong|strong) ARGS="-a"; PATCH_COMMENT=1; spoofProvider=0; shift;;
|
|
-m|--match|match) FORCE_MATCH=1; shift;;
|
|
-t|--top|top) echo "$2" | grep -q '^[1-9]$' || exit 1; FORCE_TOP=$2; shift 2;;
|
|
-d|--depth|depth) echo "$2" | grep -q '^[1-9]$' || exit 1; FORCE_DEPTH=$2; shift 2;;
|
|
*) break;;
|
|
esac;
|
|
done;
|
|
|
|
echo "Pixel Beta pif.json generator script \
|
|
\n by osm0sis @ xda-developers";
|
|
|
|
case "$0" in
|
|
*.sh) DIR="$0";;
|
|
*) DIR="$(lsof -p $$ 2>/dev/null | grep -o '/.*autopif2.sh$')";;
|
|
esac;
|
|
DIR=$(dirname "$(readlink -f "$DIR")");
|
|
|
|
item() { echo "\n- $@"; }
|
|
die() { echo "\nError: $@, install busybox!"; exit 1; }
|
|
|
|
find_busybox() {
|
|
[ -n "$BUSYBOX" ] && return 0;
|
|
local path;
|
|
for path in /data/adb/modules/busybox-ndk/system/*/busybox /data/adb/magisk/busybox /data/adb/ksu/bin/busybox /data/adb/ap/bin/busybox; do
|
|
if [ -f "$path" ]; then
|
|
BUSYBOX="$path";
|
|
return 0;
|
|
fi;
|
|
done;
|
|
return 1;
|
|
}
|
|
|
|
if which wget2 >/dev/null; then
|
|
wget() { wget2 "$@"; }
|
|
elif ! which wget >/dev/null || grep -q "wget-curl" $(which wget); then
|
|
if ! find_busybox; then
|
|
die "wget not found";
|
|
elif $BUSYBOX ping -c1 -s2 android.com 2>&1 | grep -q "bad address"; then
|
|
die "wget broken";
|
|
else
|
|
wget() { $BUSYBOX wget "$@"; }
|
|
fi;
|
|
fi;
|
|
|
|
if date -D '%s' -d "$(date '+%s')" 2>&1 | grep -qE "bad date|invalid option"; then
|
|
if ! find_busybox; then
|
|
die "date broken";
|
|
else
|
|
date() { $BUSYBOX date "$@"; }
|
|
fi;
|
|
fi;
|
|
|
|
if ! echo "A\nB" | grep -m1 -A1 "A" | grep -q "B"; then
|
|
if ! find_busybox; then
|
|
die "grep broken";
|
|
else
|
|
grep() { $BUSYBOX grep "$@"; }
|
|
fi;
|
|
fi;
|
|
|
|
if [ "$DIR" = /data/adb/modules/playintegrityfix ]; then
|
|
DIR=$DIR/autopif2;
|
|
mkdir -p $DIR;
|
|
fi;
|
|
cd "$DIR";
|
|
|
|
item "Crawling Android Developers for latest Pixel Beta ...";
|
|
wget -q -O PIXEL_VERSIONS_HTML --no-check-certificate https://developer.android.com/about/versions 2>&1 || exit 1;
|
|
wget -q -O PIXEL_LATEST_HTML --no-check-certificate $(grep -o 'https://developer.android.com/about/versions/.*[0-9]"' PIXEL_VERSIONS_HTML | sort -ru | cut -d\" -f1 | head -n$FORCE_TOP | tail -n1) 2>&1 || exit 1;
|
|
wget -q -O PIXEL_OTA_HTML --no-check-certificate https://developer.android.com$(grep -o 'href=".*download-ota.*"' PIXEL_LATEST_HTML | grep 'qpr' | cut -d\" -f2 | head -n$FORCE_DEPTH | tail -n1) 2>&1 || exit 1;
|
|
echo "$(grep -m1 -oE 'tooltip>Android .*[0-9]' PIXEL_OTA_HTML | cut -d\> -f2) $(grep -oE 'tooltip>QPR.* Beta' PIXEL_OTA_HTML | cut -d\> -f2 | head -n$FORCE_DEPTH | tail -n1)";
|
|
|
|
BETA_REL_DATE="$(date -D '%B %e, %Y' -d "$(grep -m1 -A1 'Release date' PIXEL_OTA_HTML | tail -n1 | sed 's;.*<td>\(.*\)</td>.*;\1;')" '+%Y-%m-%d')";
|
|
BETA_EXP_DATE="$(date -D '%s' -d "$(($(date -D '%Y-%m-%d' -d "$BETA_REL_DATE" '+%s') + 60 * 60 * 24 * 7 * 6))" '+%Y-%m-%d')";
|
|
echo "Beta Released: $BETA_REL_DATE \
|
|
\nEstimated Expiry: $BETA_EXP_DATE";
|
|
|
|
MODEL_LIST="$(grep -A1 'tr id=' PIXEL_OTA_HTML | grep 'td' | sed 's;.*<td>\(.*\)</td>;\1;')";
|
|
PRODUCT_LIST="$(grep -o 'ota/.*_beta' PIXEL_OTA_HTML | cut -d\/ -f2)";
|
|
OTA_LIST="$(grep 'ota/.*_beta' PIXEL_OTA_HTML | cut -d\" -f2)";
|
|
|
|
if [ "$FORCE_MATCH" ]; then
|
|
DEVICE="$(getprop ro.product.device)";
|
|
case "$PRODUCT_LIST" in
|
|
*${DEVICE}_beta*)
|
|
MODEL="$(getprop ro.product.model)";
|
|
PRODUCT="${DEVICE}_beta";
|
|
OTA="$(echo "$OTA_LIST" | grep "$PRODUCT")";
|
|
;;
|
|
esac;
|
|
fi;
|
|
item "Selecting Pixel Beta device ...";
|
|
if [ -z "$PRODUCT" ]; then
|
|
set_random_beta() {
|
|
local list_count="$(echo "$MODEL_LIST" | wc -l)";
|
|
local list_rand="$((RANDOM % $list_count + 1))";
|
|
local IFS=$'\n';
|
|
set -- $MODEL_LIST;
|
|
MODEL="$(eval echo \${$list_rand})";
|
|
set -- $PRODUCT_LIST;
|
|
PRODUCT="$(eval echo \${$list_rand})";
|
|
set -- $OTA_LIST;
|
|
OTA="$(eval echo \${$list_rand})";
|
|
DEVICE="$(echo "$PRODUCT" | sed 's/_beta//')";
|
|
}
|
|
set_random_beta;
|
|
fi;
|
|
echo "$MODEL ($PRODUCT)";
|
|
|
|
(ulimit -f 2; wget -q -O PIXEL_ZIP_METADATA --no-check-certificate $OTA) 2>/dev/null;
|
|
FINGERPRINT="$(grep -am1 'post-build=' PIXEL_ZIP_METADATA 2>/dev/null | cut -d= -f2)";
|
|
SECURITY_PATCH="$(grep -am1 'security-patch-level=' PIXEL_ZIP_METADATA 2>/dev/null | cut -d= -f2)";
|
|
if [ -z "$FINGERPRINT" -o -z "$SECURITY_PATCH" ]; then
|
|
case "$(getprop ro.product.cpu.abi)" in
|
|
armeabi-v7a|x86) [ "$BUSYBOX" ] && ISBB32MSG=", install wget2";;
|
|
esac;
|
|
echo "\nError: Failed to extract information from metadata$ISBB32MSG!";
|
|
exit 1;
|
|
fi;
|
|
|
|
item "Dumping values to minimal pif.json ...";
|
|
cat <<EOF | tee pif.json;
|
|
{
|
|
"MANUFACTURER": "Google",
|
|
"MODEL": "$MODEL",
|
|
"FINGERPRINT": "$FINGERPRINT",
|
|
"PRODUCT": "$PRODUCT",
|
|
"DEVICE": "$DEVICE",
|
|
"SECURITY_PATCH": "$SECURITY_PATCH",
|
|
"DEVICE_INITIAL_SDK_INT": "32"
|
|
}
|
|
EOF
|
|
|
|
for MIGRATE in migrate.sh /data/adb/modules/playintegrityfix/migrate.sh; do
|
|
[ -f "$MIGRATE" ] && break;
|
|
done;
|
|
if [ -f "$MIGRATE" ]; then
|
|
OLDJSON=/data/adb/modules/playintegrityfix/custom.pif.json;
|
|
if [ -f "$OLDJSON" ]; then
|
|
grep -q '//"\*.security_patch"' $OLDJSON && PATCH_COMMENT=1;
|
|
grep -qE "verboseLogs|VERBOSE_LOGS" $OLDJSON && ARGS="-a";
|
|
fi;
|
|
[ -f /data/adb/tricky_store/security_patch.txt ] && unset PATCH_COMMENT;
|
|
item "Converting pif.json to custom.pif.json with migrate.sh:";
|
|
rm -f custom.pif.json;
|
|
sh $MIGRATE -i $ARGS pif.json;
|
|
if [ -n "$ARGS" ]; then
|
|
grep_json() { [ -f "$2" ] && grep -m1 "$1" $2 | cut -d\" -f4; }
|
|
verboseLogs=$(grep_json "VERBOSE_LOGS" $OLDJSON);
|
|
ADVSETTINGS="spoofBuild spoofProps spoofProvider spoofSignature spoofVendingFingerprint spoofVendingSdk verboseLogs";
|
|
for SETTING in $ADVSETTINGS; do
|
|
eval [ -z \"\$$SETTING\" ] \&\& $SETTING=$(grep_json "$SETTING" $OLDJSON);
|
|
eval TMPVAL=\$$SETTING;
|
|
[ -n "$TMPVAL" ] && sed -i "s;\($SETTING\": \"\).;\1$TMPVAL;" custom.pif.json;
|
|
done;
|
|
fi;
|
|
[ "$PATCH_COMMENT" ] && sed -i 's;"\*.security_patch";//"\*.security_patch";' custom.pif.json;
|
|
sed -i "s;};\n // Beta Released: $BETA_REL_DATE\n // Estimated Expiry: $BETA_EXP_DATE\n};" custom.pif.json;
|
|
cat custom.pif.json;
|
|
fi;
|
|
|
|
if [ "$DIR" = /data/adb/modules/playintegrityfix/autopif2 ]; then
|
|
if [ -f /data/adb/modules/playintegrityfix/migrate.sh ]; then
|
|
NEWNAME="custom.pif.json";
|
|
else
|
|
NEWNAME="pif.json";
|
|
fi;
|
|
if [ -f "../$NEWNAME" ]; then
|
|
item "Renaming old file to $NEWNAME.bak ...";
|
|
mv -fv ../$NEWNAME ../$NEWNAME.bak;
|
|
fi;
|
|
item "Installing new json ...";
|
|
cp -fv $NEWNAME ..;
|
|
TS_SECPAT=/data/adb/tricky_store/security_patch.txt;
|
|
if [ -f "$TS_SECPAT" ]; then
|
|
item "Updating Tricky Store security_patch.txt ...";
|
|
[ -s "$TS_SECPAT" ] || echo "all=" > $TS_SECPAT;
|
|
grep -qE '^[0-9]{8}$' $TS_SECPAT && sed -i "s/^.*$/${SECURITY_PATCH//-}/" $TS_SECPAT;
|
|
grep -qE '^[0-9]{4}-[0-9]{2}-[0-9]{2}$' $TS_SECPAT && sed -i "s/^.*$/$SECURITY_PATCH/" $TS_SECPAT;
|
|
grep -q 'all=' $TS_SECPAT && sed -i "s/all=.*/all=$SECURITY_PATCH/" $TS_SECPAT;
|
|
grep -q 'system=' $TS_SECPAT && sed -i "s/system=.*/system=$(echo ${SECURITY_PATCH//-} | cut -c-6)/" $TS_SECPAT;
|
|
sed -i '$a\' $TS_SECPAT;
|
|
cat $TS_SECPAT;
|
|
fi;
|
|
if [ -f /data/adb/modules/playintegrityfix/killpi.sh ]; then
|
|
item "Killing any running GMS DroidGuard/Play Store processes ...";
|
|
sh /data/adb/modules/playintegrityfix/killpi.sh 2>&1 || true;
|
|
fi;
|
|
fi;
|