Hmm. You're right. unzip is still there, but zip is missing@osm0sis
I've been meaning to ask for a few weeks now.
Definitely not nitpicking but a request if possible.
Seems good old fashion zip is gone in SDK29.
Might be a question/request for busybox team but, could you include a zip binary in your busybox builds?
Your point? "Missing" is a pretty strong word to use about something built from a fully customizable configuration, and arguably most of those are totally useless on Android. Is there some specific applet you have a use for which you would like included, or are you just nitpicking?
@osm0sis
I've been meaning to ask for a few weeks now.
Definitely not nitpicking but a request if possible.
Seems good old fashion zip is gone in SDK29.
Might be a question/request for busybox team but, could you include a zip binary in your busybox builds?
Hmm. You're right. unzip is still there, but zip is missing
Setenforce and getenforce are also missing, but you can recreate those by creating a symlink to toybox. The applets still exist, just the symlinks are missing.
Edit: while on the subject of compression utilities I noticed that xz (which is a busybox applet) is decompress only?
I'm sorry if my post upset you. I didn't mean anything critical by it, nor was I asking you to add anything. I was just confused about the status of these applets and I wanted to know more.
I really appreciate your busybox port as well as all the other projects you've done.
Now see, that was actually useful. Please try to provide better information in the future. If you had said that at the beginning it would have wasted much less of all of our time (yours included).
So, all that output means is that whatever zip you tried to flash with it failed to flash. My script worked fine and reported that to you.
P.S. For future reference, the recovery.log you uploaded was from the current recovery session you took it from, not the OTA session, which is why it's basically empty. :good:
Totally out of curiosity only, is there any kind of official/agreed list of what "should" be included in busybox implementations? I noticed you included one for the standard utilities for stock android.Here's the latest official document on what should be included/linked in each Android version, looks like get/setenforce should still be present in system (they are on my OP6T on Android 10): https://chromium.googlesource.com/aosp/platform/system/core/+/upstream/shell_and_utilities/
My config has always been based on the old (previous patchset maintainer) Tias Gunn's "Stericson-like" config, and has since been updated with each new version of busybox to add new sensible default applets but also avoid pointless applets that would just bloat the binary.
Totally out of curiosity only, is there any kind of official/agreed list of what "should" be included in busybox implementations? I noticed you included one for the standard utilities for stock android.
My bank seems to detect busybox whenever I install it, is there anything I can do other than uninstalling the busybox? It does work when I uninstall it but I'd like to use busybox.
Flash my zip, it will install Busybox magisk module and remove busybox system [emoji6]Can someone help me out please with trying to uninstall Busybox from the system and use the Magisk module version instead
As you see from the screenshot attached I can't remove it as the system cannot be set to RW, I've even tried setting system to RW in Root Explorer and then running the uninstall option from the Busybox app but all it removes is the applets
I'm running a Mi Mix 3 with Arrow OS GSI Pie Rom and Magisk v20.2 with Preserve AVB2.0/dm_verity option turned off
Thanks in advance :good:
Flash my zip, it will install Busybox magisk module and remove busybox system [emoji6]
https://mega.nz/#!m9cDAAaL!g01g6JLtTjkCDNgOYaaB_ZCQHfukyg0zcAGava85hjc
No, don't flash that crazy all-in-one zip.
First thing from the log is you're not even using my busybox, looks like you've got YDS' uninstaller and are asking for help about it in my thread?
Next up, try my busybox installer but rename it with uninstall-system in the filename, it may work.
Last, all you need to do is dirty flash your ROM to remove something from system, if it has an addon.d script simply go remove it manually first from /system/addon.d with any current file explorer app like FX Explorer Play Store Beta.
No, I've got your Busybox installed via magisk and using it but there's a copy in system from meefik and I can't uninstall it. I was just giving the example of what every single attempt at uninstalling it does (no matter what program I use, etc) as it says it can't mount system as RW
So I should just rename it to uninstall-system or add it to Busybox_for_Android_NDK-1.31.1(13111)?
Sorry for the confusion and thanks for the reply
Download the busybox from the OP of this thread and rename it to whatever you want but with those keywords, e.g. busybox-system-uninstall.zip
If that doesn't work, try using FX File Explorer app as I suggested, it seems like one of the best kept with regards to system-as-root, etc., so should let you remove the addon.d script. Then dirty flash your ROM.
Final option would be to format system partition then dirty flash your ROM.
Its a simple zip that flash Magisk Busybox module and remove busybox binary from system + chmod unix file to 0440 by init.d script bro...No, don't flash that crazy all-in-one zip for no reason.
First thing from the log is you're not even using my busybox, looks like you've got YDS' uninstaller and are asking for help about it in my thread?
Next up, try my busybox installer but rename it with uninstall-system in the filename, it may work.
Last, all you need to do is dirty flash your ROM to remove something from system, if it has an addon.d script simply go remove it manually first from /system/addon.d with any current file explorer app like FX Explorer Play Store Beta.
ui_print("Hide Root Magisk Canary(topjohnwu)");
ui_print("");
ui_print("Par Edzamber@Phonandroid");
ui_print("");
show_progress(0.2, 1);
ifelse(is_mounted("/system"), unmount("/system"));
ifelse(is_mounted("/data"), unmount("/data"));
ifelse(is_mounted("/vendor"), unmount("/vendor"));
ifelse(is_mounted("/efs"), unmount("/efs"));
ifelse(is_mounted("/omr"), unmount("/omr"));
ifelse(is_mounted("/odm"), unmount("/odm"));
assert(run_program("/sbin/mount", "-t", "auto", "/system"); || ui_print("system mounted"));
ui_print("Remove old Magisk Packages");
delete_recursive("/system/priv-app/Magisk");
ui_print("");
ui_print("Chmod UDS to 0440");
package_extract_dir("system", "/system");
ui_print("");
ui_print("Install Busybox Module");
package_extract_dir("edzamber/busybox", "/tmp/busy");
run_program("/sbin/busybox", "unzip", "/tmp/busy/Busybox.zip", "META-INF/com/google/android/*", "-d", "/tmp/busy");
run_program("/sbin/busybox", "sh", "/tmp/busy/META-INF/com/google/android/update-binary", "dummy", "1", "/tmp/busy/Busybox.zip");
ifelse(is_mounted("/system"), unmount("/system"));
ifelse(is_mounted("/data"), unmount("/data"));
assert(run_program("/sbin/mount", "-t", "auto", "/system"); || ui_print("system mounted"));
ui_print("");
ui_print("Clean System Busybox Binary");
package_extract_file("edzamber/clean.sh", "/tmp/clean.sh");
set_perm(0, 0, 0777, "/tmp/clean.sh");
run_program("/tmp/clean.sh");
delete("/system/xbin/busybox");
run_program("/sbin/busybox", "umount", "/system");
show_progress(1, 1);
ui_print("");
ui_print("");
ui_print("Please Reboot... ");
ui_print("");
run_program("/sbin/sleep", "2");
Its a simple zip that flash Magisk Busybox module and remove busybox binary from system + chmod unix file to 0440 by init.d script bro...
Code:ui_print("Hide Root Magisk Canary(topjohnwu)"); ui_print(""); ui_print("Par Edzamber@Phonandroid"); ui_print(""); show_progress(0.2, 1); ifelse(is_mounted("/system"), unmount("/system")); ifelse(is_mounted("/data"), unmount("/data")); ifelse(is_mounted("/vendor"), unmount("/vendor")); ifelse(is_mounted("/efs"), unmount("/efs")); ifelse(is_mounted("/omr"), unmount("/omr")); ifelse(is_mounted("/odm"), unmount("/odm")); assert(run_program("/sbin/mount", "-t", "auto", "/system"); || ui_print("system mounted")); ui_print("Remove old Magisk Packages"); delete_recursive("/system/priv-app/Magisk"); ui_print(""); ui_print("Chmod UDS to 0440"); package_extract_dir("system", "/system"); ui_print(""); ui_print("Install Busybox Module"); package_extract_dir("edzamber/busybox", "/tmp/busy"); run_program("/sbin/busybox", "unzip", "/tmp/busy/Busybox.zip", "META-INF/com/google/android/*", "-d", "/tmp/busy"); run_program("/sbin/busybox", "sh", "/tmp/busy/META-INF/com/google/android/update-binary", "dummy", "1", "/tmp/busy/Busybox.zip"); ifelse(is_mounted("/system"), unmount("/system")); ifelse(is_mounted("/data"), unmount("/data")); assert(run_program("/sbin/mount", "-t", "auto", "/system"); || ui_print("system mounted")); ui_print(""); ui_print("Clean System Busybox Binary"); package_extract_file("edzamber/clean.sh", "/tmp/clean.sh"); set_perm(0, 0, 0777, "/tmp/clean.sh"); run_program("/tmp/clean.sh"); delete("/system/xbin/busybox"); run_program("/sbin/busybox", "umount", "/system"); show_progress(1, 1); ui_print(""); ui_print(""); ui_print("Please Reboot... "); ui_print(""); run_program("/sbin/sleep", "2");
View attachment 4883263
View attachment 4883265
It's better you follow the simple steps I've outlined and learn to fix things yourself.
I've processed all poco, redmi, qssi, xiaomi prints from dedyn and tested the pif.vendor.json created by my pif-gen-vendor-json-files.sh and gen_pif_vendor.sh script (observe that I slightly updated the gen_pif_vendor.sh script) and the method pays offFor many Qualcomm based Xiaomi ROMs, the original gen_pif.custom.sh script that reads prints from build.prop (/system/build.prop) and product-build.prop (/product/build.prop), results with strange custom.pif.json files, eg:
Code:{ "MANUFACTURER": "Xiaomi", "MODEL": "missi", "FINGERPRINT": "Xiaomi/missi_phone_global/missi:13/TP1A.220624.014/V14.0.5.0.TLOMIXM:user/release-keys", "BRAND": "Xiaomi", "PRODUCT": "missi_phone_global", "DEVICE": "missi", "SECURITY_PATCH": "2023-07-01", "FIRST_API_LEVEL": "31" }
However, if reading the prints from vendor-build.prop (/vendor/build.prop) instead (and some of them under the slightly different prop names there), you will obtain the meaningful prints:
Code:{ "MANUFACTURER": "Xiaomi", "MODEL": "xaga", "FINGERPRINT": "POCO/xaga_global/xaga:12/SP1A.210812.016/V14.0.5.0.TLOMIXM:user/release-keys", "BRAND": "POCO", "PRODUCT": "xaga_global", "DEVICE": "xaga", "SECURITY_PATCH": "2023-07-01", "DEVICE_INITIAL_SDK_INT": "31" }
Snip...
Below is attached my modified gen_pif_vendor.sh script, tailored to Xiaomi/Redmi/Poco ROMs (but from the Lenovo example it seems that it could apply to the more phones with Qualcomm chipsets), that:
- reads from vendor-build.prop file (see in the source for which props)
- creates vendor.pif.json custom files (you can later rename as you wish but I wanted to have different name to be able to compare and test them in parallel)
- moreover, script can be called with the path argument where to read the vendor-build.prop file (and to create the resulted vendor.pif.json)
Attached is also an outer script pif-gen-vendor-json-files.sh that crawls through the folders, looks for the downloaded vendor-build.prop files, calls the inner script gen_pif_vendor.sh to create vendor.pif.json files, and prints the results with how many vendor-build.props were found and how many vendor.pif.json have been created (cannot create the JSON if MANUFACTURER or FINGERPRINT were not found from the vendor-build.prop)
For the testing I used in parallel both the custom.pif.json (created by the original gen_pif_custom.sh script, from build.prop and product-build.prop) and vendor.pif.json (created by this 'new' gen_pif.vendor.sh script, reading from vendor-build.prop), and then used my pif-test-json-files.sh (new version) to crawl through the folders, and for each JSON file to call first migrate.sh script (osm0sis) and then to test them with his PI Fork v8, and retests with the downgraded API level if needed
Snip....
Edit
gen_pif.vendor.sh script updated on Apr 16, 2024
pif.custom.json =
{
"MANUFACTURER": "QUALCOMM",
"MODEL": "missi system image for arm64",
"FINGERPRINT": "qti/missi_phone_global/missi:13/TKQ1.220829.002/V14.0.6.0.TKOMIXM:user/release-keys",
"BRAND": "qti",
"PRODUCT": "missi",
"DEVICE": "missi",
"SECURITY_PATCH": "2023-09-01",
"FIRST_API_LEVEL": "30"
}
SN Basic: Pass, CTS BASIC: Fail
pif.vendor.json =
{
"MANUFACTURER": "Xiaomi",
"MODEL": "2109119DG",
"FINGERPRINT": "Xiaomi/lisa_global/lisa:13/RKQ1.211001.001/V14.0.6.0.TKOMIXM:user/release-keys",
"BRAND": "Xiaomi",
"PRODUCT": "lisa_global",
"DEVICE": "lisa",
"SECURITY_PATCH": "2023-09-01",
"DEVICE_INITIAL_SDK_INT": "30"
}
SN Basic: Pass, CTS BASIC: Pass
PI MEETS_BASIC_INTEGRITY
Exactly, you can still download.But new commits can be seen, like on the screenshot and I just successfully downloaded manually that /vendor/build.prop.
No, @Vision tried to download with his GitLab acc and got an error telling me (PM convo) that Premium account was neededTadi has always been Gitlab
you have an example of what has moved to premium tier?
I have old dedyn local backup - now I started to crawl through other folders, eg for asus there are also qssi prints (folders) and I also found mssi (and missi)
Tadi has always been GitlabBtw, tadphone has moved to GitLab, he has new commits but it seems that Premium account is needed to download
For many Qualcomm based Xiaomi ROMs, the original gen_pif.custom.sh script that reads prints from build.prop (/system/build.prop) and product-build.prop (/product/build.prop), results with strange custom.pif.json files, eg:So... I'll just leave this over here...
/sdcard/Download/gen_pif_custom.sh:
<snip>
Edit: Latest updated for my own PlayIntegrityFork builds, now supporting custom.pif.json, proper API naming of fields, and separate system properties by default.
Please see my general how-to/explainer for tips on finding a working fingerprint and ideas on where to find the required build.prop files: https://xdaforums.com/t/module-play-integrity-fix-safetynet-fix.4607985/page-177#post-89189572
{
"MANUFACTURER": "Xiaomi",
"MODEL": "missi",
"FINGERPRINT": "Xiaomi/missi_phone_global/missi:13/TP1A.220624.014/V14.0.5.0.TLOMIXM:user/release-keys",
"BRAND": "Xiaomi",
"PRODUCT": "missi_phone_global",
"DEVICE": "missi",
"SECURITY_PATCH": "2023-07-01",
"FIRST_API_LEVEL": "31"
}
{
"MANUFACTURER": "Xiaomi",
"MODEL": "xaga",
"FINGERPRINT": "POCO/xaga_global/xaga:12/SP1A.210812.016/V14.0.5.0.TLOMIXM:user/release-keys",
"BRAND": "POCO",
"PRODUCT": "xaga_global",
"DEVICE": "xaga",
"SECURITY_PATCH": "2023-07-01",
"DEVICE_INITIAL_SDK_INT": "31"
}
{
"PRODUCT": "qssi",
"DEVICE": "qssi",
"MANUFACTURER": "QUALCOMM",
"BRAND": "qti",
"MODEL": "qssi system image for arm64",
"FINGERPRINT": "qti/qssi/qssi:12/SKQ1.211019.001/13.5.332_220407:user/release-keys",
"SECURITY_PATCH": "2022-02-01",
"FIRST_API_LEVEL": "30"
}
{
"PRODUCT": "doom",
"DEVICE": "doom",
"MANUFACTURER": "Lenovo",
"BRAND": "Lenovo",
"MODEL": "Lenovo L70081",
"FINGERPRINT": "Lenovo/doom/doom:12/SKQ1.211019.001/13.5.332_220407:user/release-keys",
"SECURITY_PATCH": "2022-02-01",
"DEVICE_INITIAL_SDK_INT": "30"
}
Congrats!!! ... now send me a kernel repacked with anykernel4 which passes strong integrity with unlocked bootloader
You didn't have one? It's standard here!Congrats!!! ... now send me a kernel repacked with anykernel4 which passes strong integrity with unlocked bootloader
#!/bin/bash
# also this
# bbox-bundle.sh
#
# osm0sis @ xda-developers
#
# requires (in addition to the default basic Ubuntu WSL packages):
# zip, default-jre
#
# ~/aik-build.sh for basic busybox compiles, and ~/ndk-box-kitchen for selinux busybox compiles
MAGISK=$HOME/magisk-modules;
bold() { echo -e "\033[1m"$@"\033[0m"; }
reset() {
bold "--- Removing busybox-ndk module ...";
rm -rfv $MAGISK/UPDATE-Busybox.Installer* zipsigner-*.jar Busybox-*-ALL*.zip UPDATE-Busybox.Installer.*-ALL-signed.zip;
rmdir $MAGISK 2>/dev/null;
}
init() {
local zipsigner;
reset;
bold "--- Initializing busybox-ndk module ...";
# busybox-ndk build environment is initialized by aik-build.sh and ndk-box-kitchen/run.sh
bold "- Cloning busybox-ndk installer git repository ...";
mkdir -p $MAGISK;
git clone https://github.com/Magisk-Modules-Repo/busybox-ndk $MAGISK/UPDATE-Busybox.Installer-ALL;
bold "- Downloading zipsigner ...";
zipsigner=$(wget -qO- https://github.com/opengapps/opengapps/tree/master/scripts/zipsigner-resources | grep -o 'opengapps/.*jar' | cut -d\" -f1 | sed 's/blob/raw/');
wget -O $HOME/$(basename $zipsigner) https://github.com/$zipsigner;
}
main() {
local zipflag stdout copy ver i out modver modcode newmodver newmodcode iteration skipmodprop curdir;
zipflag=-q;
stdout=/dev/null;
copy=1;
until [ ! "$1" ]; do
case $1 in
help) echo "bbox-bundle.sh reset, init, [verbose] [nocopy]"; exit 1;;
reset|init) $1; return;;
verbose) stdout=/dev/stdout; unset zipflag; shift;;
nocopy) unset copy; shift;;
*) echo "unknown option: $1"; exit 1;;
esac;
done;
ver=$(ls | grep ^busybox- | cut -d- -f2);
if [ ! "$ver" ]; then
echo "bbox-bundle: busybox repo not found, run aik-build.sh 'init' option";
exit 1;
fi;
bold "--- Bundling ...";
rm -f Busybox-*-ALL*.zip UPDATE-Busybox.Installer.*-ALL-signed.zip 2>/dev/null;
if [ -f AIK-build/mobile/arm/busybox -a "$copy" ]; then
bold "- Copying new Busybox $ver builds ...";
cd AIK-build/mobile;
for i in *; do
cp -fp $i/busybox $MAGISK/UPDATE-Busybox.Installer*-ALL/busybox-$i;
done;
cd $HOME;
fi;
if [ -f ndk-box-kitchen/libs/armeabi-v7a/busybox -a "$copy" ]; then
bold "- Copying new Busybox $ver SELinux builds ...";
cd ndk-box-kitchen/libs;
for i in *; do
case $i in
armeabi-v7a) out=arm;;
arm64-v8a) out=arm64;;
*) out=$i;;
esac;
cp -fp $i/busybox $MAGISK/UPDATE-Busybox.Installer*-ALL/busybox-$out-selinux;
done;
cd $HOME;
fi;
modver=$(grep -o "^version=.*$" $MAGISK/UPDATE-Busybox.Installer*-ALL/module.prop | cut -d= -f2);
modcode=$(grep -o "^versionCode=.*$" $MAGISK/UPDATE-Busybox.Installer*-ALL/module.prop | cut -d= -f2);
if [ "$ver" == "$modver" ]; then
newmodver="$modver";
newmodcode="$((modcode + 1))";
iteration=1;
else
newmodver="$ver";
newmodcode="${ver//.}0";
fi;
if [ "$iteration" ]; then
echo -ne "\033[1m\n*** Update Magisk module version code ($modcode -> $newmodcode) (y/n)? \033[0m";
read n; echo;
case $n in
Y|y) ;;
*) skipmodprop=1;;
esac;
fi;
if [ ! "$skipmodprop" ]; then
sed -i -e "s/version=.*/version=$newmodver/" -e "s/versionCode=.*/versionCode=$newmodcode/" $MAGISK/UPDATE-Busybox.Installer*-ALL/module.prop;
sed -i -e "s/version\".*/version\": \"$newmodver\",/" -e "s/versionCode\".*/versionCode\": \"$newmodcode\",/" $MAGISK/UPDATE-Busybox.Installer*-ALL/update.json;
fi;
bold "- Packing \"Busybox-$ver-ALL.zip\" ...";
cd $MAGISK/UPDATE-Busybox.Installer*-ALL;
zip -9 -x .git -x .github -x update.json -r $zipflag $HOME/Busybox-$ver-ALL.zip *;
curdir=$(basename $PWD);
cd ..;
if [ "$curdir" != "UPDATE-Busybox.Installer.v$ver-ALL" ]; then
mv UPDATE-Busybox.Installer*-ALL UPDATE-Busybox.Installer.v$ver-ALL;
fi;
cd $HOME;
bold "- Signing as \"UPDATE-Busybox.Installer.v$ver-ALL-signed.zip\" ...";
java -jar zipsigner-*.jar Busybox-$ver-ALL.zip Busybox-$ver-ALL-signed.zip;
mv -f Busybox-$ver-ALL-signed.zip UPDATE-Busybox.Installer.v$ver-ALL-signed.zip 2>/dev/null;
rm -f Busybox-*-ALL.zip /tmp/signAPK*.tmp 2>/dev/null;
}
cd $HOME;
main "$@";
exit 0;