diff --git a/.gitignore b/.gitignore index f19ed73..753760c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ -decompiled/* -modified/* -original/* -tools/* +decompiled +modified +original +tools -__pycache__/ +__pycache__ +.venv \ No newline at end of file diff --git a/patches/disable_ad.py b/patches/disable_ad.py new file mode 100644 index 0000000..30e8a95 --- /dev/null +++ b/patches/disable_ad.py @@ -0,0 +1,33 @@ +"""Disable ad banners""" + +priority = 0 + +from utils.smali_parser import ( + find_smali_method_end, + find_smali_method_start, + get_smali_lines, + replace_smali_method_body, +) + +replace = """ .locals 0 + + const/4 p0, 0x1 + + return p0 +""" + + +def apply(config) -> bool: + path = "./decompiled/smali_classes2/com/swiftsoft/anixartd/Prefs.smali" + lines = get_smali_lines(path) + for index, line in enumerate(lines): + if line.find("IS_SPONSOR") >= 0: + method_start = find_smali_method_start(lines, index) + method_end = find_smali_method_end(lines, index) + new_content = replace_smali_method_body( + lines, method_start, method_end, replace + ) + + with open(path, "w", encoding="utf-8") as file: + file.writelines(new_content) + return True diff --git a/patches/disable_beta_banner.py b/patches/disable_beta_banner.py new file mode 100644 index 0000000..2e2d417 --- /dev/null +++ b/patches/disable_beta_banner.py @@ -0,0 +1,39 @@ +"""Remove beta banner""" + +priority = 0 +import os +from tqdm import tqdm +from lxml import etree + +from typing import TypedDict + + +def apply(config) -> bool: + attributes = [ + "paddingTop", + "paddingBottom", + "paddingStart", + "paddingEnd", + "layout_width", + "layout_height", + "layout_marginTop", + "layout_marginBottom", + "layout_marginStart", + "layout_marginEnd", + ] + + beta_banner_xml = "./decompiled/res/layout/item_beta.xml" + if os.path.exists(beta_banner_xml): + parser = etree.XMLParser(remove_blank_text=True) + tree = etree.parse(beta_banner_xml, parser) + root = tree.getroot() + + for attr in attributes: + # tqdm.write(f"set {attr} = 0.0dip") + root.set(f"{{{config["xml_ns"]['android']}}}{attr}", "0.0dip") + + tree.write( + beta_banner_xml, pretty_print=True, xml_declaration=True, encoding="utf-8" + ) + + return True diff --git a/patches/package_name.py b/patches/package_name.py index b63e806..6cf5565 100644 --- a/patches/package_name.py +++ b/patches/package_name.py @@ -35,20 +35,32 @@ def apply(config: dict) -> bool: 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(".", "/"), - ), - ) + if os.path.exists("./decompiled/smali/com/swiftsoft/anixartd"): + rename_dir( + "./decompiled/smali/com/swiftsoft/anixartd", + os.path.join( + "./decompiled", "smali", config["new_package_name"].replace(".", "/") + ), + ) + if os.path.exists("./decompiled/smali_classes2/com/swiftsoft/anixartd"): + rename_dir( + "./decompiled/smali_classes2/com/swiftsoft/anixartd", + os.path.join( + "./decompiled", + "smali_classes2", + config["new_package_name"].replace(".", "/"), + ), + ) + if os.path.exists("./decompiled/smali_classes4/com/swiftsoft"): + rename_dir( + "./decompiled/smali_classes4/com/swiftsoft", + os.path.join( + "./decompiled", + "smali_classes4", + "/".join(config["new_package_name"].split(".")[:-1]), + ), + ) + # rename_dir( # "./decompiled/smali_classes3/com/swiftsoft/anixartd", # os.path.join( @@ -57,17 +69,7 @@ def apply(config: dict) -> bool: # config["new_package_name"].replace(".", "/"), # ), # ) - if not os.path.exists("./decompiled/smali_classes4/"): - return True - rename_dir( - "./decompiled/smali_classes4/com/swiftsoft/anixartd", - os.path.join( - "./decompiled", - "smali_classes4", - config["new_package_name"].replace(".", "/"), - ), - ) for root, dirs, files in os.walk("./decompiled/smali_classes4/"): for filename in files: file_path = os.path.join(root, filename) @@ -77,7 +79,7 @@ def apply(config: dict) -> bool: with open(file_path, "r", encoding="utf-8") as file: file_contents = file.read() - new_contents = new_contents.replace( + new_contents = file_contents.replace( "com/swiftsoft", "/".join(config["new_package_name"].split(".")[:-1]), ) @@ -86,8 +88,6 @@ def apply(config: dict) -> bool: except: pass - os.rmdir("./decompiled/smali_classes2/com/swiftsoft") - return True diff --git a/todo_drafts/todo1.txt b/todo_drafts/todo1.txt new file mode 100644 index 0000000..9b341e7 --- /dev/null +++ b/todo_drafts/todo1.txt @@ -0,0 +1,10 @@ +/res/layout/monetization_ads_internal_rewarded_close_verification.xml +❯ diff a.txt b.txt +4c4 +< android:background="@drawable/monetization_ads_internal_rewarded_close_verification_button_close_background" +--- +> android:background="@drawable/draw030e" +16c16 +< android:background="@drawable/monetization_ads_internal_rewarded_close_verification_button_dismiss_background" +--- +> android:background="@drawable/draw030f" diff --git a/todo_drafts/todo2.txt b/todo_drafts/todo2.txt new file mode 100644 index 0000000..4f5b712 --- /dev/null +++ b/todo_drafts/todo2.txt @@ -0,0 +1,27 @@ +/res/layout/release_info.xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/todo_drafts/todo3.txt b/todo_drafts/todo3.txt new file mode 100644 index 0000000..cbf0e14 --- /dev/null +++ b/todo_drafts/todo3.txt @@ -0,0 +1,2 @@ +/res/menu/bottom.xml +replace lines diff --git a/todo_drafts/todo4.txt b/todo_drafts/todo4.txt new file mode 100644 index 0000000..382b5d0 --- /dev/null +++ b/todo_drafts/todo4.txt @@ -0,0 +1 @@ +#ff000000 diff --git a/utils/smali_parser.py b/utils/smali_parser.py new file mode 100644 index 0000000..f8d1c62 --- /dev/null +++ b/utils/smali_parser.py @@ -0,0 +1,58 @@ +def get_smali_lines(file: str) -> list[str]: + lines = [] + with open(file, "r", encoding="utf-8") as smali: + lines = smali.readlines() + return lines + +def find_smali_method_start(lines: list[str], index: int) -> int: + while True: + index -= 1 + if lines[index].find(".method") >= 0: + return index + +def find_smali_method_end(lines: list[str], index: int) -> int: + while True: + index += 1 + if lines[index].find(".end method") >= 0: + return index + +def debug_print_smali_method(lines: list[str], start: int, end: int) -> None: + while start != (end + 1): + print(start, lines[start]) + start += 1 + +def replace_smali_method_body(lines: list[str], start: int, end: int, new_lines: list[str]) -> list[str]: + new_content = [] + index = 0 + skip = end - start - 1 + + while index != (start + 1): + new_content.append(lines[index]) + index += 1 + + for line in new_lines: + new_content.append(line) + + index += skip + while index < len(lines): + new_content.append(lines[index]) + index += 1 + + + return new_content + +# example i guess +# if __name__ == "__main__": +# lines = get_smali_lines("./decompiled/smali_classes2/com/radiquum/anixart/Prefs.smali") + +# for index, line in enumerate(lines): +# if line.find("IS_SPONSOR") >= 0: +# method_start = find_smali_method_start(lines, index) +# method_end = find_smali_method_end(lines, index) +# new_content = replace_smali_method_body(lines, method_start, method_end, c) + +# with open("./help/Prefs_orig.smali", "w", encoding="utf-8") as file: +# file.writelines(lines) +# with open("./help/Prefs_modified.smali", "w", encoding="utf-8") as file: +# file.writelines(new_content) + \ No newline at end of file