Final commit

This commit is contained in:
Sidney PEPO (aka sysb1n) 2023-06-26 23:15:34 -03:00
commit 466acc4d66
No known key found for this signature in database
GPG Key ID: 2B8A67D432CDF722
3469 changed files with 102110 additions and 0 deletions

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
*.apk filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text

21
LICENSE Normal file
View File

@ -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.

22
README.org Normal file
View File

@ -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/

151
builder.sh Executable file
View File

@ -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}"

BIN
dependencies/adb vendored Executable file

Binary file not shown.

BIN
dependencies/apksigner.jar vendored Normal file

Binary file not shown.

BIN
dependencies/apktool_2.6.1.jar vendored Normal file

Binary file not shown.

BIN
dependencies/com.soula2_v0.22.10L.apk (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
dependencies/com.soula2_v0.22.6L.apk (Stored with Git LFS) vendored Normal file

Binary file not shown.

54
dependencies/dark_theme.sh vendored Executable file
View File

@ -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/

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

60
dependencies/general.sh vendored Executable file
View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
dependencies/general/0icon.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
dependencies/general/0splash_logo.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
dependencies/general/1icon.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
dependencies/general/1splash_logo.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
dependencies/general/2icon.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
dependencies/general/2splash_logo.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
dependencies/general/3icon.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
dependencies/general/3splash_logo.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
dependencies/general/4icon.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
dependencies/general/4splash_logo.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
dependencies/general/about_logo.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
dependencies/general/background.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
dependencies/general/backgroundl.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
dependencies/key.keystore vendored Normal file

Binary file not shown.

BIN
dependencies/lib64/libc++.so vendored Executable file

Binary file not shown.

54
dependencies/light_theme.sh vendored Executable file
View File

@ -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/

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

102
dependencies/value_list.sh vendored Executable file
View File

@ -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/

BIN
dependencies/zipalign vendored Executable file

Binary file not shown.

115
dev_builder.sh Executable file
View File

@ -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

BIN
dev_builds/com.steinszapp0_dev_build.apk (Stored with Git LFS) Normal file

Binary file not shown.

BIN
dev_builds/com.steinszapp1_dev_build.apk (Stored with Git LFS) Normal file

Binary file not shown.

BIN
dev_builds/com.steinszapp2_dev_build.apk (Stored with Git LFS) Normal file

Binary file not shown.

BIN
dev_builds/com.steinszapp3_dev_build.apk (Stored with Git LFS) Normal file

Binary file not shown.

BIN
dev_builds/com.steinszapp4_dev_build.apk (Stored with Git LFS) Normal file

Binary file not shown.

286
dev_patches.org Normal file
View File

@ -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

51
old_CHANGELOG.org Normal file
View File

@ -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

155
old_README.org Normal file
View File

@ -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/

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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 dIvoire
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
1 AC Ascension Island
2 AD Andorra
3 AE United Arab Emirates
4 AF Afghanistan
5 AG Antigua & Barbuda
6 AI Anguilla
7 AL Albania
8 AM Armenia
9 AO Angola
10 AR Argentina
11 AS American Samoa
12 AT Austria
13 AU Australia
14 AW Aruba
15 AX Åland Islands
16 AZ Azerbaijan
17 BA Bosnia & Herzegovina
18 BB Barbados
19 BD Bangladesh
20 BE Belgium
21 BF Burkina Faso
22 BG Bulgaria
23 BH Bahrain
24 BI Burundi
25 BJ Benin
26 BL St. Barthélemy
27 BM Bermuda
28 BN Brunei
29 BO Bolivia
30 BQ Caribbean Netherlands
31 BR Brazil
32 BS Bahamas
33 BT Bhutan
34 BW Botswana
35 BY Belarus
36 BZ Belize
37 CA Canada
38 CC Cocos (Keeling) Islands
39 CD Congo - Kinshasa
40 CF Central African Republic
41 CG Congo - Brazzaville
42 CH Switzerland
43 CI Côte d’Ivoire
44 CK Cook Islands
45 CL Chile
46 CM Cameroon
47 CN China
48 CO Colombia
49 CR Costa Rica
50 CU Cuba
51 CV Cape Verde
52 CW Curaçao
53 CX Christmas Island
54 CY Cyprus
55 CZ Czechia
56 DE Germany
57 DJ Djibouti
58 DK Denmark
59 DM Dominica
60 DO Dominican Republic
61 DZ Algeria
62 EC Ecuador
63 EE Estonia
64 EG Egypt
65 ER Eritrea
66 ES Spain
67 ET Ethiopia
68 FI Finland
69 FJ Fiji
70 FK Falkland Islands
71 FM Micronesia
72 FO Faroe Islands
73 FR France
74 GA Gabon
75 GB United Kingdom
76 GD Grenada
77 GE Georgia
78 GF French Guiana
79 GG Guernsey
80 GH Ghana
81 GI Gibraltar
82 GL Greenland
83 GM Gambia
84 GN Guinea
85 GP Guadeloupe
86 GQ Equatorial Guinea
87 GR Greece
88 GT Guatemala
89 GU Guam
90 GW Guinea-Bissau
91 GY Guyana
92 HK Hong Kong SAR China
93 HN Honduras
94 HR Croatia
95 HT Haiti
96 HU Hungary
97 ID Indonesia
98 IE Ireland
99 IL Israel
100 IM Isle of Man
101 IN India
102 IO British Indian Ocean Territory
103 IQ Iraq
104 IR Iran
105 IS Iceland
106 IT Italy
107 JE Jersey
108 JM Jamaica
109 JO Jordan
110 JP Japan
111 KE Kenya
112 KG Kyrgyzstan
113 KH Cambodia
114 KI Kiribati
115 KM Comoros
116 KN St. Kitts & Nevis
117 KP North Korea
118 KR South Korea
119 KW Kuwait
120 KY Cayman Islands
121 KZ Kazakhstan
122 LA Laos
123 LB Lebanon
124 LC St. Lucia
125 LI Liechtenstein
126 LK Sri Lanka
127 LR Liberia
128 LS Lesotho
129 LT Lithuania
130 LU Luxembourg
131 LV Latvia
132 LY Libya
133 MA Morocco
134 MC Monaco
135 MD Moldova
136 ME Montenegro
137 MF St. Martin
138 MG Madagascar
139 MH Marshall Islands
140 MK North Macedonia
141 ML Mali
142 MM Myanmar (Burma)
143 MN Mongolia
144 MO Macao SAR China
145 MP Northern Mariana Islands
146 MQ Martinique
147 MR Mauritania
148 MS Montserrat
149 MT Malta
150 MU Mauritius
151 MV Maldives
152 MW Malawi
153 MX Mexico
154 MY Malaysia
155 MZ Mozambique
156 NA Namibia
157 NC New Caledonia
158 NE Niger
159 NF Norfolk Island
160 NG Nigeria
161 NI Nicaragua
162 NL Netherlands
163 NO Norway
164 NP Nepal
165 NR Nauru
166 NU Niue
167 NZ New Zealand
168 OM Oman
169 PA Panama
170 PE Peru
171 PF French Polynesia
172 PG Papua New Guinea
173 PH Philippines
174 PK Pakistan
175 PL Poland
176 PM St. Pierre & Miquelon
177 PR Puerto Rico
178 PS Palestinian Territories
179 PT Portugal
180 PW Palau
181 PY Paraguay
182 QA Qatar
183 RE Réunion
184 RO Romania
185 RS Serbia
186 RU Russia
187 RW Rwanda
188 SA Saudi Arabia
189 SB Solomon Islands
190 SC Seychelles
191 SD Sudan
192 SE Sweden
193 SG Singapore
194 SH St. Helena
195 SI Slovenia
196 SJ Svalbard & Jan Mayen
197 SK Slovakia
198 SL Sierra Leone
199 SM San Marino
200 SN Senegal
201 SO Somalia
202 SR Suriname
203 SS South Sudan
204 ST São Tomé & Príncipe
205 SV El Salvador
206 SX Sint Maarten
207 SY Syria
208 SZ Eswatini
209 TC Turks & Caicos Islands
210 TD Chad
211 TG Togo
212 TH Thailand
213 TJ Tajikistan
214 TK Tokelau
215 TL Timor-Leste
216 TM Turkmenistan
217 TN Tunisia
218 TO Tonga
219 TR Turkey
220 TT Trinidad & Tobago
221 TV Tuvalu
222 TW Taiwan
223 TZ Tanzania
224 UA Ukraine
225 UG Uganda
226 US United States
227 UY Uruguay
228 UZ Uzbekistan
229 VA Vatican City
230 VC St. Vincent & Grenadines
231 VE Venezuela
232 VG British Virgin Islands
233 VI U.S. Virgin Islands
234 VN Vietnam
235 VU Vanuatu
236 WF Wallis & Futuna
237 WS Samoa
238 XK Kosovo
239 YE Yemen
240 YT Mayotte
241 ZA South Africa
242 ZM Zambia
243 ZW Zimbabwe

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 971 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1023 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Some files were not shown because too many files have changed in this diff Show More