Final commit
|
@ -0,0 +1,2 @@
|
|||
*.apk filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2021-2023 Secret Vault
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,22 @@
|
|||
#+title: README
|
||||
#+author: Sidney PEPO (aka sysb1n)
|
||||
#+date: [2023-06-27 Tue]
|
||||
|
||||
#+begin_center
|
||||
#+HTML: <p align="center"><img src="visual_identity/0.png" alt="Steins;Zapp logo" height="150"><p>
|
||||
#+end_center
|
||||
|
||||
* Steins;Zapp D-Mailer
|
||||
It's hard to announce that, after 2 years of development, this project will be terminated and closed here. The two main reasons are:
|
||||
|
||||
1. The Steins;Zapp base apk (~com.soula2~) isn't updated very often: everyone who uses Steins;Zapp can't use it for a long period due to the lack of updates (WhatsApp obliges you to use it always in the latest version); and
|
||||
2. WhatsApp keeps *offuscating* and *bloating* its own code in *EVERY SINGLE UPDATE*: this makes the Steins;Zapp updates nearly *impossible* to do and maintain;
|
||||
|
||||
Some day a Steins;Zapp "descendent" may be developed, but this isn't a promise. We apologize and we hope this project was so important to you as it was for us.
|
||||
-----
|
||||
|
||||
#+begin_quote
|
||||
Made in [[https://matrix.to/#/#secret-vault:matrix.thisisjoes.site][FG Lab (aka Secret Vault)]]
|
||||
#+end_quote
|
||||
|
||||
/~ El Psy Kongroo/
|
|
@ -0,0 +1,151 @@
|
|||
#!/usr/bin/env sh
|
||||
##
|
||||
# builder.sh
|
||||
#
|
||||
# Authors: Sidney PEPO (aka sysb1n)
|
||||
# Last change: 2022-10-23
|
||||
#
|
||||
# Description: that's Steins;Zapp auto-builder script. Guide yourself
|
||||
# by reading "status" function messages present in code after some
|
||||
# commands or Shell Script instructions.
|
||||
#
|
||||
# ~El Psy Kongroo
|
||||
##
|
||||
|
||||
# Status variables to be uses at "status" function.
|
||||
normal_text="\e[0m"
|
||||
info="\n\e[1;34m[i]${normal_text}"
|
||||
success="\e[1;32m[+]${normal_text}"
|
||||
error="\e[1;31m[!]${normal_text}"
|
||||
|
||||
# Those variable are used to make Steins;Zapp file updates easier, for
|
||||
# example, on release name, base apk, etc.
|
||||
release="Makise Kurisu"
|
||||
wago_ver="v0.22.10L"
|
||||
base_apk="./dependencies/com.soula2_${wago_ver}.apk"
|
||||
base_dir="source"
|
||||
apktool="./dependencies/apktool_2.6.1.jar"
|
||||
zipalign="./dependencies/zipalign"
|
||||
apksigner="./dependencies/apksigner.jar"
|
||||
|
||||
# After or before any procedure, this function is called to present an
|
||||
# information about it.
|
||||
status() {
|
||||
s_value=${1}
|
||||
s_message=${2}
|
||||
|
||||
echo -e "${s_message}"
|
||||
if [[ ${s_value} -ne 0 ]]; then
|
||||
exit ${s_value}
|
||||
fi
|
||||
}
|
||||
|
||||
status 0 "${info} Checking files and decompiling base APK..."
|
||||
if [[ ! -d "./dependencies" ]] || [[ ! -d "./patches" ]]; then
|
||||
status 1 "${error} Missing files. Try pull the repository."
|
||||
fi
|
||||
status 0 "${success} Files successfully checked."
|
||||
if [[ -d "./${base_dir}" ]]; then
|
||||
rm -rf "./${base_dir}" > /dev/null
|
||||
fi
|
||||
java -jar ${apktool} -q d ${base_apk} -o ${base_dir}
|
||||
if [[ ${?} -ne 0 ]]; then
|
||||
status ${?} "${error} Failed to decompile."
|
||||
fi
|
||||
status 0 "${success} Base APK successfully decompiled."
|
||||
|
||||
status 0 "${info} Removing bloated files..."
|
||||
# TODO - Fix removing Goodle's bloated shit.
|
||||
# cd ${base_dir}/
|
||||
# rm -r unknown/* 2> /dev/null
|
||||
# cd - > /dev/null
|
||||
|
||||
# Important non-bloated file list that SHOULD be previously backed up
|
||||
# to patches/assets/ directory:
|
||||
# - ./${base_dir}/assets/cldr_strings.pack
|
||||
# - ./${base_dir}/assets/country_names_en.tsv
|
||||
# - ./${base_dir}/assets/ephemeral_settings_lottie_animation.lottie
|
||||
# - ./${base_dir}/assets/version.properties
|
||||
# - ./${base_dir}/assets/compressed/armeabi-v7a/
|
||||
# - ./${base_dir}/assets/compressed/emojis/
|
||||
# - ./${base_dir}/assets/compressed/strings/cldr_strings.spk.br
|
||||
# - ./${base_dir}/assets/compressed/strings/strings_en.spk.br
|
||||
# - ./${base_dir}/assets/emoji/
|
||||
# - ./${base_dir}/assets/fonts/
|
||||
# - ./${base_dir}/assets/graphics/
|
||||
# - ./${base_dir}/assets/npci/
|
||||
rm -r ./${base_dir}/assets/* 2> /dev/null
|
||||
status ${?} "${success} Removed bloated files."
|
||||
./dependencies/value_list.sh source 2> /dev/null
|
||||
status 0 "${success} Removed translations files."
|
||||
|
||||
status 0 "${info} Copying modified files..."
|
||||
cp -rf ./patches/* ./${base_dir} 2> /dev/null
|
||||
status ${?} "${success} Patches copied and applied."
|
||||
./dependencies/light_theme.sh ${base_dir}
|
||||
status 0 "${success} Light theme copied and applied."
|
||||
./dependencies/dark_theme.sh ${base_dir}
|
||||
status 0 "${success} Dark theme copied and applied."
|
||||
|
||||
# Cleaning output directory.
|
||||
rm -rf ./steins-zapp/* > /dev/null
|
||||
# Declaring an array and storing the Steins;Zapp symbols in it.
|
||||
declare -A symbols
|
||||
symbols[0]="0"
|
||||
symbols[1]="β"
|
||||
symbols[2]="α"
|
||||
symbols[3]="γ"
|
||||
symbols[4]="δ"
|
||||
for divergence in {0..4}; do
|
||||
status 0 "${info} Building, aligning and signing com.steinszapp${divergence}.apk..."
|
||||
cp -r ./${base_dir} ./build
|
||||
./dependencies/general.sh build ${divergence}
|
||||
|
||||
for apk_paths in $(grep -s -r -o "com\.soula2" ./build | cut -d ":" -f 1 | uniq); do
|
||||
sed -i "s/com\.soula2/com\.steinszapp${divergence}/g" ${apk_paths} > /dev/null
|
||||
done
|
||||
for smali_paths in $(grep -s -r -o "Lcom\/soula2" ./build | cut -d ":" -f 1 | uniq); do
|
||||
sed -i "s/Lcom\/soula2/Lcom\/steinszapp${divergence}/g" ${smali_paths} > /dev/null
|
||||
done
|
||||
sed -i "s/<string name=\"launcher_app_name\">WhatsApp<\/string>/<string name=\"launcher_app_name\">${symbols[${divergence}]} Steins;Zapp ${release}<\/string>/g" ./build/res/values/strings.xml > /dev/null
|
||||
sed -i "s/<string name=\"wa_go_name\">Soula2<\/string>/<string name=\"wa_go_name\">${symbols[${divergence}]} Steins;Zapp ${release}<\/string>/g" ./build/res/values-v1/strings.xml > /dev/null
|
||||
sed -i "s/<string name=\"wa_go_version\">${wago_ver}<\/string>/<string name=\"wa_go_version\">${release}<\/string>/g" ./build/res/values-v1/strings.xml > /dev/null
|
||||
sed -i "s/<string name=\"wa_go_name_title\">Steins;Zapp ${wago_ver}<\/string>/<string name=\"wa_go_name_title\">Steins;Zapp ${release}<\/string>/g" ./build/res/values-v1/strings.xml > /dev/null
|
||||
java -jar ${apktool} -q b ./build -o build.apk
|
||||
if [[ ${?} -ne 0 ]]; then
|
||||
status ${?} "${error} Failed to build."
|
||||
break
|
||||
fi
|
||||
status ${?} "${success} Successfully builded."
|
||||
${zipalign} -p -f -v 4 build.apk ./steins-zapp/com.steinszapp${divergence}.apk > /dev/null
|
||||
if [[ ${?} -ne 0 ]]; then
|
||||
status ${?} "${error} Failed to align."
|
||||
break
|
||||
fi
|
||||
status ${?} "${success} Successfully aligned."
|
||||
java -jar ${apksigner} sign --ks ./dependencies/key.keystore --ks-key-alias steins-zapp --ks-pass pass:elpsykongroo ./steins-zapp/com.steinszapp${divergence}.apk
|
||||
if [[ ${?} -ne 0 ]]; then
|
||||
status ${?} "${error} Failed to sign."
|
||||
break
|
||||
fi
|
||||
status ${?} "${success} Successfully signed."
|
||||
|
||||
# Removing the generated temp files.
|
||||
rm -rf ./steins-zapp/com.steinszapp${divergence}.apk.idsig ./build.apk ./build > /dev/null
|
||||
|
||||
status ${?} "${success} com.steinszapp${divergence}.apk done!"
|
||||
done
|
||||
status 0 "${info} All APK's were successfully generated!"
|
||||
|
||||
status 0 "${info} Generating CHECKSUM and zipping files..."
|
||||
touch CHECKSUM
|
||||
echo "SHA256SUM |FILENAME" > CHECKSUM
|
||||
sha256sum ./steins-zapp/* | sed "s/\.\/steins-zapp\///g" >> CHECKSUM
|
||||
status ${?} "${success} CHECKSUM successfully generated."
|
||||
mv CHECKSUM ./steins-zapp
|
||||
zip -q steins-zapp ./steins-zapp/*
|
||||
status ${?} "${success} Files successfully ziped."
|
||||
mv ./steins-zapp.zip ./steins-zapp
|
||||
|
||||
status 0 "${info} Everything is done! APK's are into ./steins-zapp. Enjoy your Steins;Zapp!"
|
||||
status 0 "\e[3m~El Psy Kongroo${normal_text}"
|
|
@ -0,0 +1,54 @@
|
|||
#!/usr/bin/env sh
|
||||
##
|
||||
# dependencies/dark_theme.sh
|
||||
#
|
||||
# Authors: Sidney PEPO (aka sysb1n)
|
||||
# Last change: 2022-07-25
|
||||
#
|
||||
# Description: just a script to auto-copy dark theme images.
|
||||
#
|
||||
# ~El Psy Kongroo
|
||||
##
|
||||
|
||||
# Checking if a value was parsed.
|
||||
dir=${1}
|
||||
if [[ -z ${dir} ]]; then
|
||||
echo -e "You must specify the sources directory name WITHOUT bars or any path special character!\n"
|
||||
echo "Wrong: ./directory, directory/ or ./directory/"
|
||||
echo "Correct: directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Copying dark theme images.
|
||||
cp ./dependencies/dark_theme/balloon_incoming_normal.9.png ./${dir}/res/drawable-night-hdpi/balloon_incoming_normal.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_normal.9.png ./${dir}/res/drawable-night-xhdpi/balloon_incoming_normal.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_normal.9.png ./${dir}/res/drawable-night-xxhdpi/balloon_incoming_normal.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_normal_ext.9.png ./${dir}/res/drawable-night-hdpi/balloon_incoming_normal_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_normal_ext.9.png ./${dir}/res/drawable-night-xhdpi/balloon_incoming_normal_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_normal_ext.9.png ./${dir}/res/drawable-night-xxhdpi/balloon_incoming_normal_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_normal_stkr.9.png ./${dir}/res/drawable-night-hdpi/balloon_incoming_normal_stkr.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_normal_stkr.9.png ./${dir}/res/drawable-night-xxhdpi/balloon_incoming_normal_stkr.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_pressed.9.png ./${dir}/res/drawable-night-hdpi/balloon_incoming_pressed.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_pressed.9.png ./${dir}/res/drawable-night-xhdpi/balloon_incoming_pressed.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_pressed.9.png ./${dir}/res/drawable-night-xxhdpi/balloon_incoming_pressed.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_pressed_ext.9.png ./${dir}/res/drawable-night-hdpi/balloon_incoming_pressed_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_pressed_ext.9.png ./${dir}/res/drawable-night-xhdpi/balloon_incoming_pressed_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_incoming_pressed_ext.9.png ./${dir}/res/drawable-night-xxhdpi/balloon_incoming_pressed_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_normal.9.png ./${dir}/res/drawable-night-hdpi/balloon_outgoing_normal.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_normal.9.png ./${dir}/res/drawable-night-xhdpi/balloon_outgoing_normal.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_normal.9.png ./${dir}/res/drawable-night-xxhdpi/balloon_outgoing_normal.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_normal_ext.9.png ./${dir}/res/drawable-night-hdpi/balloon_outgoing_normal_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_normal_ext.9.png ./${dir}/res/drawable-night-xhdpi/balloon_outgoing_normal_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_normal_ext.9.png ./${dir}/res/drawable-night-xxhdpi/balloon_outgoing_normal_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_normal_stkr.9.png ./${dir}/res/drawable-night-hdpi/balloon_outgoing_normal_stkr.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_normal_stkr.9.png ./${dir}/res/drawable-night-xxhdpi/balloon_outgoing_normal_stkr.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_pressed.9.png ./${dir}/res/drawable-night-hdpi/balloon_outgoing_pressed.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_pressed.9.png ./${dir}/res/drawable-night-xhdpi/balloon_outgoing_pressed.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_pressed.9.png ./${dir}/res/drawable-night-xxhdpi/balloon_outgoing_pressed.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_pressed_ext.9.png ./${dir}/res/drawable-night-hdpi/balloon_outgoing_pressed_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_pressed_ext.9.png ./${dir}/res/drawable-night-xhdpi/balloon_outgoing_pressed_ext.9.png
|
||||
cp ./dependencies/dark_theme/balloon_outgoing_pressed_ext.9.png ./${dir}/res/drawable-night-xxhdpi/balloon_outgoing_pressed_ext.9.png
|
||||
cp ./dependencies/dark_theme/default_wallpaper.png ./${dir}/res/drawable-night-hdpi/default_wallpaper.png
|
||||
cp ./dependencies/dark_theme/default_wallpaper.png ./${dir}/res/drawable-night-xxhdpi/default_wallpaper.png
|
||||
cp ./dependencies/dark_theme/ib_new_*.png ./${dir}/res/drawable-night-hdpi/
|
||||
cp ./dependencies/dark_theme/ib_new_*.png ./${dir}/res/drawable-night-xxhdpi/
|
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.1 MiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 3.1 KiB |
|
@ -0,0 +1,60 @@
|
|||
#!/usr/bin/env sh
|
||||
##
|
||||
# dependencies/general.sh
|
||||
#
|
||||
# Authors: Sidney PEPO (aka sysb1n)
|
||||
# Last change: 2022-07-25
|
||||
#
|
||||
# Description: just a script to auto-copy general images.
|
||||
#
|
||||
# ~El Psy Kongroo
|
||||
##
|
||||
|
||||
# Checking if values was parsed.
|
||||
dir=${1}
|
||||
divergence=${2}
|
||||
if [[ -z ${dir} ]]; then
|
||||
echo -e "You must specify the sources directory name WITHOUT bars or any path special character!\n"
|
||||
echo "Wrong: ./directory, directory/ or ./directory/"
|
||||
echo "Correct: directory"
|
||||
exit 1
|
||||
elif [[ -z ${divergence} ]] || [[ ${divergence} -lt 0 ]] || [[ ${divergence} -gt 4 ]]; then
|
||||
echo -e "You must specify the divergence number, greater or equal than 0 and less or equal than 4\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Copying general images.
|
||||
cp ./dependencies/general/${divergence}icon.png ./${dir}/res/mipmap-hdpi/icon.png
|
||||
cp ./dependencies/general/${divergence}icon.png ./${dir}/res/mipmap-xhdpi/icon.png
|
||||
cp ./dependencies/general/${divergence}icon.png ./${dir}/res/mipmap-xxhdpi/icon.png
|
||||
cp ./dependencies/general/${divergence}icon.png ./${dir}/res/mipmap-xxxhdpi/icon.png
|
||||
cp ./dependencies/general/${divergence}ic_wa_foreground.png ./${dir}/res/mipmap-hdpi-v26/ic_wa_foreground.png
|
||||
cp ./dependencies/general/${divergence}ic_wa_foreground.png ./${dir}/res/mipmap-xhdpi-v26/ic_wa_foreground.png
|
||||
cp ./dependencies/general/${divergence}ic_wa_foreground.png ./${dir}/res/mipmap-xxhdpi-v26/ic_wa_foreground.png
|
||||
cp ./dependencies/general/${divergence}ic_wa_foreground.png ./${dir}/res/mipmap-xxxhdpi-v26/ic_wa_foreground.png
|
||||
cp ./dependencies/general/${divergence}splash_logo.png ./${dir}/res/drawable-hdpi/splash_logo.png
|
||||
cp ./dependencies/general/${divergence}splash_logo.png ./${dir}/res/drawable-mdpi/splash_logo.png
|
||||
cp ./dependencies/general/${divergence}splash_logo.png ./${dir}/res/drawable-night-hdpi/splash_logo.png
|
||||
cp ./dependencies/general/${divergence}splash_logo.png ./${dir}/res/drawable-night-mdpi/splash_logo.png
|
||||
cp ./dependencies/general/${divergence}splash_logo.png ./${dir}/res/drawable-night-xhdpi/splash_logo.png
|
||||
cp ./dependencies/general/${divergence}splash_logo.png ./${dir}/res/drawable-night-xxhdpi/splash_logo.png
|
||||
cp ./dependencies/general/${divergence}splash_logo.png ./${dir}/res/drawable-night-xxxhdpi/splash_logo.png
|
||||
cp ./dependencies/general/${divergence}splash_logo.png ./${dir}/res/drawable-xhdpi/splash_logo.png
|
||||
cp ./dependencies/general/${divergence}splash_logo.png ./${dir}/res/drawable-xxhdpi/splash_logo.png
|
||||
cp ./dependencies/general/${divergence}splash_logo.png ./${dir}/res/drawable-xxxhdpi/splash_logo.png
|
||||
cp ./dependencies/general/about_logo.png ./${dir}/res/drawable-hdpi/about_logo.png
|
||||
cp ./dependencies/general/about_logo.png ./${dir}/res/drawable-xxhdpi/about_logo.png
|
||||
cp ./dependencies/general/background.jpg ./${dir}/res/drawable-hdpi/background.jpg
|
||||
cp ./dependencies/general/background.jpg ./${dir}/res/drawable-xxhdpi/background.jpg
|
||||
cp ./dependencies/general/backgroundl.jpg ./${dir}/res/drawable-land-hdpi/background.jpg
|
||||
cp ./dependencies/general/ic_wa_background.png ./${dir}/res/mipmap-hdpi-v26/ic_wa_background.png
|
||||
cp ./dependencies/general/ic_wa_background.png ./${dir}/res/mipmap-xhdpi-v26/ic_wa_background.png
|
||||
cp ./dependencies/general/ic_wa_background.png ./${dir}/res/mipmap-xxhdpi-v26/ic_wa_background.png
|
||||
cp ./dependencies/general/ic_wa_background.png ./${dir}/res/mipmap-xxxhdpi-v26/ic_wa_background.png
|
||||
cp ./dependencies/general/splash_from_meta.png ./${dir}/res/drawable-hdpi/splash_from_meta.png
|
||||
cp ./dependencies/general/splash_from_meta.png ./${dir}/res/drawable-mdpi/splash_from_meta.png
|
||||
cp ./dependencies/general/splash_from_meta.png ./${dir}/res/drawable-night-hdpi/splash_from_meta.png
|
||||
cp ./dependencies/general/splash_from_meta.png ./${dir}/res/drawable-night-mdpi/splash_from_meta.png
|
||||
cp ./dependencies/general/splash_from_meta.png ./${dir}/res/drawable-night-xxhdpi/splash_from_meta.png
|
||||
cp ./dependencies/general/splash_from_meta.png ./${dir}/res/drawable-xxhdpi/splash_from_meta.png
|
||||
cp ./dependencies/general/splash_from_meta.png ./${dir}/res/drawable-xxxhdpi/splash_from_meta.png
|
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 1.3 MiB |
After Width: | Height: | Size: 2.1 MiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 8.4 KiB |
|
@ -0,0 +1,54 @@
|
|||
#!/usr/bin/env sh
|
||||
##
|
||||
# dependencies/light_theme.sh
|
||||
#
|
||||
# Authors: Sidney PEPO (aka sysb1n)
|
||||
# Last change: 2022-07-25
|
||||
#
|
||||
# Description: just a script to auto-copy light theme images.
|
||||
#
|
||||
# ~El Psy Kongroo
|
||||
##
|
||||
|
||||
# Checking if a value was parsed.
|
||||
dir=${1}
|
||||
if [[ -z ${dir} ]]; then
|
||||
echo -e "You must specify the sources directory name WITHOUT bars or any path special character!\n"
|
||||
echo "Wrong: ./directory, directory/ or ./directory/"
|
||||
echo "Correct: directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Copying light theme images.
|
||||
cp ./dependencies/light_theme/balloon_incoming_normal.9.png ./${dir}/res/drawable-hdpi/balloon_incoming_normal.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_normal.9.png ./${dir}/res/drawable-xhdpi/balloon_incoming_normal.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_normal.9.png ./${dir}/res/drawable-xxhdpi/balloon_incoming_normal.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_normal_ext.9.png ./${dir}/res/drawable-hdpi/balloon_incoming_normal_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_normal_ext.9.png ./${dir}/res/drawable-xhdpi/balloon_incoming_normal_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_normal_ext.9.png ./${dir}/res/drawable-xxhdpi/balloon_incoming_normal_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_normal_stkr.9.png ./${dir}/res/drawable-hdpi/balloon_incoming_normal_stkr.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_normal_stkr.9.png ./${dir}/res/drawable-xxhdpi/balloon_incoming_normal_stkr.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_pressed.9.png ./${dir}/res/drawable-hdpi/balloon_incoming_pressed.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_pressed.9.png ./${dir}/res/drawable-xhdpi/balloon_incoming_pressed.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_pressed.9.png ./${dir}/res/drawable-xxhdpi/balloon_incoming_pressed.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_pressed_ext.9.png ./${dir}/res/drawable-hdpi/balloon_incoming_pressed_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_pressed_ext.9.png ./${dir}/res/drawable-xhdpi/balloon_incoming_pressed_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_incoming_pressed_ext.9.png ./${dir}/res/drawable-xxhdpi/balloon_incoming_pressed_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_normal.9.png ./${dir}/res/drawable-hdpi/balloon_outgoing_normal.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_normal.9.png ./${dir}/res/drawable-xhdpi/balloon_outgoing_normal.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_normal.9.png ./${dir}/res/drawable-xxhdpi/balloon_outgoing_normal.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_normal_ext.9.png ./${dir}/res/drawable-hdpi/balloon_outgoing_normal_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_normal_ext.9.png ./${dir}/res/drawable-xhdpi/balloon_outgoing_normal_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_normal_ext.9.png ./${dir}/res/drawable-xxhdpi/balloon_outgoing_normal_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_normal_stkr.9.png ./${dir}/res/drawable-hdpi/balloon_outgoing_normal_stkr.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_normal_stkr.9.png ./${dir}/res/drawable-xxhdpi/balloon_outgoing_normal_stkr.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_pressed.9.png ./${dir}/res/drawable-hdpi/balloon_outgoing_pressed.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_pressed.9.png ./${dir}/res/drawable-xhdpi/balloon_outgoing_pressed.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_pressed.9.png ./${dir}/res/drawable-xxhdpi/balloon_outgoing_pressed.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_pressed_ext.9.png ./${dir}/res/drawable-hdpi/balloon_outgoing_pressed_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_pressed_ext.9.png ./${dir}/res/drawable-xhdpi/balloon_outgoing_pressed_ext.9.png
|
||||
cp ./dependencies/light_theme/balloon_outgoing_pressed_ext.9.png ./${dir}/res/drawable-xxhdpi/balloon_outgoing_pressed_ext.9.png
|
||||
cp ./dependencies/light_theme/default_wallpaper.png ./${dir}/res/drawable-hdpi/default_wallpaper.png
|
||||
cp ./dependencies/light_theme/default_wallpaper.png ./${dir}/res/drawable-xxhdpi/default_wallpaper.png
|
||||
cp ./dependencies/light_theme/ib_new_*.png ./${dir}/res/drawable-hdpi/
|
||||
cp ./dependencies/light_theme/ib_new_*.png ./${dir}/res/drawable-xxhdpi/
|
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.2 MiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 4.6 KiB |
|
@ -0,0 +1,102 @@
|
|||
#!/usr/bin/env sh
|
||||
##
|
||||
# dependencies/value_list.sh
|
||||
#
|
||||
# Authors: Sidney PEPO (aka sysb1n)
|
||||
# Last change: 2022-07-25
|
||||
#
|
||||
# Description: just a script to auto-remove bloated directories.
|
||||
#
|
||||
# ~El Psy Kongroo
|
||||
##
|
||||
|
||||
# Checking if a value was parsed.
|
||||
dir=${1}
|
||||
if [[ -z ${dir} ]]; then
|
||||
echo -e "You must specify the sources directory name WITHOUT bars or any path special character!\n"
|
||||
echo "Wrong: ./directory, directory/ or ./directory/"
|
||||
echo "Correct: directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Removing bloated directories.
|
||||
rm -r ./${dir}/res/values-af/
|
||||
rm -r ./${dir}/res/values-ar/
|
||||
rm -r ./${dir}/res/values-ar-v1/
|
||||
rm -r ./${dir}/res/values-az/
|
||||
rm -r ./${dir}/res/values-bg/
|
||||
rm -r ./${dir}/res/values-bn/
|
||||
rm -r ./${dir}/res/values-ca/
|
||||
rm -r ./${dir}/res/values-cs/
|
||||
rm -r ./${dir}/res/values-da/
|
||||
rm -r ./${dir}/res/values-de/
|
||||
rm -r ./${dir}/res/values-el/
|
||||
rm -r ./${dir}/res/values-en-rAU/
|
||||
rm -r ./${dir}/res/values-en-rIN/
|
||||
rm -r ./${dir}/res/values-es/
|
||||
rm -r ./${dir}/res/values-es-rMX-v1/
|
||||
rm -r ./${dir}/res/values-es-rUS/
|
||||
rm -r ./${dir}/res/values-et/
|
||||
rm -r ./${dir}/res/values-fa/
|
||||
rm -r ./${dir}/res/values-fa-v1/
|
||||
rm -r ./${dir}/res/values-fi/
|
||||
rm -r ./${dir}/res/values-fr/
|
||||
rm -r ./${dir}/res/values-fr-rCA/
|
||||
rm -r ./${dir}/res/values-ga/
|
||||
rm -r ./${dir}/res/values-gu/
|
||||
rm -r ./${dir}/res/values-h720dp/
|
||||
rm -r ./${dir}/res/values-hdpi/
|
||||
rm -r ./${dir}/res/values-hi/
|
||||
rm -r ./${dir}/res/values-hi-v1/
|
||||
rm -r ./${dir}/res/values-hr/
|
||||
rm -r ./${dir}/res/values-hu/
|
||||
rm -r ./${dir}/res/values-in/
|
||||
rm -r ./${dir}/res/values-it/
|
||||
rm -r ./${dir}/res/values-iw/
|
||||
rm -r ./${dir}/res/values-ja/
|
||||
rm -r ./${dir}/res/values-kk/
|
||||
rm -r ./${dir}/res/values-kn/
|
||||
rm -r ./${dir}/res/values-ko/
|
||||
rm -r ./${dir}/res/values-large/
|
||||
rm -r ./${dir}/res/values-ldltr-v21/
|
||||
rm -r ./${dir}/res/values-lo/
|
||||
rm -r ./${dir}/res/values-lt/
|
||||
rm -r ./${dir}/res/values-lv/
|
||||
rm -r ./${dir}/res/values-mk/
|
||||
rm -r ./${dir}/res/values-ml/
|
||||
rm -r ./${dir}/res/values-mr/
|
||||
rm -r ./${dir}/res/values-ms/
|
||||
rm -r ./${dir}/res/values-nb/
|
||||
rm -r ./${dir}/res/values-nl/
|
||||
rm -r ./${dir}/res/values-pa/
|
||||
rm -r ./${dir}/res/values-pl/
|
||||
rm -r ./${dir}/res/values-port/
|
||||
rm -r ./${dir}/res/values-pt/
|
||||
rm -r ./${dir}/res/values-pt-rBR/
|
||||
rm -r ./${dir}/res/values-pt-rBR-v1/
|
||||
rm -r ./${dir}/res/values-pt-rPT/
|
||||
rm -r ./${dir}/res/values-ro/
|
||||
rm -r ./${dir}/res/values-ru/
|
||||
rm -r ./${dir}/res/values-sk/
|
||||
rm -r ./${dir}/res/values-sl/
|
||||
rm -r ./${dir}/res/values-small/
|
||||
rm -r ./${dir}/res/values-sq/
|
||||
rm -r ./${dir}/res/values-sr/
|
||||
rm -r ./${dir}/res/values-sv/
|
||||
rm -r ./${dir}/res/values-sw/
|
||||
rm -r ./${dir}/res/values-sw360dp/
|
||||
rm -r ./${dir}/res/values-sw600dp/
|
||||
rm -r ./${dir}/res/values-ta/
|
||||
rm -r ./${dir}/res/values-te/
|
||||
rm -r ./${dir}/res/values-th/
|
||||
rm -r ./${dir}/res/values-tl/
|
||||
rm -r ./${dir}/res/values-tr/
|
||||
rm -r ./${dir}/res/values-tr-v1/
|
||||
rm -r ./${dir}/res/values-uk/
|
||||
rm -r ./${dir}/res/values-ur/
|
||||
rm -r ./${dir}/res/values-uz/
|
||||
rm -r ./${dir}/res/values-vi/
|
||||
rm -r ./${dir}/res/values-xlarge/
|
||||
rm -r ./${dir}/res/values-zh-rCN/
|
||||
rm -r ./${dir}/res/values-zh-rHK/
|
||||
rm -r ./${dir}/res/values-zh-rTW/
|
|
@ -0,0 +1,115 @@
|
|||
#!/usr/bin/env sh
|
||||
##
|
||||
# dev_builder.sh
|
||||
#
|
||||
# Authors: Sidney PEPO (aka sysb1n)
|
||||
# Last change: 2022-10-23
|
||||
#
|
||||
# Description: a development version of builder.sh. Read S;Z
|
||||
# documentation (README.org and dev_patches.org) before use it.
|
||||
# This script just contains functions that automates the build and
|
||||
# test processes at development phases, so, function names and
|
||||
# "status" function messages are autoexplicative. Read them too.
|
||||
#
|
||||
# ~El Psy Kongroo
|
||||
##
|
||||
|
||||
# Attributing variables with names to script parsed values.
|
||||
option=${1}
|
||||
argument=${2}
|
||||
|
||||
# Those variable are used to make Steins;Zapp file updates easier, for
|
||||
# example, on release name, base apk, etc.
|
||||
base_apk="./dependencies/com.soula2_v0.22.10L.apk"
|
||||
base_dir="sandbox"
|
||||
apktool="./dependencies/apktool_2.6.1.jar"
|
||||
zipalign="./dependencies/zipalign"
|
||||
apksigner="./dependencies/apksigner.jar"
|
||||
|
||||
|
||||
help() {
|
||||
echo "[h]elp -> Help"
|
||||
echo "[d]ecompile -> Decompile"
|
||||
echo "[b]uild -> Build"
|
||||
echo "[i]nstall -> Install"
|
||||
}
|
||||
|
||||
# After or before any procedure, this function is called to present an
|
||||
# information about it.
|
||||
status() {
|
||||
s_value=${1}
|
||||
s_stage=${2}
|
||||
|
||||
if [[ ${s_value} -eq 0 ]]; then
|
||||
echo "Successfully ${s_stage}"
|
||||
else
|
||||
echo "Not ${s_stage} due to an error"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
decompile() {
|
||||
java -jar ${apktool} -q d ${base_apk} -o ${base_dir}
|
||||
status ${?} "decompiled"
|
||||
}
|
||||
|
||||
build() {
|
||||
# Checking if output directory exists and, if isn't, it's created.
|
||||
if [[ ! -d "./dev_builds" ]]; then
|
||||
mkdir ./dev_builds
|
||||
fi
|
||||
|
||||
# Declaring an array and storing the Steins;Zapp symbols in it.
|
||||
declare -A symbols
|
||||
symbols[0]="0"
|
||||
symbols[1]="β"
|
||||
symbols[2]="α"
|
||||
symbols[3]="γ"
|
||||
symbols[4]="δ"
|
||||
|
||||
index=${1}
|
||||
list=$(seq 0 4)
|
||||
if [[ -n ${index} ]] && [[ ${index} -ge 0 ]] && [[ ${index} -le 4 ]]; then
|
||||
list=${index}
|
||||
fi
|
||||
for divergence in ${list}; do
|
||||
cp -r ${base_dir} ./dev_build
|
||||
|
||||
for apk_paths in $(grep -s -r -o "com\.soula2" ./dev_build | cut -d ":" -f 1 | uniq); do
|
||||
sed -i "s/com\.soula2/com\.steinszapp${divergence}/g" ${apk_paths} > /dev/null
|
||||
done
|
||||
for smali_paths in $(grep -s -r -o "Lcom\/soula2" ./dev_build | cut -d ":" -f 1 | uniq); do
|
||||
sed -i "s/Lcom\/soula2/Lcom\/steinszapp${divergence}/g" ${smali_paths} > /dev/null
|
||||
done
|
||||
sed -i "s/<string name=\"launcher_app_name\">WhatsApp<\/string>/<string name=\"launcher_app_name\">${symbols[${divergence}]} Steins;Zapp DEV BUILD<\/string>/g" ./dev_build/res/values/strings.xml > /dev/null
|
||||
sed -i "s/<string name=\"wa_go_name\">Soula2<\/string>/<string name=\"wa_go_name\">${symbols[${divergence}]} Steins;Zapp DEV BUILD<\/string>/g" ./dev_build/res/values-v1/strings.xml > /dev/null
|
||||
|
||||
java -jar ${apktool} -q b ./dev_build -o dev_build.apk
|
||||
status ${?} "builded"
|
||||
${zipalign} -p -f -v 4 dev_build.apk ./dev_builds/com.steinszapp${divergence}_dev_build.apk > /dev/null
|
||||
status ${?} "aligned"
|
||||
java -jar ${apksigner} sign --ks ./dependencies/key.keystore --ks-key-alias steins-zapp --ks-pass pass:elpsykongroo ./dev_builds/com.steinszapp${divergence}_dev_build.apk
|
||||
status ${?} "signed"
|
||||
|
||||
# Removing the generated temp files.
|
||||
rm -rf ./dev_builds/com.steinszapp${divergence}_dev_build.apk.idsig ./dev_build.apk ./dev_build > /dev/null
|
||||
done
|
||||
}
|
||||
|
||||
install() {
|
||||
filename=${1}
|
||||
./dependencies/adb install ${filename}
|
||||
status ${?} "installed"
|
||||
}
|
||||
|
||||
# This switch case acts like a "main" function for this script.
|
||||
case ${option} in
|
||||
d|decompile)
|
||||
decompile;;
|
||||
b|build)
|
||||
build ${argument};;
|
||||
i|install)
|
||||
install ${argument};;
|
||||
h|help|*)
|
||||
help;;
|
||||
esac
|
|
@ -0,0 +1,286 @@
|
|||
* Development patches
|
||||
During the development reverse engineering process, unfortunately, it's impossible to simply point to specific ~.smali~ files to all WhatsApp versions, because they are volatile, so, here is the list of S;Z patches with their respective files/regex to find the correct files to patch.
|
||||
|
||||
First of all, you should decompile the base APK (use ~dev_builder.sh~ to automate this process) and set ~base_dir~ variable with generated directory's name (it's ~sandbox~ by default)
|
||||
#+BEGIN_SRC sh
|
||||
./dev_builder.sh d
|
||||
|
||||
base_dir="sandbox"
|
||||
#+END_SRC
|
||||
After that, now you can study and test each Steins;Zapp patch by comparing the original files (inside ~sandbox/~ directory) with the patched one (inside ~patches/~ directory).
|
||||
#+BEGIN_QUOTE
|
||||
Read the following topics and subtopics to understand what behavior witch patch produces.
|
||||
#+END_QUOTE
|
||||
-----
|
||||
|
||||
* Immunity patches
|
||||
You might be thinking: "what this section is about?". Well, here in Brazil, there are a weird specie called /Trava zappers/, so, those patches are designed to imunize WhatsApp against """attacks""" from those guys.
|
||||
#+BEGIN_QUOTE
|
||||
/Trava zapper/, or WhatsApp "hanger" (in english), is a dumb annoying kid (or +40 years old adult) without any good to do, that likes to prank people with bloated messages called /Travas de WhatsApp/, or simply /Travas/, that *can hang* WhatsApp app (and thinks this is hacking and that he is a hacker).
|
||||
#+END_QUOTE
|
||||
This way, there are lots of WhatsApp hang species. Check them all below with their respective immunity patches. Tip: start with [[Text hang]] before any other.
|
||||
|
||||
#+BEGIN_QUOTE
|
||||
Fun fact: /Zap/ is a phoneme quickly pronounced by Brazilians to refer to WhatsApp. It's origin is something like /WhatsApp/ -> /AtsApp/ -> /TsAp/ -> /Sap/ (pronounced as /Zap/). That's why /Trava zapper/, is written this way (and if you think that is the reason for "Zapp" in Steins;Zapp name, you are right lol).
|
||||
#+END_QUOTE
|
||||
|
||||
** Text hang
|
||||
Text hangs are messages with a lot of numbers, symbols, emojis, Unicode, emphasis characters and invisible characters. This type of hang is the most common and it's the base for almost all species of hangs, so it's recommended to patch it before any other hang.
|
||||
|
||||
There are 3 text hang flavors:
|
||||
- [[Generic text hang]]
|
||||
- [[Delay hang]]
|
||||
- [[Dot hang]]
|
||||
#+BEGIN_QUOTE
|
||||
If you don't apply all text hang patches, do, at least, the [["Read more" size]], because it will significantly reduces lag in *almost all* hang types. The second most important immunity patch is the [[Generic text hang]], because it's, by far, the most common hang out there.
|
||||
#+END_QUOTE
|
||||
|
||||
*** "Read more" size
|
||||
That isn't exactly a hang to be patched, but, as was said above, before get into any specific text hang, you should apply this patch to get much better results.
|
||||
|
||||
**** Post-patch behavior
|
||||
Reduces when the "Read more" will appear in the messages, from 768 to 36 characters, making them shorter and much less laggy.
|
||||
|
||||
**** Patch
|
||||
#+BEGIN_SRC sh
|
||||
for a in $(grep -r -i "conversationrow" ./${base_dir} | cut -d ":" -f 1); do if [[ -n $(grep -i "0x300" $a) ]]; then echo $a; fi; done
|
||||
#+END_SRC
|
||||
|
||||
*** Generic text hang
|
||||
The most common and generic hang that you can find, made with a lot of numbers, symbols, emojis, Unicode, emphasis characters and invisible characters to dedicate the entire WhatsApp reserved memory just to render those messages, causing the hang effect.
|
||||
|
||||
**** Post-patch behavior
|
||||
Stops rendering emphasized texts and highlights at numbers, mentions and links.
|
||||
|
||||
**** Patch
|
||||
#+BEGIN_SRC sh
|
||||
for a in $(grep -r -i "monospace" ./${base_dir} | cut -d ":" -f 1); do if [[ -n $(grep -i "0x7db" $a) ]]; then echo $a; fi; done
|
||||
|
||||
grep -r -i "7f0a0ad2" ./${base_dir} # regex is the "monospace" public id
|
||||
|
||||
grep -r -i "u200a\\\\\\\\u205f" ./${base_dir}
|
||||
|
||||
egrep -r -i '"seconds"|" milliseconds"|" nanoseconds "' ./${base_dir}
|
||||
|
||||
grep -r -i '"((?:\\\\' ./${base_dir}
|
||||
|
||||
grep -r -i "s\*=" ./${base_dir}
|
||||
#+END_SRC
|
||||
|
||||
*** Delay hang
|
||||
A message with a huge amount of invisible characters (usually) that slows message receiving (and sending) processment.
|
||||
|
||||
**** Post-patch behavior
|
||||
Skips the entire instruction-set of two methods responsible for reading and expanding a large message data at its receive (and send).
|
||||
|
||||
**** Patch
|
||||
#+BEGIN_SRC sh
|
||||
grep -r -i "insert into messages(" ./${base_dir}
|
||||
|
||||
grep -r -i "(@\\\\\\\\" ./${base_dir}
|
||||
#+END_SRC
|
||||
|
||||
*** Dot hang
|
||||
It's like a fusion between generic text hangs and delay hangs. The messages usually contais just a dot and lots of invisible characters that, although now a days it's considered a "deprecated hang", it still can lag the app (usually on iOS devices) and delay message sending.
|
||||
|
||||
**** Post-patch behavior
|
||||
Skips the condicional verification to receive (or send) messages to a user even if WhatsApp doesn't has its respective JID.
|
||||
|
||||
**** Patch
|
||||
#+BEGIN_SRC sh
|
||||
grep -r -i "sender receipts" ./${base_dir}
|
||||
#+END_SRC
|
||||
|
||||
** Contact hang
|
||||
Basically a bloated vCard, filled with lots of symbols, emojis and Unicode characters (can be also filled with pre-existing text hangs) that cause the same text hang effect, but more laggy.
|
||||
|
||||
*** Post-patch behavior
|
||||
Skips the vCard information parsing and rendering instruction-set (except the contacts amount). Note: vCard information still can be read on WhatsApp Web.
|
||||
|
||||
*** Patch
|
||||
#+BEGIN_SRC sh
|
||||
grep -r -i "END:VCARD)" ./${base_dir}
|
||||
|
||||
grep -r -i "LX/1qM;->A01(Ljava/lang/String;LX/1qN;)V" ./${base_dir} # ".class public" of last regex search + "->" + ".method public" of virtual methods
|
||||
#+END_SRC
|
||||
|
||||
** Media hang
|
||||
Images, videos and even GIF's that has extremely high resolutions to consume too much processing at preview thumbnail reading and generation (and, sometimes, they have a text hang on message description and/or media file name).
|
||||
|
||||
*** Post-patch behavior
|
||||
Returns a "null" value before the process of reading and generating medias thumbnail, resulting in presenting a default WhatsApp thumbnail.
|
||||
|
||||
*** Patch
|
||||
#+BEGIN_SRC sh
|
||||
grep -r -i "image-thumb" ./${base_dir}
|
||||
#+END_SRC
|
||||
|
||||
** File hang
|
||||
WhatsApp can generate a preview thumbnail for certain file types (like PDF's), so, using the same media hang principle, those files has extremely high resolution content to use lots of processing when it try to read and generate preview thumbnails.
|
||||
|
||||
*** Post-patch behavior
|
||||
Reduces files preview thumbnail area on length.
|
||||
|
||||
*** Patch
|
||||
~./${base_dir}/res/layout/conversation_row_document_left.xml~
|
||||
~./${base_dir}/res/layout/conversation_row_document_right.xml~
|
||||
|
||||
** Location hang
|
||||
It's a random location sharing, but with the place information, like name and street, filled with symbols, emojis, Unicode characters and, sometimes, text hangs, acting like contact hangs, but even more powerful, because of bloated place information and map rendering.
|
||||
|
||||
*** Post-patch behavior
|
||||
Reduces place information area size to zero on height and width.
|
||||
|
||||
*** Patch
|
||||
~./${base_dir}/res/layout/conversation_row_location_left_large.xml~
|
||||
~./${base_dir}/res/layout/conversation_row_location_right_large.xml~
|
||||
~./${base_dir}/res/layout/conversation_row_location_popup.xml~
|
||||
~./${base_dir}/res/values/dimens.xml~
|
||||
|
||||
** Catalog hang
|
||||
This one uses the same location hang principle, but the bloated texts are filling catalog product information, instead place information, causing similar effects to the media hangs.
|
||||
|
||||
*** Post-patch behavior
|
||||
Skips the catalog product information return.
|
||||
|
||||
*** Patch
|
||||
#+BEGIN_SRC sh
|
||||
for a in $(grep -r -i "viewmessage/ from_me:" ./${base_dir} | cut -d ":" -f 1); do if [[ -n $(grep -i "textemojilabel;->" $a) ]]; then if [[ -n $(grep -i "charsequence;Ljava" $a) ]]; then echo $a; fi; fi; done
|
||||
#+END_SRC
|
||||
|
||||
** Link preview hang
|
||||
Also known as /webpage preview hang/ or simply /webpage hang/, this one is a message with a link that can be previewed and, in its displayed preview, title, description and/or URL contains symbols, emojis and Unicode characters that causes similar effects to text hangs.
|
||||
|
||||
*** Post-patch behavior
|
||||
Reduces place location information area size to zero on length.
|
||||
|
||||
*** Patch
|
||||
~./${base_dir}/res/layout/web_page_preview_image_and_content.xml~
|
||||
|
||||
** Cart hang - FIXED (finally!!)
|
||||
By far, this was the most powerful one: it's a random text message, but with ~44~ in its ~media_wa_type~ ID, that is, this message will be interpreted as a orders cart, but without any order or data, *crashing* the app instantly, just by opening a chat with it. By the way, seems that WhatsApp devs identified this serious issue and fixed it, so you don't need to (and shouldn't) patch this hang anymore and, if you try, app crashes will back (I know, because I've tested xd).
|
||||
|
||||
*** Post-patch behavior
|
||||
Skips the entire instruction-set of orders cart information parsing.
|
||||
#+BEGIN_QUOTE
|
||||
After the official fix of this hang, the post-patch behavior basically turned itself into the original cart hang crash effect, so, again, don't do it lol.
|
||||
#+END_QUOTE
|
||||
|
||||
*** Patch
|
||||
#+BEGIN_SRC sh
|
||||
grep -r -i ", 0x7f120bc1" ./${base_dir} # regex is the "message_order_cta_business" public id
|
||||
#+END_SRC
|
||||
-----
|
||||
|
||||
* Feature patches
|
||||
All S;Z features (besides its immunities) are here, from functionalities to themes. Note: WhatsApp Go (S;Z base) has a lot of built in features (e.g. pin up to 35 chats and forward messages up to 180 chats) that can be enabled in its menus.
|
||||
|
||||
** Obsolescence
|
||||
If WhatsApp doesn't get updated regularly, the installed version will stop working after some time (months), asking for the update.
|
||||
|
||||
*** Post-patch behavior
|
||||
Extends the current installed WhatsApp version util life.
|
||||
|
||||
*** Patch
|
||||
#+BEGIN_SRC sh
|
||||
grep -r -i "number format not valid" ./${base_dir}
|
||||
#+END_SRC
|
||||
** Instant send
|
||||
When you send messages quickly, there is a queue that acts analyzing send jobs to send just one message at time.
|
||||
|
||||
*** Post-patch behavior
|
||||
Skips jobs queue, sending messages instantly, without any delay.
|
||||
|
||||
*** Patch
|
||||
#+BEGIN_SRC sh
|
||||
grep -r -i ', "ReadyJobsProducer"' ./${base_dir}
|
||||
#+END_SRC
|
||||
** Infinite forward
|
||||
By default, when you forward messages in to the same chat, they are desselect after being sent.
|
||||
|
||||
*** Post-patch behavior
|
||||
Skips the deselecting message instruction.
|
||||
|
||||
*** Patch
|
||||
#+BEGIN_SRC sh
|
||||
grep -r -i "conversation/forward/failed" ./${base_dir}
|
||||
#+END_SRC
|
||||
** Long voice notes
|
||||
At the voice notes bottom, there is its duration, measured in seconds, minutes and, even, hours.
|
||||
|
||||
*** Post-patch behavior
|
||||
Reduces the time measure units reference values to 1, causing a voice note duration spoof.
|
||||
|
||||
*** Patch
|
||||
#+BEGIN_SRC sh
|
||||
grep -r -i "voicenote/stopvoicenote duration" ./${base_dir}
|
||||
#+END_SRC
|
||||
|
||||
** Steins;Zapp theme
|
||||
This is the last, but most obvious feature: the S;Z custom theme.
|
||||
|
||||
It's divided in two parts:
|
||||
- [[Strings]], responsible for changing most app words and texts, and
|
||||
- [[Colors]], responsible for change the S;Z color schemes (check out [[file:visual_identity/color_schemes.org][ ~visual_identity/color_schemes.org~ ]] to meet colors used)
|
||||
|
||||
*** Strings
|
||||
Below is the keyword list to be replaced. Strings files are ~./${base_dir}/res/values/strings.xml~ and ~./${base_dir}/res/values-v1/strings.xml~.
|
||||
|
||||
#+BEGIN_SRC text
|
||||
default_about_text
|
||||
status_default_at_gym
|
||||
Welcome to WhatsApp
|
||||
WhatsApp
|
||||
app_name
|
||||
launcher_app_name
|
||||
Message
|
||||
message
|
||||
"message"
|
||||
settingDisabled_system
|
||||
Steins;Zapp Business
|
||||
Facebook
|
||||
Instagram
|
||||
Steins;Zapp Messenger
|
||||
Messenger
|
||||
Steins;Zapp Inc.
|
||||
Steins;Zapp Support
|
||||
Steins;Zapp secures
|
||||
From Meta
|
||||
Meta
|
||||
Google
|
||||
are private
|
||||
are end
|
||||
No one outside of this chat, not even Steins;Zapp can read
|
||||
Steins;Zapp and third parties can't read
|
||||
Steins;Zapp cannot
|
||||
third parties can't
|
||||
can't be seen by businesses or Steins;Zapp
|
||||
Read our
|
||||
read our
|
||||
Steins;Zapp's terms
|
||||
#+END_SRC
|
||||
*** Colors
|
||||
Below is the color code list to be replaced. Colors files are ~./${base_dir}/res/values/colors.xml~ and ~./${base_dir}/res/values-night/colors.xml~.
|
||||
|
||||
**** Accent (links, read tint, etc.)
|
||||
#+BEGIN_SRC text
|
||||
027eb5
|
||||
009de2
|
||||
#+END_SRC
|
||||
**** Dark main (light theme)
|
||||
#+BEGIN_SRC text
|
||||
25d366
|
||||
008069
|
||||
splash
|
||||
125c4e
|
||||
#+END_SRC
|
||||
**** Bright main (dark theme)
|
||||
#+BEGIN_SRC text
|
||||
00a884
|
||||
111b21
|
||||
202c33
|
||||
splash
|
||||
8696a0
|
||||
182229
|
||||
setting_icon
|
||||
#+END_SRC
|
|
@ -0,0 +1,51 @@
|
|||
* Release: Makise Kurisu
|
||||
** Release date: [2022-07-25]
|
||||
** Changes
|
||||
- Updated ~com.soula2_v0.22.6L.apk~ (WhatsApp Go - S;Z base APK)
|
||||
- Updated and added ~dependencies/~ tools (ADB, APKTool, zipalign, apksigner)
|
||||
- Added ~dev_builder.sh~ (development script)
|
||||
- Improved /text hang/ immunity
|
||||
- Updated /contact hang/ immunity
|
||||
- Updated /media hang/ immunity
|
||||
- Updated /file hang/ immunity
|
||||
- Updated /location hang/ immunity
|
||||
- Updated /catalog hang/ immunity
|
||||
- Added /link preview hang/ immunity
|
||||
- Added /cart hang/ immunity
|
||||
- Updated and improved /obsolescence/ feature
|
||||
- Added /instant send/ feature
|
||||
- Updated /infinite forward/ feature
|
||||
- Added /long voice notes/ feature
|
||||
- Added ~dev_builds/~ and ~dev_builds/com.steinszapp*_dev_build.apk~ (development builds)
|
||||
- Updated ~visual_identity/*~ (all Steins;Zapp themes and themes information)
|
||||
- Updated ~dependencies/*_theme/~ and ~dependencies/general/~ (theme images)
|
||||
- Added /Makise Kurisu theme/ feature
|
||||
- Updated and improved ~dependencies/value_list.sh~ (dependency)
|
||||
- Updated and improved ~dependencies/light_theme.sh~ (dependency)
|
||||
- Updated and improved ~dependencies/dark_theme.sh~ (dependency)
|
||||
- Updated and improved ~dependencies/general.sh~ (dependency)
|
||||
- Updated and improved ~builder.sh~ (build script)
|
||||
- Updated and improved ~README.org~ (project documentation)
|
||||
- Updated and improved ~dev_patches.org~ (patch development documentation)
|
||||
- Updated and improved ~CHANGELOG.org~ (this file)
|
||||
- Updated and improved ~steins-zapp/*~ (Steins;Zapp Makise Kurisu release builds)
|
||||
-----
|
||||
|
||||
* Release: Zero
|
||||
** Release date: [2021-07-07]
|
||||
** Changes
|
||||
- Added new color scheme
|
||||
- Added new icons and wallpapers
|
||||
- Added 5 Steins;Zapp builds
|
||||
- Added MIT LICENSE
|
||||
- Added ~builder.sh~ script to build Steins;Zapp
|
||||
- Added README.md
|
||||
- Added /infinite forward/ feature
|
||||
- Added /D-Mail size/ feature
|
||||
- Added /text hang/ immunity
|
||||
- Added /link hang/ immunity
|
||||
- Added /contact hang/ immunity
|
||||
- Added /image hang/ immunity
|
||||
- Added /file hang/ immunity
|
||||
- Added /location hang/ immunity
|
||||
- Added /catalog hang/ immunity
|
|
@ -0,0 +1,155 @@
|
|||
* Steins;Zapp D-Mailer
|
||||
#+HTML: <p align="center"><img src="https://gitlab.com/secret-vault/steins-zapp/-/raw/master/visual_identity/02_Makise_Kurisu/icon.png" height="150"><p>
|
||||
Steins;Zapp D-Mailer, Steins;Zapp, or just S;Z, are a /Steins;Gate/ inspired patches for WhatsApp made in [[https://t.me/soulamods][SoulaMods]] /WhatsApp Go/ (~com.soula2~).
|
||||
Join our [[https://matrix.to/#/#steins-zapp:matrix.thisisjoes.site][Matrix space]] to receive S;Z updates, suggestion polls and pré-releases! 😁
|
||||
|
||||
** Screenshots
|
||||
#+HTML: <p align="center"><img src="https://gitlab.com/secret-vault/steins-zapp/-/raw/master/visual_identity/screenshots/02.png" height="450"> <img src="https://gitlab.com/secret-vault/steins-zapp/-/raw/master/visual_identity/screenshots/03.png" height="450"> <img src="https://gitlab.com/secret-vault/steins-zapp/-/raw/master/visual_identity/screenshots/05.png" height="450"> <img src="https://gitlab.com/secret-vault/steins-zapp/-/raw/master/visual_identity/screenshots/10.png" height="450"><p>
|
||||
[[https://gitlab.com/secret-vault/steins-zapp/-/tree/master/visual_identity/screenshots][Click here for more S;Z screenshots]]
|
||||
|
||||
** Download
|
||||
To download the entire Steins;Zapp APK pack, go to [[https://gitlab.com/secret-vault/steins-zapp/-/tree/master/steins-zapp/][ ~steins-zapp/~ ]] and download [[https://gitlab.com/secret-vault/steins-zapp/-/raw/master/steins-zapp/steins-zapp.zip][ ~steins-zapp.zip~ (or simply click here)]] or download individual APK's below at [[steins-zapp/ content]].
|
||||
#+BEGIN_QUOTE
|
||||
Important: do *NOT* download Steins;Zapp from *ANY* unofficial sources to prevent damages (the official ones are [[https://gitlab.com/secret-vault/steins-zapp][GitLab]], [[https://github.com/secret-vault/steins-zapp][GitHub]] and [[https://matrix.to/#/#steins-zapp:matrix.thisisjoes.site][Matrix space]]).
|
||||
#+END_QUOTE
|
||||
|
||||
*** ~steins-zapp/~ content
|
||||
- [[https://gitlab.com/secret-vault/steins-zapp/-/tree/master/steins-zapp][ ~steins-zapp/~ - Builds output]]
|
||||
- [[https://gitlab.com/secret-vault/steins-zapp/-/raw/master/steins-zapp/CHECKSUM][ ~CHECKSUM~ - SHA256 checksum of all ~*.apk~ files]]
|
||||
- [[https://gitlab.com/secret-vault/steins-zapp/-/raw/master/steins-zapp/com.steinszapp0.apk][ ~com.steinszapp0.apk~ - 0 Steins;Zapp (build #1)]]
|
||||
- [[https://gitlab.com/secret-vault/steins-zapp/-/raw/master/steins-zapp/com.steinszapp1.apk][ ~com.steinszapp1.apk~ - β Steins;Zapp (build #2)]]
|
||||
- [[https://gitlab.com/secret-vault/steins-zapp/-/raw/master/steins-zapp/com.steinszapp2.apk][ ~com.steinszapp2.apk~ - α Steins;Zapp (build #3)]]
|
||||
- [[https://gitlab.com/secret-vault/steins-zapp/-/raw/master/steins-zapp/com.steinszapp3.apk][ ~com.steinszapp3.apk~ - γ Steins;Zapp (build #4)]]
|
||||
- [[https://gitlab.com/secret-vault/steins-zapp/-/raw/master/steins-zapp/com.steinszapp4.apk][ ~com.steinszapp4.apk~ - δ Steins;Zapp (build #5)]]
|
||||
- [[https://gitlab.com/secret-vault/steins-zapp/-/raw/master/steins-zapp/steins-zapp.zip][ ~steins-zapp.zip~ - All files above, but compressed/zipped]]
|
||||
-----
|
||||
|
||||
* Technical info
|
||||
** Repo content
|
||||
- ~dependencies/~ - Steins;Zapp dependencies (softwares, scripts, images, etc.)
|
||||
- ~dev_builds/~ - Development builds output
|
||||
- ~patches/~ - ~com.soula2~ patched files
|
||||
- ~steins-zapp/~ - Steins;Zapp builds output
|
||||
- ~visual_identity/~ - The entire S;Z visual identity (icons, wallpapers, project files). Collect and enjoy them 😉
|
||||
- ~builder.sh~ - Script to generate Steins;Zapp builds
|
||||
- ~CHANGELOG~ - Changes made in the actual Steins;Zapp release
|
||||
- ~dev_builder.sh~ - Script to help at development
|
||||
- ~dev_patches.org~ - Guide to find the files to patch
|
||||
- ~LICENSE~ - MIT License
|
||||
- ~README.org~ - Readme file with all important information about this project
|
||||
|
||||
** Build guide
|
||||
*** Software dependencies
|
||||
- Any terminal emulator with any shell
|
||||
- Java (developed with ~openjdk 17.0.3~)
|
||||
- ~sed~ (should come by default with most *NIX os'es: BSD, Linux, Mac, etc.)
|
||||
- ~zip~
|
||||
|
||||
*** Autobuild
|
||||
1. Open a terminal instance and enter on it on repo root folder (this one, that contains ~builder.sh~)
|
||||
2. Check if ~builder.sh~ has execution permission (run ~ls -l~). If hasn't, ~chmod +x builder.sh~
|
||||
3. Run builder, with ~./builder.sh~
|
||||
#+BEGIN_QUOTE
|
||||
The entire process can take more than 5 minutes. Make sure repo is up to date, to prevent errors
|
||||
#+END_QUOTE
|
||||
4. If everything is OK, you're done!
|
||||
|
||||
*** Manual build
|
||||
1. If exists, delete ~source/~ directory
|
||||
2. Run APKTool (it should be located at ~dependencies/~) to decompile WhatsApp Go. Run
|
||||
#+BEGIN_SRC sh
|
||||
java -jar ./dependencies/apktool_2.6.1.jar -q d ./dependencies/com.soula2_v0.22.6L.apk -o ./source
|
||||
#+END_SRC
|
||||
3. Delete everything inside ~source/assets/~, after that, delete WhatsApp bloats. Run
|
||||
#+BEGIN_SRC sh
|
||||
rm -r ./source/assets/*
|
||||
|
||||
./dependencies/value_list.sh source
|
||||
#+END_SRC
|
||||
4. Copy and *replace* everything inside ~patches/~ into ~source/~. To automate this process, run
|
||||
#+BEGIN_SRC sh
|
||||
cp -rf ./patches/* ./source/
|
||||
#+END_SRC
|
||||
5. Copy all light and dark theme files, to their respective directories. Run
|
||||
#+BEGIN_SRC sh
|
||||
./dependencies/light_theme.sh source
|
||||
|
||||
./dependencies/dark_theme.sh source
|
||||
#+END_SRC
|
||||
6. Delete everything inside ~steins-zapp/~. To automate this process, run
|
||||
#+BEGIN_SRC sh
|
||||
rm -rf ./steins-zapp/*
|
||||
#+END_SRC
|
||||
7. Create a copy of ~source/~ directory called ~build/~. To automate this process, run
|
||||
#+BEGIN_SRC sh
|
||||
cp -r ./source ./build
|
||||
#+END_SRC
|
||||
8. Copy last modified files. To automate this process, run
|
||||
#+BEGIN_SRC sh
|
||||
declare -A symbols
|
||||
symbols[0]="0"
|
||||
symbols[1]="β"
|
||||
symbols[2]="α"
|
||||
symbols[3]="γ"
|
||||
symbols[4]="δ"
|
||||
|
||||
divergence=VALUE
|
||||
|
||||
./dependencies/general.sh build ${divergence}
|
||||
#+END_SRC
|
||||
#+BEGIN_QUOTE
|
||||
Change ~VALUE~ to any number greater or equal to 0 and less or equal to 4.
|
||||
#+END_QUOTE
|
||||
9. Change properly the package name to ~steinszapp${divergence}~. To automate this process, run
|
||||
#+BEGIN_SRC sh
|
||||
for apk_paths in $(grep -s -r -o "com\.soula2" ./build | cut -d ":" -f 1 | uniq); do sed -i "s/com\.soula2/com\.steinszapp${divergence}/g" ${apk_paths} > /dev/null; done
|
||||
|
||||
for smali_paths in $(grep -s -r -o "Lcom\/soula2" ./build | cut -d ":" -f 1 | uniq); do sed -i "s/Lcom\/soula2/Lcom\/steinszapp${divergence}/g" ${smali_paths} > /dev/null; done
|
||||
#+END_SRC
|
||||
10. Change ~wa_go_name~ and ~wa_go_version~ values in ~build/values-v1/strings.xml~. Run
|
||||
#+BEGIN_SRC sh
|
||||
release=NAME
|
||||
|
||||
sed -i "s/<string name=\"wa_go_name\">Soula2<\/string>/<string name=\"wa_go_name\">${symbols[${divergence}]} Steins;Zapp ${release}<\/string>/g" ./build/res/values-v1/strings.xml > /dev/null
|
||||
|
||||
sed -i "s/<string name=\"wa_go_version\">v0.22.6L<\/string>/<string name=\"wa_go_version\">${release}<\/string>/g" ./build/res/values-v1/strings.xml > /dev/null
|
||||
#+END_SRC
|
||||
#+BEGIN_QUOTE
|
||||
Change ~NAME~ to a name you want.
|
||||
#+END_QUOTE
|
||||
11. Build, align and sign the APK. Run
|
||||
#+BEGIN_SRC sh
|
||||
java -jar ./dependencies/apktool_2.6.1.jar -q b ./build -o build.apk
|
||||
|
||||
./dependencies/zipalign -p -f -v 4 build.apk ./steins-zapp/com.steinszapp${divergence}.apk > /dev/null
|
||||
|
||||
java -jar ./dependencies/apksigner.jar sign --ks ./dependencies/key.keystore --ks-key-alias steins-zapp --ks-pass pass:elpsykongroo ./steins-zapp/com.steinszapp${divergence}.apk
|
||||
#+END_SRC
|
||||
12. If everything gone correctly, your build is complete. To delete temp files, run
|
||||
#+BEGIN_SRC sh
|
||||
rm -rf ./steins-zapp/com.steinszapp${divergence}.apk.idsig ./build.apk ./build > /dev/null
|
||||
#+END_SRC
|
||||
#+BEGIN_QUOTE
|
||||
Repeat steps 7 - 12 to build up to 5 Steins;Zapp's (you can build more, but you must have a basic shell scripting acknowledgment to change some variables and values with no errors).
|
||||
#+END_QUOTE
|
||||
|
||||
*** Development tips
|
||||
- *Check* ~dev_patches.org~ *to understand how S;Z patches are made*
|
||||
- *Backup* files and instruction-sets *BEFORE modifying* them
|
||||
- Test patches using ~dev_builder.sh~ before copy modified files into ~patches/~
|
||||
- Document the changes adding comments in the patches (search for ~Steins;Zapp~ in ~.smali~ and ~.xml~ files to do it like them)
|
||||
-----
|
||||
|
||||
* Credits
|
||||
This project wouldn't be possible without the help and collaboration of:
|
||||
- [[https://sidneypepo.gitlab.io][Sidney PEPO (aka sysb1n)]]
|
||||
- [[https://www.youtube.com/channel/UCVoF2uXL9w19fbPa8Ks7pVg][Ellen Manga]]
|
||||
- [[https://github.com/wender-404][José Wender (aka Dreifus)]]
|
||||
- [[https://matrix.to/#/#steins-zapp:matrix.thisisjoes.site][S;Z community members❣️]]
|
||||
- [[https://t.me/soulamods][SoulaMods Team (WhatsApp Go devs ) 💗]]
|
||||
|
||||
#+BEGIN_QUOTE
|
||||
Made in [[https://matrix.to/#/#secret-vault:matrix.thisisjoes.site][FG Lab (aka Secret Vault)]]
|
||||
#+END_QUOTE
|
||||
|
||||
/~El Psy Kongroo/
|
|
@ -0,0 +1,243 @@
|
|||
AC Ascension Island
|
||||
AD Andorra
|
||||
AE United Arab Emirates
|
||||
AF Afghanistan
|
||||
AG Antigua & Barbuda
|
||||
AI Anguilla
|
||||
AL Albania
|
||||
AM Armenia
|
||||
AO Angola
|
||||
AR Argentina
|
||||
AS American Samoa
|
||||
AT Austria
|
||||
AU Australia
|
||||
AW Aruba
|
||||
AX Åland Islands
|
||||
AZ Azerbaijan
|
||||
BA Bosnia & Herzegovina
|
||||
BB Barbados
|
||||
BD Bangladesh
|
||||
BE Belgium
|
||||
BF Burkina Faso
|
||||
BG Bulgaria
|
||||
BH Bahrain
|
||||
BI Burundi
|
||||
BJ Benin
|
||||
BL St. Barthélemy
|
||||
BM Bermuda
|
||||
BN Brunei
|
||||
BO Bolivia
|
||||
BQ Caribbean Netherlands
|
||||
BR Brazil
|
||||
BS Bahamas
|
||||
BT Bhutan
|
||||
BW Botswana
|
||||
BY Belarus
|
||||
BZ Belize
|
||||
CA Canada
|
||||
CC Cocos (Keeling) Islands
|
||||
CD Congo - Kinshasa
|
||||
CF Central African Republic
|
||||
CG Congo - Brazzaville
|
||||
CH Switzerland
|
||||
CI Côte d’Ivoire
|
||||
CK Cook Islands
|
||||
CL Chile
|
||||
CM Cameroon
|
||||
CN China
|
||||
CO Colombia
|
||||
CR Costa Rica
|
||||
CU Cuba
|
||||
CV Cape Verde
|
||||
CW Curaçao
|
||||
CX Christmas Island
|
||||
CY Cyprus
|
||||
CZ Czechia
|
||||
DE Germany
|
||||
DJ Djibouti
|
||||
DK Denmark
|
||||
DM Dominica
|
||||
DO Dominican Republic
|
||||
DZ Algeria
|
||||
EC Ecuador
|
||||
EE Estonia
|
||||
EG Egypt
|
||||
ER Eritrea
|
||||
ES Spain
|
||||
ET Ethiopia
|
||||
FI Finland
|
||||
FJ Fiji
|
||||
FK Falkland Islands
|
||||
FM Micronesia
|
||||
FO Faroe Islands
|
||||
FR France
|
||||
GA Gabon
|
||||
GB United Kingdom
|
||||
GD Grenada
|
||||
GE Georgia
|
||||
GF French Guiana
|
||||
GG Guernsey
|
||||
GH Ghana
|
||||
GI Gibraltar
|
||||
GL Greenland
|
||||
GM Gambia
|
||||
GN Guinea
|
||||
GP Guadeloupe
|
||||
GQ Equatorial Guinea
|
||||
GR Greece
|
||||
GT Guatemala
|
||||
GU Guam
|
||||
GW Guinea-Bissau
|
||||
GY Guyana
|
||||
HK Hong Kong SAR China
|
||||
HN Honduras
|
||||
HR Croatia
|
||||
HT Haiti
|
||||
HU Hungary
|
||||
ID Indonesia
|
||||
IE Ireland
|
||||
IL Israel
|
||||
IM Isle of Man
|
||||
IN India
|
||||
IO British Indian Ocean Territory
|
||||
IQ Iraq
|
||||
IR Iran
|
||||
IS Iceland
|
||||
IT Italy
|
||||
JE Jersey
|
||||
JM Jamaica
|
||||
JO Jordan
|
||||
JP Japan
|
||||
KE Kenya
|
||||
KG Kyrgyzstan
|
||||
KH Cambodia
|
||||
KI Kiribati
|
||||
KM Comoros
|
||||
KN St. Kitts & Nevis
|
||||
KP North Korea
|
||||
KR South Korea
|
||||
KW Kuwait
|
||||
KY Cayman Islands
|
||||
KZ Kazakhstan
|
||||
LA Laos
|
||||
LB Lebanon
|
||||
LC St. Lucia
|
||||
LI Liechtenstein
|
||||
LK Sri Lanka
|
||||
LR Liberia
|
||||
LS Lesotho
|
||||
LT Lithuania
|
||||
LU Luxembourg
|
||||
LV Latvia
|
||||
LY Libya
|
||||
MA Morocco
|
||||
MC Monaco
|
||||
MD Moldova
|
||||
ME Montenegro
|
||||
MF St. Martin
|
||||
MG Madagascar
|
||||
MH Marshall Islands
|
||||
MK North Macedonia
|
||||
ML Mali
|
||||
MM Myanmar (Burma)
|
||||
MN Mongolia
|
||||
MO Macao SAR China
|
||||
MP Northern Mariana Islands
|
||||
MQ Martinique
|
||||
MR Mauritania
|
||||
MS Montserrat
|
||||
MT Malta
|
||||
MU Mauritius
|
||||
MV Maldives
|
||||
MW Malawi
|
||||
MX Mexico
|
||||
MY Malaysia
|
||||
MZ Mozambique
|
||||
NA Namibia
|
||||
NC New Caledonia
|
||||
NE Niger
|
||||
NF Norfolk Island
|
||||
NG Nigeria
|
||||
NI Nicaragua
|
||||
NL Netherlands
|
||||
NO Norway
|
||||
NP Nepal
|
||||
NR Nauru
|
||||
NU Niue
|
||||
NZ New Zealand
|
||||
OM Oman
|
||||
PA Panama
|
||||
PE Peru
|
||||
PF French Polynesia
|
||||
PG Papua New Guinea
|
||||
PH Philippines
|
||||
PK Pakistan
|
||||
PL Poland
|
||||
PM St. Pierre & Miquelon
|
||||
PR Puerto Rico
|
||||
PS Palestinian Territories
|
||||
PT Portugal
|
||||
PW Palau
|
||||
PY Paraguay
|
||||
QA Qatar
|
||||
RE Réunion
|
||||
RO Romania
|
||||
RS Serbia
|
||||
RU Russia
|
||||
RW Rwanda
|
||||
SA Saudi Arabia
|
||||
SB Solomon Islands
|
||||
SC Seychelles
|
||||
SD Sudan
|
||||
SE Sweden
|
||||
SG Singapore
|
||||
SH St. Helena
|
||||
SI Slovenia
|
||||
SJ Svalbard & Jan Mayen
|
||||
SK Slovakia
|
||||
SL Sierra Leone
|
||||
SM San Marino
|
||||
SN Senegal
|
||||
SO Somalia
|
||||
SR Suriname
|
||||
SS South Sudan
|
||||
ST São Tomé & Príncipe
|
||||
SV El Salvador
|
||||
SX Sint Maarten
|
||||
SY Syria
|
||||
SZ Eswatini
|
||||
TC Turks & Caicos Islands
|
||||
TD Chad
|
||||
TG Togo
|
||||
TH Thailand
|
||||
TJ Tajikistan
|
||||
TK Tokelau
|
||||
TL Timor-Leste
|
||||
TM Turkmenistan
|
||||
TN Tunisia
|
||||
TO Tonga
|
||||
TR Turkey
|
||||
TT Trinidad & Tobago
|
||||
TV Tuvalu
|
||||
TW Taiwan
|
||||
TZ Tanzania
|
||||
UA Ukraine
|
||||
UG Uganda
|
||||
US United States
|
||||
UY Uruguay
|
||||
UZ Uzbekistan
|
||||
VA Vatican City
|
||||
VC St. Vincent & Grenadines
|
||||
VE Venezuela
|
||||
VG British Virgin Islands
|
||||
VI U.S. Virgin Islands
|
||||
VN Vietnam
|
||||
VU Vanuatu
|
||||
WF Wallis & Futuna
|
||||
WS Samoa
|
||||
XK Kosovo
|
||||
YE Yemen
|
||||
YT Mayotte
|
||||
ZA South Africa
|
||||
ZM Zambia
|
||||
ZW Zimbabwe
|
|
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1009 B |
After Width: | Height: | Size: 971 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1023 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1009 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |