From c8197a8c472e96080a51dd4609808d7ba2ef9a5b Mon Sep 17 00:00:00 2001 From: zx Date: Sun, 8 Sep 2024 22:31:26 -0400 Subject: [PATCH] feat: .cyan files --- README.md | 20 ++++++++++++-------- cyan/__main__.py | 4 ++++ cyan/logic.py | 4 ++++ cyan/tbhutils.py | 32 +++++++++++++++++++++++++++++++- test.cyan | Bin 0 -> 26257 bytes 5 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 test.cyan diff --git a/README.md b/README.md index 431970d..136e5f3 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,14 @@ # pyzule-rw / cyan -rewriting [pyzule](https://github.com/asdfzxcvbn/pyzule), but actually good this time! btw.. cyan/pyzule looks best with a monospace font !! :D +a rewrite of [pyzule](https://github.com/asdfzxcvbn/pyzule) that doesn't (completely) suck !! -this is pretty much just a hobby project that i'll work on when i'm bored. pyzule in its current state is kinda ugly, but it works and i haven't really had the motivation to work on it. there really isn't any need for improvements, anyway.. - -`cyan` will ~~target python v3.12 (finally!)~~, be pep8-compliant (hopefully..), and be type-hinted! +cyan supports **linux, macOS, WSL, and jailbroken iOS!** all either x86_64 or arm64/aarch64 !! ## features more coming soon! i'm trying to copy pyzule in order to deprecate it in favor of cyan, which is 1000x better +- generate and use [shareable .cyan files](https://github.com/asdfzxcvbn/cyan-gen) to configure IPAs! - inject deb, dylib, framework, bundle, and appex files/folders - automatically fix dependencies on CydiaSubstrate **(cyan uses [ElleKit](https://github.com/evelyneee/ellekit/)!)**, Cephei*, and Orion - copy any unknown file/folder types to app root @@ -23,8 +22,6 @@ more coming soon! i'm trying to copy pyzule in order to deprecate it in favor of ## install instructions -cyan works on linux, macOS, WSL, and jailbroken iOS! - first, make sure you have [ar](https://command-not-found.com/ar) and [tar](https://command-not-found.com/tar) installed also obviously install python, version 3.9 or greater is required (the version available on the procursus repo for iOS) @@ -35,7 +32,12 @@ also obviously install python, version 3.9 or greater is required (the version a then finally, to install or update cyan, just `pip install --force-reinstall git+https://github.com/asdfzxcvbn/pyzule-rw.git#egg=cyan` -## todo +## acknowledgements + +- [Al4ise](https://github.com/Al4ise) for the original [Azule](https://github.com/Al4ise/Azule) +- [lief-project](https://github.com/lief-project) for [LIEF](https://github.com/lief-project/LIEF) + +### todo [x] refactor: dont prepare, just copy and fix as you go @@ -51,5 +53,7 @@ then finally, to install or update cyan, just `pip install --force-reinstall git [x] feat: change app icon -[] feat: .cyan files (lol rip .pyzule files) +[x] feat: .cyan files (lol rip .pyzule files) + +:D diff --git a/cyan/__main__.py b/cyan/__main__.py index dd4e1e9..758ade4 100755 --- a/cyan/__main__.py +++ b/cyan/__main__.py @@ -21,6 +21,10 @@ def main() -> None: "-o", "--output", metavar="output", help="if unspecified, overwrites input" ) + parser.add_argument( + "-z", "--cyan", metavar="cyan", + help="the .cyan file to use" + ) parser.add_argument( "-f", metavar="file", nargs="+", diff --git a/cyan/logic.py b/cyan/logic.py index f104e98..1d0095a 100644 --- a/cyan/logic.py +++ b/cyan/logic.py @@ -38,6 +38,10 @@ def main(parser: ArgumentParser) -> None: else: sys.exit("[!] main binary is encrypted; exiting") + if args.cyan is not None: + changing = vars(args) + tbhutils.parse_cyan(changing, tmpdir) + # this goes before injection, # since user might inject their own extensions if args.remove_extensions: diff --git a/cyan/tbhutils.py b/cyan/tbhutils.py index 334d533..8e162bb 100644 --- a/cyan/tbhutils.py +++ b/cyan/tbhutils.py @@ -1,13 +1,14 @@ import os import sys +import json import shutil import zipfile import platform import subprocess from uuid import uuid4 -from typing import Optional from glob import glob, iglob from argparse import Namespace +from typing import Optional, Any def validate_inputs(args: Namespace) -> Optional[str]: @@ -57,6 +58,9 @@ def validate_inputs(args: Namespace) -> Optional[str]: if args.k is not None and not os.path.isfile(args.k): sys.exit(f"[!] {args.k} does not exist") + if args.cyan is not None and not os.path.isfile(args.cyan): + sys.exit(f"[!] {args.cyan} does not exist") + def get_app(path: str, tmpdir: str, is_ipa: bool) -> str: payload = f"{tmpdir}/Payload" @@ -179,3 +183,29 @@ def make_ipa(tmpdir: str, output: str, level: int) -> None: if weird != 0: print(f"[?] was unable to zip {weird} file(s) due to timestamps") + +def parse_cyan(args: dict[str, Any], tmpdir: str) -> None: + print("[*] parsing .cyan file..") + with zipfile.ZipFile(args["cyan"]) as zf: + DOT_PATH = f"{tmpdir}/cyan" + os.mkdir(DOT_PATH) + + with zf.open("config.json") as f: + config = json.load(f) + + if "f" in config: + NAMES = [n for n in zf.namelist() if n.startswith("inject/")] + zf.extractall(DOT_PATH, NAMES) + + # ensure not None + args["f"] = args["f"] if args["f"] is not None else {} + for e in os.scandir(f"{DOT_PATH}/inject"): + args["f"][e.name] = e.path + del config["f"] + if "k" in config: + args["k"] = zf.extract("icon.idk", DOT_PATH) + del config["k"] + + for k, v in config.items(): + args[k] = v + diff --git a/test.cyan b/test.cyan new file mode 100644 index 0000000000000000000000000000000000000000..14a12212b5d6c928ae79d5383e63b73a7de5857a GIT binary patch literal 26257 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 L_-mQN&FDV>`bCmx literal 0 HcmV?d00001