commit 0a3e4d780c10af9324a6ece5970df76cf66a52d0 Author: wowlikon Date: Sun Aug 24 13:09:00 2025 +0300 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f19ed73 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +decompiled/* +modified/* +original/* +tools/* + +__pycache__/ diff --git a/main.py b/main.py new file mode 100644 index 0000000..556f5fd --- /dev/null +++ b/main.py @@ -0,0 +1,148 @@ +import os +import sys +import json +import requests +import colorama +import importlib +import subprocess +from tqdm import tqdm + + +def init(apktool_jar_url: str, apktool_wrapper_url: str) -> dict: + for directory in ["original", "modified", "patches", "tools", "decompiled"]: + if not os.path.exists(directory): + os.makedirs(directory) + + if not os.path.exists("./tools/apktool.jar"): + try: + print("Скачивание Apktool...") + jar_response = requests.get(apktool_jar_url, stream=True) + jar_path = "tools/apktool.jar" + with open(jar_path, "wb") as f: + for chunk in jar_response.iter_content(chunk_size=8192): + f.write(chunk) + + wrapper_response = requests.get(apktool_wrapper_url) + wrapper_path = "tools/apktool" + with open(wrapper_path, "w") as f: + f.write(wrapper_response.text) + os.chmod(wrapper_path, 0o755) + + except Exception as e: + print(f"Ошибка при скачивании Apktool: {e}") + exit(1) + + try: + result = subprocess.run( + ["java", "-version"], capture_output=True, text=True, check=True + ) + + version_line = result.stderr.splitlines()[0] + if "1.8" in version_line or any(f"{i}." in version_line for i in range(9, 100)): + print("Java 8 или более поздняя версия установлена.") + else: + print("Java 8 или более поздняя версия не установлена.") + sys.exit(1) + except subprocess.CalledProcessError: + print("Java не установлена. Установите Java 8 или более позднюю версию.") + exit(1) + + with open("./patches/config.json", "r") as config_file: + return json.load(config_file) + + +def select_apk() -> str: + apks = [] + for file in os.listdir("original"): + if file.endswith(".apk") and os.path.isfile(os.path.join("original", file)): + apks.append(file) + + if not apks: + print("Нет файлов .apk в текущей директории") + sys.exit(1) + + while True: + print("Выберете файл для модификации") + for index, apk in enumerate(apks): + print(f"{index + 1}. {apk}") + print("0. Exit") + + try: + selected_index = int(input("\nВведите номер файла: ")) + if selected_index == 0: + sys.exit(0) + elif selected_index > len(apks): + print("Неверный номер файла") + else: + apk = apks[selected_index - 1] + print(f"Выбран файл {apk}") + return apk + except ValueError: + print("Неверный формат ввода") + except KeyboardInterrupt: + print("Прервано пользователем") + sys.exit(0) + + +def decompile_apk(apk: str): + print("Декомпилируем apk...") + try: + result = subprocess.run( + "tools/apktool d -f -o decompiled " + os.path.join("original", apk), + shell=True, + check=True, + text=True, + stdout=subprocess.DEVNULL, + stderr=subprocess.PIPE, + ) + except subprocess.CalledProcessError as e: + print("Ошибка при выполнении команды:") + print(e.stderr) + sys.exit(1) + + +class Patch: + def __init__(self, name, pkg): + self.name = name + self.package = pkg + self.applied = False + + def apply(self, conf: dict) -> bool: + try: + self.applied = self.package.apply(conf) + return True + except Exception as e: + print(f"Ошибка при применении патча {self.name}: {e}") + return False + + +conf = init( + apktool_jar_url="https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.12.0.jar", + apktool_wrapper_url="https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool", +) +apk = select_apk() +patch = decompile_apk(apk) + +patches = [] +for filename in os.listdir("patches/"): + if filename.endswith(".py") and filename != "__init__.py": + module_name = filename[:-3] + module = importlib.import_module(f"patches.{module_name}") + patches.append(Patch(module_name, module)) + +for patch in tqdm(patches, colour="green", desc="Применение патчей"): + tqdm.write(f"Применение патча: {patch.name}") + patch.apply(conf) + +statuses = {} +for patch in patches: + statuses[patch.name] = patch.applied + marker = colorama.Fore.GREEN + "✔" if patch.applied else colorama.Fore.RED + "✘" + print(f"{marker}{colorama.Style.RESET_ALL} {patch.name}") + +if all(statuses.values()): + print("Все патчи успешно применены") +elif any(statuses.values()): + print("Некоторые патчи не были успешно применены") +else: + print("Ни один патч не был успешно применен") diff --git a/patches/__init__.py b/patches/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/patches/application_icon.py b/patches/application_icon.py new file mode 100644 index 0000000..a12b8ab --- /dev/null +++ b/patches/application_icon.py @@ -0,0 +1,7 @@ +# Change package icon of apk + +import time + +def apply(config: dict) -> bool: + time.sleep(1) + return False diff --git a/patches/change_server.py b/patches/change_server.py new file mode 100644 index 0000000..2ba47ec --- /dev/null +++ b/patches/change_server.py @@ -0,0 +1,11 @@ +# Change api server of apk + +import json +import requests + +def apply(config: dict) -> bool: + response = requests.get(config['server']) + if response.status_code == 200: + print(json.loads(response.text)) + return True + return False diff --git a/patches/cleanup.py b/patches/cleanup.py new file mode 100644 index 0000000..b30c587 --- /dev/null +++ b/patches/cleanup.py @@ -0,0 +1,17 @@ +# Remove unnecessary files + +import os +import shutil + +def apply(config: dict) -> bool: + for item in os.listdir("./decompiled/unknown/"): + item_path = os.path.join("./decompiled/unknown/", item) + + if os.path.isfile(item_path): + os.remove(item_path) + print(f'Удалён файл: {item_path}') + elif os.path.isdir(item_path): + if item not in config["cleanup"]["keep_dirs"]: + shutil.rmtree(item_path) + print(f'Удалена папка: {item_path}') + return True diff --git a/patches/color_theme.py b/patches/color_theme.py new file mode 100644 index 0000000..06ec150 --- /dev/null +++ b/patches/color_theme.py @@ -0,0 +1,57 @@ +# Change application theme + +import re + + +def apply(config: dict) -> bool: + main_color = config["theme"]["colors"]["primary"] + splash_color = config["theme"]["colors"]["secondary"] + gradient_from = config["theme"]["gradient"]["from"] + gradient_to = config["theme"]["gradient"]["to"] + + # No connection alert coolor + with open("./decompiled/assets/no_connection.html", "r", encoding="utf-8") as file: + file_contents = file.read() + + new_contents = file_contents.replace("#f04e4e", main_color) + + with open("./decompiled/assets/no_connection.html", "w", encoding="utf-8") as file: + file.write(new_contents) + + # For logo + drawable_types = ["", "-night"] + + for drawable_type in drawable_types: + # Application logo gradient colors + file_path = f"./decompiled/res/drawable{drawable_type}/$logo__0.xml" + with open(file_path, "r", encoding="utf-8") as file: + content = file.read() + + pattern = r'android:startColor="(#[0-9a-fA-F]{8})"\s+android:endColor="(#[0-9a-fA-F]{8})"' + + def replace_colors(match): + return ( + f'android:startColor="{gradient_from}" android:endColor="{gradient_to}"' + ) + + new_content = re.sub(pattern, replace_colors, content).replace("\n ", "") + + with open(file_path, "w", encoding="utf-8") as file: + file.write(new_content) + + # Application logo anim color + file_path = f"./decompiled/res/drawable{drawable_type}/$logo_splash_anim__0.xml" + with open(file_path, "r", encoding="utf-8") as file: + content = file.read() + + pattern = r'android:name="path" android:fillColor="(#[0-9a-fA-F]{8})"' + + def replace_colors(match): + return f'android:name="path" android:fillColor="{splash_color}"' + + new_content = re.sub(pattern, replace_colors, content).replace("\n ", " ", 1) + + with open(file_path, "w", encoding="utf-8") as file: + file.write(new_content) + + return True diff --git a/patches/config.json b/patches/config.json new file mode 100644 index 0000000..283fb11 --- /dev/null +++ b/patches/config.json @@ -0,0 +1,22 @@ +{ + "new_package_name": "com.wowlikon.anixart", + "server": "https://anixarty.wowlikon.tech/modding", + "theme": { + "colors": { + "primary": "#ccff00", + "secondary": "#ffffd700", + "background": "#FFFFFF", + "text": "#000000" + }, + "gradient": { + "from": "#ffff6060", + "to": "#ffccff00" + } + }, + "cleanup": { + "keep_dirs": [ + "META-INF", + "kotlin" + ] + } +} diff --git a/patches/insert_new.py b/patches/insert_new.py new file mode 100644 index 0000000..dbc6621 --- /dev/null +++ b/patches/insert_new.py @@ -0,0 +1,37 @@ +# Change package icon of apk + +import shutil +import os + + +def apply(config: dict) -> bool: + # Mod first launch window + shutil.copytree( + "./patches/resources/smali_classes4/", "./decompiled/smali_classes4/" + ) + + # Mod assets + shutil.copy("./patches/resources/wowlikon.png", "./decompiled/assets/wowlikon.png") + shutil.copy( + "./patches/resources/ytsans_medium.ttf", + "./decompiled/res/font/ytsans_medium.ttf", + ) + shutil.copy( + "./patches/resources/OpenSans-Regular.ttf", + "./decompiled/assets/OpenSans-Regular.ttf", + ) + shutil.copy( + "./patches/resources/ic_custom_crown.xml", + "./decompiled/res/drawable/ic_custom_crown.xml", + ) + shutil.copy( + "./patches/resources/ic_custom_telegram.xml", + "./decompiled/res/drawable/ic_custom_telegram.xml", + ) + shutil.copy( + "./patches/resources/torlook-fs8.torlook-fs8.png", + "./decompiled/res/drawable/torlook-fs8.png", + ) + + os.remove("./decompiled/res/font/ytsans_medium.otf") + return False diff --git a/patches/package_name.py b/patches/package_name.py new file mode 100644 index 0000000..ca23722 --- /dev/null +++ b/patches/package_name.py @@ -0,0 +1,56 @@ +# Change package name of apk + +import os + + +def rename_dir(src, dst): + os.makedirs(os.path.dirname(dst), exist_ok=True) + os.rename(src, dst) + + +def apply(config: dict) -> bool: + assert config["new_package_name"] is not None, "new_package_name is not configured" + + for root, dirs, files in os.walk("./decompiled"): + for filename in files: + file_path = os.path.join(root, filename) + + if os.path.isfile(file_path): + try: + with open(file_path, "r", encoding="utf-8") as file: + file_contents = file.read() + + new_contents = file_contents.replace( + "com.swiftsoft.anixartd", config["new_package_name"] + ) + new_contents = new_contents.replace( + "com/swiftsoft/anixartd", + config["new_package_name"].replace(".", "/"), + ) + + with open(file_path, "w", encoding="utf-8") as file: + file.write(new_contents) + except: + pass + + rename_dir( + "./decompiled/smali/com/swiftsoft/anixartd", + os.path.join( + "./decompiled", "smali", config["new_package_name"].replace(".", "/") + ), + ) + rename_dir( + "./decompiled/smali_classes2/com/swiftsoft/anixartd", + os.path.join( + "./decompiled", + "smali_classes2", + config["new_package_name"].replace(".", "/"), + ), + ) + + os.rmdir("./decompiled/smali_classes2/com/swiftsoft") + + return True + + +# smali_classes2/com/wowlikon/anixart/utils/DeviceInfoUtil.smali: const-string v3, "\u0411\u0430\u0433-\u0440\u0435\u043f\u043e\u0440\u0442 9.0 BETA 5 (25062213)" diff --git a/patches/resources/OpenSans-Regular.ttf b/patches/resources/OpenSans-Regular.ttf new file mode 100644 index 0000000..67803bb Binary files /dev/null and b/patches/resources/OpenSans-Regular.ttf differ diff --git a/patches/resources/ic_custom_crown.xml b/patches/resources/ic_custom_crown.xml new file mode 100644 index 0000000..67c174f --- /dev/null +++ b/patches/resources/ic_custom_crown.xml @@ -0,0 +1,5 @@ + + + + diff --git a/patches/resources/ic_custom_telegram.xml b/patches/resources/ic_custom_telegram.xml new file mode 100644 index 0000000..4cbe462 --- /dev/null +++ b/patches/resources/ic_custom_telegram.xml @@ -0,0 +1,5 @@ + + + + diff --git a/patches/resources/smali_classes4/com/swiftsoft/about/$1.smali b/patches/resources/smali_classes4/com/swiftsoft/about/$1.smali new file mode 100644 index 0000000..7eecd0f --- /dev/null +++ b/patches/resources/smali_classes4/com/swiftsoft/about/$1.smali @@ -0,0 +1,87 @@ +.class public Lcom/wowlikon/about/$1; +.super Landroid/graphics/drawable/GradientDrawable; + + +# direct methods +.method public constructor ()V + .locals 1 + + .line 7 + invoke-direct {p0}, Landroid/graphics/drawable/GradientDrawable;->()V + + const/4 v0, -0x1 + + .line 8 + invoke-direct {p0, v0}, Lcom/wowlikon/about/$1;->oooooo(I)V + + const/4 v0, 0x0 + + .line 9 + invoke-direct {p0, v0}, Lcom/wowlikon/about/$1;->oooooo(Z)V + + return-void +.end method + +.method private oooooo(I)V + .locals 0 + + .line 21 + invoke-virtual {p0, p1}, Lcom/wowlikon/about/$1;->setTint(I)V + + const/16 p1, 0xff + + .line 22 + invoke-virtual {p0, p1}, Lcom/wowlikon/about/$1;->setAlpha(I)V + + return-void +.end method + +.method private oooooo(Z)V + .locals 3 + + .line 26 + invoke-virtual {p0, p1}, Lcom/wowlikon/about/$1;->setAutoMirrored(Z)V + + const/16 p1, 0x7f + + const/16 v0, 0x5f + + const/16 v1, 0x64 + + const/16 v2, 0x7d + + .line 27 + invoke-static {v1, v2, p1, v0}, Landroid/graphics/Color;->argb(IIII)I + + move-result p1 + + const/4 v0, 0x0 + + invoke-virtual {p0, v0, p1}, Lcom/wowlikon/about/$1;->setStroke(II)V + + return-void +.end method + + +# virtual methods +.method public oooooo(II)Lcom/wowlikon/about/$1; + .locals 0 + + .line 13 + invoke-virtual {p0, p1}, Lcom/wowlikon/about/$1;->setColor(I)V + + int-to-float p2, p2 + + .line 14 + invoke-virtual {p0, p2}, Lcom/wowlikon/about/$1;->setCornerRadius(F)V + + .line 15 + invoke-direct {p0, p1}, Lcom/wowlikon/about/$1;->oooooo(I)V + + const/4 p1, 0x1 + + .line 16 + invoke-direct {p0, p1}, Lcom/wowlikon/about/$1;->oooooo(Z)V + + return-object p0 +.end method diff --git a/patches/resources/smali_classes4/com/swiftsoft/about/$2.smali b/patches/resources/smali_classes4/com/swiftsoft/about/$2.smali new file mode 100644 index 0000000..bec81de --- /dev/null +++ b/patches/resources/smali_classes4/com/swiftsoft/about/$2.smali @@ -0,0 +1,633 @@ +.class public Lcom/wowlikon/about/$2; +.super Ljava/lang/Object; + + +# direct methods +.method static constructor ()V + .locals 0 + + return-void +.end method + +.method public constructor ()V + .locals 0 + + .line 25 + invoke-direct {p0}, Ljava/lang/Object;->()V + + return-void +.end method + +.method public static oooooo(Landroid/content/Context;)Ljava/lang/Object; + .locals 16 + + move-object/from16 v0, p0 + + const-string v1, "UTF-8" + + .line 30 + const/4 v2, 0x0 + + const/4 v3, 0x0 + + const/4 v4, 0x0 + + if-nez v2, :cond_1 + + .line 31 + invoke-virtual/range {p0 .. p0}, Landroid/content/Context;->getPackageName()Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v2, v4}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences; + + move-result-object v2 + + const-string v5, "files_dir" + + const-string v6, "" + + .line 33 + invoke-interface {v2, v5, v6}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v7 + + invoke-virtual {v7, v6}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v6 + + if-eqz v6, :cond_0 + + .line 34 + invoke-interface {v2}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; + + move-result-object v2 + + invoke-virtual/range {p0 .. p0}, Landroid/content/Context;->getFilesDir()Ljava/io/File; + + move-result-object v6 + + invoke-virtual {v6}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String; + + move-result-object v6 + + invoke-interface {v2, v5, v6}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor; + + move-result-object v2 + + invoke-interface {v2}, Landroid/content/SharedPreferences$Editor;->apply()V + + goto :goto_0 + + :cond_0 + return-object v3 + + .line 40 + :cond_1 + :goto_0 + invoke-virtual/range {p0 .. p0}, Landroid/content/Context;->getAssets()Landroid/content/res/AssetManager; + + move-result-object v2 + + const-string v5, "OpenSans-Regular.ttf" + + invoke-static {v2, v5}, Landroid/graphics/Typeface;->createFromAsset(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface; + + move-result-object v2 + + const-string v5, "#FF252525" + + .line 43 + invoke-static {v5}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I + + move-result v6 + + const-string v7, "#FFFFFFFF" + + .line 44 + invoke-static {v7}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I + + move-result v7 + + const-string v8, "#FFCFF04D" + + .line 45 + invoke-static {v8}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I + + move-result v8 + + const-string v9, "#FFFFFFFF" + + .line 46 + invoke-static {v9}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I + + move-result v9 + + .line 47 + const-string v5, "#FF252525" + + invoke-static {v5}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I + + move-result v5 + + const-string v10, "#FFCFF04D" + + .line 48 + invoke-static {v10}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I + + move-result v10 + + .line 61 + :try_start_0 + invoke-virtual/range {p0 .. p0}, Landroid/content/Context;->getAssets()Landroid/content/res/AssetManager; + + move-result-object v11 + + const-string v12, "wowlikon.png" + + invoke-virtual {v11, v12}, Landroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream; + + move-result-object v11 + + invoke-static {v11, v3}, Landroid/graphics/drawable/BitmapDrawable;->createFromStream(Ljava/io/InputStream;Ljava/lang/String;)Landroid/graphics/drawable/Drawable; + + move-result-object v11 + + check-cast v11, Landroid/graphics/drawable/BitmapDrawable; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-object v3, v11 + + goto :goto_1 + + .line 63 + :catch_0 + invoke-static {}, Landroid/os/Process;->myPid()I + + move-result v11 + + invoke-static {v11}, Landroid/os/Process;->killProcess(I)V + + .line 66 + :goto_1 + new-instance v11, Landroid/app/AlertDialog$Builder; + + const v12, 0x103023d + + invoke-direct {v11, v0, v12}, Landroid/app/AlertDialog$Builder;->(Landroid/content/Context;I)V + + const-string v12, "wowlikon+ID" + + .line 67 + invoke-virtual {v11, v12}, Landroid/app/AlertDialog$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder; + + move-result-object v11 + + .line 68 + invoke-virtual {v11, v3}, Landroid/app/AlertDialog$Builder;->setIcon(Landroid/graphics/drawable/Drawable;)Landroid/app/AlertDialog$Builder; + + move-result-object v3 + + const-string v11, "%D0%9C%D0%BE%D0%B4+%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D0%BD+wowlikon+%D1%81+%D0%BD%D0%BE%D0%B2%D1%8B%D1%8B%D0%BC%D0%B8+%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%D0%BC%D0%B8%21%0A%0A%D0%A1%D0%B4%D0%B5%D0%BB%D0%B0%D0%BD%D0%BE+%D1%81+%E2%9D%A4%EF%B8%8F+%D0%BE%D1%82+wowlikon" + + .line 69 + invoke-virtual {v3, v11}, Landroid/app/AlertDialog$Builder;->setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder; + + move-result-object v3 + + new-instance v11, Lcom/wowlikon/about/$4; + + invoke-direct {v11}, Lcom/wowlikon/about/$4;->()V + + const-string v12, "\u041c\u044b \u0432 Telegram" + + .line 70 + invoke-virtual {v3, v12, v11}, Landroid/app/AlertDialog$Builder;->setPositiveButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder; + + move-result-object v3 + + new-instance v11, Lcom/wowlikon/about/$3; + + invoke-direct {v11}, Lcom/wowlikon/about/$3;->()V + + const-string v12, "\u041f\u043e\u043d\u044f\u0442\u043d\u043e" + + .line 71 + invoke-virtual {v3, v12, v11}, Landroid/app/AlertDialog$Builder;->setNeutralButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder; + + move-result-object v3 + + .line 72 + invoke-virtual {v3, v4}, Landroid/app/AlertDialog$Builder;->setCancelable(Z)Landroid/app/AlertDialog$Builder; + + move-result-object v3 + + .line 73 + invoke-virtual {v3}, Landroid/app/AlertDialog$Builder;->create()Landroid/app/AlertDialog; + + move-result-object v3 + + .line 75 + new-instance v11, Lcom/wowlikon/about/$1; + + invoke-direct {v11}, Lcom/wowlikon/about/$1;->()V + + const/16 v12, 0x14 + + invoke-virtual {v11, v5, v12}, Lcom/wowlikon/about/$1;->oooooo(II)Lcom/wowlikon/about/$1; + + move-result-object v5 + + .line 77 + invoke-virtual {v3}, Landroid/app/Dialog;->getWindow()Landroid/view/Window; + + move-result-object v11 + + invoke-virtual {v11, v5}, Landroid/view/Window;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V + + .line 78 + invoke-virtual {v3}, Landroid/app/Dialog;->show()V + + .line 80 + invoke-virtual {v3}, Landroid/app/Dialog;->isShowing()Z + + move-result v5 + + if-nez v5, :cond_2 + + .line 81 + invoke-virtual {v3}, Landroid/app/Dialog;->show()V + + .line 84 + :cond_2 + :try_start_1 + invoke-virtual {v3}, Ljava/lang/Object;->getClass()Ljava/lang/Class; + + move-result-object v5 + + const-string v11, "isShowing" + + new-array v12, v4, [Ljava/lang/Class; + + invoke-virtual {v5, v11, v12}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; + + move-result-object v5 + + new-array v11, v4, [Ljava/lang/Object; + + invoke-virtual {v5, v3, v11}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v5 + + sget-object v11, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean; + + if-ne v5, v11, :cond_3 + + .line 85 + invoke-virtual {v3}, Ljava/lang/Object;->getClass()Ljava/lang/Class; + + move-result-object v5 + + const-string v11, "show" + + new-array v12, v4, [Ljava/lang/Class; + + invoke-virtual {v5, v11, v12}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; + + move-result-object v5 + + new-array v4, v4, [Ljava/lang/Object; + + invoke-virtual {v5, v3, v4}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; + :try_end_1 + .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_1 + + goto :goto_2 + + .line 87 + :catch_1 + invoke-static {}, Landroid/os/Process;->myPid()I + + move-result v4 + + invoke-static {v4}, Landroid/os/Process;->killProcess(I)V + + .line 90 + :cond_3 + :goto_2 + new-instance v4, Landroid/util/DisplayMetrics; + + invoke-direct {v4}, Landroid/util/DisplayMetrics;->()V + + .line 91 + invoke-virtual {v3}, Landroid/app/Dialog;->getWindow()Landroid/view/Window; + + move-result-object v5 + + invoke-virtual {v5}, Landroid/view/Window;->getWindowManager()Landroid/view/WindowManager; + + move-result-object v5 + + invoke-interface {v5}, Landroid/view/WindowManager;->getDefaultDisplay()Landroid/view/Display; + + move-result-object v5 + + invoke-virtual {v5, v4}, Landroid/view/Display;->getMetrics(Landroid/util/DisplayMetrics;)V + + .line 92 + iget v5, v4, Landroid/util/DisplayMetrics;->widthPixels:I + + int-to-float v5, v5 + + .line 93 + iget v11, v4, Landroid/util/DisplayMetrics;->densityDpi:I + + const/16 v12, 0x3c0 + + if-lt v11, v12, :cond_4 + + const/high16 v11, 0x3f000000 # 0.5f + + :goto_3 + mul-float v5, v5, v11 + + goto :goto_4 + + :cond_4 + const/16 v12, 0x280 + + if-lt v11, v12, :cond_5 + + const v11, 0x3f19999a # 0.6f + + goto :goto_3 + + :cond_5 + const/high16 v11, 0x3f400000 # 0.75f + + goto :goto_3 + + .line 102 + :goto_4 + invoke-virtual {v3}, Landroid/app/Dialog;->getWindow()Landroid/view/Window; + + move-result-object v11 + + float-to-int v5, v5 + + const/4 v12, -0x2 + + invoke-virtual {v11, v5, v12}, Landroid/view/Window;->setLayout(II)V + + .line 104 + invoke-virtual/range {p0 .. p0}, Landroid/content/Context;->getResources()Landroid/content/res/Resources; + + move-result-object v5 + + const-string v11, "title_template" + + const-string v13, "id" + + const-string v14, "android" + + invoke-virtual {v5, v11, v13, v14}, Landroid/content/res/Resources;->getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I + + move-result v5 + + invoke-virtual {v3, v5}, Landroid/app/Dialog;->findViewById(I)Landroid/view/View; + + move-result-object v5 + + check-cast v5, Landroid/widget/LinearLayout; + + const v11, 0x1020006 + + .line 105 + invoke-virtual {v3, v11}, Landroid/app/Dialog;->findViewById(I)Landroid/view/View; + + move-result-object v11 + + check-cast v11, Landroid/widget/ImageView; + + .line 106 + invoke-virtual/range {p0 .. p0}, Landroid/content/Context;->getResources()Landroid/content/res/Resources; + + move-result-object v0 + + const-string v15, "alertTitle" + + invoke-virtual {v0, v15, v13, v14}, Landroid/content/res/Resources;->getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I + + move-result v0 + + invoke-virtual {v3, v0}, Landroid/app/Dialog;->findViewById(I)Landroid/view/View; + + move-result-object v0 + + check-cast v0, Landroid/widget/TextView; + + const v13, 0x102000b + + .line 107 + invoke-virtual {v3, v13}, Landroid/app/Dialog;->findViewById(I)Landroid/view/View; + + move-result-object v13 + + check-cast v13, Landroid/widget/TextView; + + const v14, 0x1020019 + + .line 108 + invoke-virtual {v3, v14}, Landroid/app/Dialog;->findViewById(I)Landroid/view/View; + + move-result-object v14 + + check-cast v14, Landroid/widget/Button; + + const v15, 0x102001b + + .line 109 + invoke-virtual {v3, v15}, Landroid/app/Dialog;->findViewById(I)Landroid/view/View; + + move-result-object v3 + + check-cast v3, Landroid/widget/Button; + + .line 112 + :try_start_2 + invoke-virtual {v13}, Landroid/widget/TextView;->getText()Ljava/lang/CharSequence; + + move-result-object v15 + + invoke-interface {v15}, Ljava/lang/CharSequence;->toString()Ljava/lang/String; + + move-result-object v15 + + invoke-static {v15, v1}, Ljava/net/URLDecoder;->decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v15 + + invoke-virtual {v13, v15}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V + :try_end_2 + .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_2} :catch_2 + + goto :goto_5 + + :catch_2 + const-string v15, "Error: failed to decode one or multiple special characters" + + .line 114 + invoke-virtual {v13, v15}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V + + .line 118 + :goto_5 + :try_start_3 + invoke-virtual {v0}, Landroid/widget/TextView;->getText()Ljava/lang/CharSequence; + + move-result-object v15 + + invoke-interface {v15}, Ljava/lang/CharSequence;->toString()Ljava/lang/String; + + move-result-object v15 + + invoke-static {v15, v1}, Ljava/net/URLDecoder;->decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V + :try_end_3 + .catch Ljava/lang/Exception; {:try_start_3 .. :try_end_3} :catch_3 + + goto :goto_6 + + :catch_3 + const-string v1, "Unknown special characters" + + .line 120 + invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V + + :goto_6 + const/high16 v1, 0x41a00000 # 20.0f + + const/4 v15, 0x1 + + .line 123 + invoke-static {v15, v1, v4}, Landroid/util/TypedValue;->applyDimension(IFLandroid/util/DisplayMetrics;)F + + move-result v1 + + float-to-int v1, v1 + + const/high16 v12, 0x41700000 # 15.0f + + move-object/from16 p0, v3 + + .line 124 + invoke-static {v15, v12, v4}, Landroid/util/TypedValue;->applyDimension(IFLandroid/util/DisplayMetrics;)F + + move-result v3 + + float-to-int v3, v3 + + .line 125 + invoke-virtual {v5, v10}, Landroid/widget/LinearLayout;->setBackgroundColor(I)V + + const/16 v10, 0x11 + + .line 126 + invoke-virtual {v5, v10}, Landroid/widget/LinearLayout;->setGravity(I)V + + .line 127 + invoke-virtual {v5, v1, v3, v1, v3}, Landroid/widget/LinearLayout;->setPadding(IIII)V + + const/high16 v1, 0x42820000 # 65.0f + + .line 129 + invoke-static {v15, v1, v4}, Landroid/util/TypedValue;->applyDimension(IFLandroid/util/DisplayMetrics;)F + + move-result v1 + + float-to-int v1, v1 + + .line 130 + new-instance v3, Landroid/widget/LinearLayout$LayoutParams; + + invoke-direct {v3, v1, v1}, Landroid/widget/LinearLayout$LayoutParams;->(II)V + + .line 131 + invoke-static {v15, v12, v4}, Landroid/util/TypedValue;->applyDimension(IFLandroid/util/DisplayMetrics;)F + + move-result v1 + + float-to-int v1, v1 + + iput v1, v3, Landroid/widget/LinearLayout$LayoutParams;->rightMargin:I + + .line 133 + invoke-virtual {v11, v3}, Landroid/widget/ImageView;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V + + .line 134 + sget-object v1, Landroid/widget/ImageView$ScaleType;->FIT_XY:Landroid/widget/ImageView$ScaleType; + + invoke-virtual {v11, v1}, Landroid/widget/ImageView;->setScaleType(Landroid/widget/ImageView$ScaleType;)V + + .line 136 + invoke-virtual {v13, v15}, Landroid/widget/TextView;->setTextAlignment(I)V + + const/16 v1, 0x11 + + .line 137 + invoke-virtual {v13, v1}, Landroid/widget/TextView;->setGravity(I)V + + .line 138 + invoke-virtual {v13, v7}, Landroid/widget/TextView;->setTextColor(I)V + + .line 139 + invoke-virtual {v13, v2}, Landroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;)V + + .line 141 + invoke-virtual {v2}, Landroid/graphics/Typeface;->isBold()Z + + move-result v1 + + invoke-virtual {v0, v2, v1}, Landroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;I)V + + .line 142 + invoke-virtual {v0, v6}, Landroid/widget/TextView;->setTextColor(I)V + + .line 143 + new-instance v1, Landroid/widget/LinearLayout$LayoutParams; + + const/4 v3, -0x2 + + invoke-direct {v1, v3, v3}, Landroid/widget/LinearLayout$LayoutParams;->(II)V + + invoke-virtual {v0, v1}, Landroid/widget/TextView;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V + + const/4 v1, 0x2 + + .line 144 + invoke-virtual {v0, v1}, Landroid/widget/TextView;->setMaxLines(I)V + + .line 145 + sget-object v1, Landroid/text/TextUtils$TruncateAt;->END:Landroid/text/TextUtils$TruncateAt; + + invoke-virtual {v0, v1}, Landroid/widget/TextView;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)V + + .line 147 + invoke-virtual {v14, v8}, Landroid/widget/Button;->setTextColor(I)V + + .line 148 + invoke-virtual {v14, v2}, Landroid/widget/Button;->setTypeface(Landroid/graphics/Typeface;)V + + move-object/from16 v3, p0 + + .line 150 + invoke-virtual {v3, v9}, Landroid/widget/Button;->setTextColor(I)V + + .line 151 + invoke-virtual {v3, v2}, Landroid/widget/Button;->setTypeface(Landroid/graphics/Typeface;)V + + return-object v2 +.end method diff --git a/patches/resources/smali_classes4/com/swiftsoft/about/$3.smali b/patches/resources/smali_classes4/com/swiftsoft/about/$3.smali new file mode 100644 index 0000000..3669c6b --- /dev/null +++ b/patches/resources/smali_classes4/com/swiftsoft/about/$3.smali @@ -0,0 +1,83 @@ +.class public Lcom/wowlikon/about/$3; +.super Ljava/lang/Object; + +# interfaces +.implements Landroid/content/DialogInterface$OnClickListener; + + +# direct methods +.method public constructor ()V + .locals 0 + + .line 11 + invoke-direct {p0}, Ljava/lang/Object;->()V + + return-void +.end method + + +# virtual methods +.method public onClick(Landroid/content/DialogInterface;I)V + .locals 1 + + .line 23 + invoke-virtual {p0, p1}, Lcom/wowlikon/about/$3;->oooooo(Ljava/lang/Object;)V + + const-string p1, "Dialog" + + const-string p2, "Dismissed" + + .line 24 + invoke-static {p1, p2}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I + + .line 25 + invoke-static {}, Ljava/util/logging/Logger;->getGlobal()Ljava/util/logging/Logger; + + move-result-object p1 + + sget-object p2, Ljava/util/logging/Level;->INFO:Ljava/util/logging/Level; + + const-string v0, "Dialog Cancelled" + + invoke-virtual {p1, p2, v0}, Ljava/util/logging/Logger;->log(Ljava/util/logging/Level;Ljava/lang/String;)V + + return-void +.end method + +.method protected oooooo(Ljava/lang/Object;)V + .locals 1 + + .line 13 + instance-of v0, p1, Landroid/app/AlertDialog; + + if-eqz v0, :cond_0 + + .line 14 + check-cast p1, Landroid/app/AlertDialog; + + invoke-virtual {p1}, Landroid/app/AlertDialog;->dismiss()V + + goto :goto_0 + + .line 15 + :cond_0 + instance-of v0, p1, Landroid/app/Dialog; + + if-eqz v0, :cond_1 + + .line 16 + check-cast p1, Landroid/app/Dialog; + + invoke-virtual {p1}, Landroid/app/Dialog;->dismiss()V + + goto :goto_0 + + .line 18 + :cond_1 + check-cast p1, Landroid/content/DialogInterface; + + invoke-interface {p1}, Landroid/content/DialogInterface;->dismiss()V + + :goto_0 + return-void +.end method diff --git a/patches/resources/smali_classes4/com/swiftsoft/about/$4.smali b/patches/resources/smali_classes4/com/swiftsoft/about/$4.smali new file mode 100644 index 0000000..1daaefc --- /dev/null +++ b/patches/resources/smali_classes4/com/swiftsoft/about/$4.smali @@ -0,0 +1,66 @@ +.class public Lcom/wowlikon/about/$4; +.super Ljava/lang/Object; + +# interfaces +.implements Landroid/content/DialogInterface$OnClickListener; + + +# direct methods +.method public constructor ()V + .locals 0 + + .line 12 + invoke-direct {p0}, Ljava/lang/Object;->()V + + return-void +.end method + + +# virtual methods +.method public onClick(Landroid/content/DialogInterface;I)V + .locals 2 + + .line 15 + invoke-interface {p1}, Landroid/content/DialogInterface;->dismiss()V + + .line 17 + check-cast p1, Landroid/app/Dialog; + + invoke-virtual {p1}, Landroid/app/Dialog;->getContext()Landroid/content/Context; + + move-result-object p1 + + new-instance p2, Landroid/content/Intent; + + const-string v0, "https://t.me/wowlikon" + + invoke-static {v0}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri; + + move-result-object v0 + + const-string v1, "android.intent.action.VIEW" + + invoke-direct {p2, v1, v0}, Landroid/content/Intent;->(Ljava/lang/String;Landroid/net/Uri;)V + + invoke-virtual {p1, p2}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V + + const-string p1, "Dialog" + + const-string p2, "Redirected" + + .line 18 + invoke-static {p1, p2}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I + + .line 19 + invoke-static {}, Ljava/util/logging/Logger;->getGlobal()Ljava/util/logging/Logger; + + move-result-object p1 + + sget-object p2, Ljava/util/logging/Level;->INFO:Ljava/util/logging/Level; + + const-string v0, "Dialog Channel Link Clicked" + + invoke-virtual {p1, p2, v0}, Ljava/util/logging/Logger;->log(Ljava/util/logging/Level;Ljava/lang/String;)V + + return-void +.end method diff --git a/patches/resources/smali_classes4/com/swiftsoft/authorization/AutoLogin.smali b/patches/resources/smali_classes4/com/swiftsoft/authorization/AutoLogin.smali new file mode 100644 index 0000000..e7c2a2f --- /dev/null +++ b/patches/resources/smali_classes4/com/swiftsoft/authorization/AutoLogin.smali @@ -0,0 +1,2 @@ +.class public Lcom/wowlikon/authorization/AutoLogin; +.super Ljava/lang/Object; diff --git a/patches/resources/smali_classes4/com/swiftsoft/authorization/FirebaseDB.smali b/patches/resources/smali_classes4/com/swiftsoft/authorization/FirebaseDB.smali new file mode 100644 index 0000000..2e0883c --- /dev/null +++ b/patches/resources/smali_classes4/com/swiftsoft/authorization/FirebaseDB.smali @@ -0,0 +1,2 @@ +.class public Lcom/wowlikon/authorization/FirebaseDB; +.super Ljava/lang/Object; diff --git a/patches/resources/smali_classes4/com/swiftsoft/authorization/Login.smali b/patches/resources/smali_classes4/com/swiftsoft/authorization/Login.smali new file mode 100644 index 0000000..d87e0f1 --- /dev/null +++ b/patches/resources/smali_classes4/com/swiftsoft/authorization/Login.smali @@ -0,0 +1,2 @@ +.class public Lcom/wowlikon/authorization/Login; +.super Ljava/lang/Object; diff --git a/patches/resources/smali_classes4/com/swiftsoft/authorization/SaveLoginLocal.smali b/patches/resources/smali_classes4/com/swiftsoft/authorization/SaveLoginLocal.smali new file mode 100644 index 0000000..43c565b --- /dev/null +++ b/patches/resources/smali_classes4/com/swiftsoft/authorization/SaveLoginLocal.smali @@ -0,0 +1,2 @@ +.class public Lcom/wowlikon/authorization/SaveLoginLocal; +.super Ljava/lang/Object; diff --git a/patches/resources/torlook-fs8.png b/patches/resources/torlook-fs8.png new file mode 100644 index 0000000..5604b9f Binary files /dev/null and b/patches/resources/torlook-fs8.png differ diff --git a/patches/resources/wowlikon.png b/patches/resources/wowlikon.png new file mode 100644 index 0000000..e0f3eb9 Binary files /dev/null and b/patches/resources/wowlikon.png differ diff --git a/patches/resources/ytsans_medium.ttf b/patches/resources/ytsans_medium.ttf new file mode 100644 index 0000000..c6c02af Binary files /dev/null and b/patches/resources/ytsans_medium.ttf differ