{"id":17013462,"url":"https://github.com/nebelnidas/yt-re","last_synced_at":"2025-07-25T09:11:17.165Z","repository":{"id":47427199,"uuid":"495470753","full_name":"NebelNidas/yt-re","owner":"NebelNidas","description":"YouTube Android app reverse engineering suite. Intended for research purposes only.","archived":false,"fork":false,"pushed_at":"2024-12-05T15:21:41.000Z","size":60885,"stargazers_count":22,"open_issues_count":2,"forks_count":4,"subscribers_count":2,"default_branch":"18.18.39","last_synced_at":"2025-04-12T09:11:24.961Z","etag":null,"topics":["deobfuscation","reverse-engineering","youtube"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NebelNidas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-05-23T15:34:24.000Z","updated_at":"2024-12-08T11:06:55.000Z","dependencies_parsed_at":"2024-04-03T22:43:01.495Z","dependency_job_id":"f34899c2-e510-4e28-a878-e94226a6b731","html_url":"https://github.com/NebelNidas/yt-re","commit_stats":null,"previous_names":["nebelnidas/yt-re"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NebelNidas%2Fyt-re","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NebelNidas%2Fyt-re/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NebelNidas%2Fyt-re/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NebelNidas%2Fyt-re/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NebelNidas","download_url":"https://codeload.github.com/NebelNidas/yt-re/tar.gz/refs/heads/18.18.39","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248543848,"owners_count":21121838,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deobfuscation","reverse-engineering","youtube"],"created_at":"2024-10-14T06:13:21.926Z","updated_at":"2025-04-12T09:12:23.099Z","avatar_url":"https://github.com/NebelNidas.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# YouTube App Reverse Engineering Suite\nYT-RE provides several facilities aiding the YouTube Android app reverse engineering process. These include our own set of deobfuscation mappings, tracking of obfuscated artifacts across releases, integration with several well-known reverse engineering tools and a local Git repository generator.\n\n## Getting Started\n1. Clone the repo.\n2. Download the correct version (see current branch name) of the YouTube APK, preferably from [APKMirror](https://www.apkmirror.com/apk/google-inc/youtube/) (`nodpi` is the default).\n3. Place the APK at the root of this directory and rename it to `youtube-\u003cversion\u003e.apk` (replace `\u003cversion\u003e` with the adequate version string).\n4. Run `./gradlew enigma` or `/gradlew jadx` to use and/or edit the mappings (see the tasks' descriptions below).\n5. If you want to, commit and push your work to a fork and open a PR with your changes. Please have a look at the [naming conventions](/CONVENTIONS.md) before submitting one.\n\n## Gradle Tasks\nYT-RE uses Gradle to provide a number of utility tasks for working with the mappings.\nPlease note, to run our build script **Java 17** is required!\n\n### `enigma`\nDownload, setup and launch the latest version of [Enigma](https://github.com/FabricMC/Enigma) automatically configured to use the converted jar and mappings.\n\nCompared to launching Enigma externally, the gradle task adds a name guesser plugin that automatically maps enums and a few constant field names.\n\n### `jadx`\nDownload, setup and launch the latest version of [JADX](https://github.com/skylot/jadx) automatically configured to use the provided APK and mappings.\n\nPlease do not enable JADX's built-in auto-deobfuscation, as this feature can mess with exported package names.\n\n### `buildTinyMappingFiles`\nBuild Tiny and Tiny v2 mapping files between official (obfuscated) names and our renames (\"named\").\n\n### `buildNamedJar`\nBuilds a deobfuscated jar with deobfuscation mappings applied (`youtube-\u003cyt-version\u003e-named.jar`).\n\n### Tasks for updating to a new YT version\nThese are of no use to the average user, but are listed here anyway for completeness' sake. To update the project to a new YT version, repeat steps 2 and 3 from [Getting Started](#getting-started), but this time with the YT version you want to update to. Then run the following tasks. Note that they all require passing an additional `newYtVersion` property via `-PnewYtVersion='\u003cnew-version\u003e'`.\n\n#### `matcher`\nRun [Matcher](https://github.com/NebelNidas/Matcher) with the provided `youtube-\u003ccurrent-version\u003e.apk` and `youtube-\u003cnew-version\u003e.apk` as inputs, so you can update the mappings to a newer YT version.\n\nAs soon as Matcher is started and has analyzed its input files, select `Matching` → `Auto match all`. Depending on your Computer's hardware, this may take several hours. A modern multi-core CPU with at least 6 cores and 16 GB of RAM are recommended! Matcher itself requires at least 6 GB of memory. After the process has finished, take care of the remaining red entries. You may have to double-check each class and method if any containing children are still unmatched. If you can't find a similar enough counterpart, perhaps the class/method/etc. has been removed from the newer APK. In this case, click the \"unmatchable\" button in the bottom pane.\n\nOnce you're confident with your results, go to `File` → `Save matches` and save the file into the `matches` folder. Please name it `\u003ccurrent-version\u003e - \u003cnew-version\u003e.match`; see the already existent match files.\n\nTo update the mappings, go to to `File` → `Save mappings (Enigma)`, select the `mappings` folder, give permission to overwrite the existing data and use the following configuration to export the updated files:\\\n![mapping export configuration](https://user-images.githubusercontent.com/48808497/202928899-1d90bdfe-d8bd-4565-8e94-23e7fce2e8b8.png)\n\n#### `jadxNewYtVersion`\nOpens the new YouTube version's APK in JADX. This task should only be used for assisting in the matching process, don't import or export any mappings from there.\n\n#### `updateIntermediary`\nGenerates a new Tiny file with updated intermediaries into the [`./intermediary`](./intermediary/) directory.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnebelnidas%2Fyt-re","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnebelnidas%2Fyt-re","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnebelnidas%2Fyt-re/lists"}