# Alpaka
Alpaka is a command-line tool designed for mapping classes across different
versions of the same APK. This is particularly useful for reverse engineering,
allowing you to track class renames and changes across different builds, and
preserving manual deobfuscation efforts.
## Features
* Class Mapping: Generates a JSON mapping of classes from one APK version to another.
* Deobfuscation Migration: Migrate existing Enigma deobfuscation
mapping files to new APK versions, helping maintain your renaming efforts
in tools like Jadx.
## Usage
### Basic Class Mapping
Output a JSON mapping from `A.apk` (older version) to `B.apk` (newer version).
This will show how classes in `A.apk` correspond to classes in `B.apk`.
```console
> alpaka map A.apk B.apk1
{
"LX/003;": "LX/003;",
"LX/004;": "LX/004;",
"LX/005;": "LX/005;",
"LX/006;": "LX/006;",
...
```
### Migrating Deobfuscation Mappings Across Versions
If you have an Enigma mapping file (e.g., `A.mapping`) for `A.apk`, you can use
Alpaka to generate a new mapping file (`B.mapping`) that applies your existing
renames to `B.apk`. This is incredibly useful for maintaining your manual
deobfuscation work when a new version of the APK is released.
The generated `B.mapping` file can then be imported into tools like Jadx to preserve your manual renamings!
```console
> alpaka map --deobfuscation A.mapping --only-obfuscated A.apk B.apk1 > B.mapping
```
### Advanced Options
The `map` command supports several options to fine-tune its behavior:
* `--only-obfuscated`: Prevents Alpaka from creating unnecessary mappings
between unobfuscated classes.
* `--no-propagation`: Only run the first analysis stage. Usually leads to more
accurate results but fewer mappings overall.
## License
Alpaka is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
Raw data
{
"_id": null,
"home_page": null,
"name": "alpaka-re",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "apk, android, mapping, reverse-engineering, deobfuscation",
"author": null,
"author_email": "Daniel Firer <danielfirefire@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/6c/ef/d03dd1cee439c3aae58d2dfac151aa4460f86d9d836f13d3ab8fd7fbf00a/alpaka_re-0.1.0.tar.gz",
"platform": null,
"description": "# Alpaka\n\nAlpaka is a command-line tool designed for mapping classes across different\nversions of the same APK. This is particularly useful for reverse engineering,\nallowing you to track class renames and changes across different builds, and\npreserving manual deobfuscation efforts.\n\n## Features\n\n* Class Mapping: Generates a JSON mapping of classes from one APK version to another.\n\n* Deobfuscation Migration: Migrate existing Enigma deobfuscation\n mapping files to new APK versions, helping maintain your renaming efforts\n in tools like Jadx.\n\n## Usage\n\n### Basic Class Mapping\n\nOutput a JSON mapping from `A.apk` (older version) to `B.apk` (newer version).\nThis will show how classes in `A.apk` correspond to classes in `B.apk`.\n\n```console\n> alpaka map A.apk B.apk1\n{\n \"LX/003;\": \"LX/003;\",\n \"LX/004;\": \"LX/004;\",\n \"LX/005;\": \"LX/005;\",\n \"LX/006;\": \"LX/006;\",\n...\n```\n\n### Migrating Deobfuscation Mappings Across Versions\n\nIf you have an Enigma mapping file (e.g., `A.mapping`) for `A.apk`, you can use\nAlpaka to generate a new mapping file (`B.mapping`) that applies your existing\nrenames to `B.apk`. This is incredibly useful for maintaining your manual\ndeobfuscation work when a new version of the APK is released.\n\nThe generated `B.mapping` file can then be imported into tools like Jadx to preserve your manual renamings!\n\n```console\n> alpaka map --deobfuscation A.mapping --only-obfuscated A.apk B.apk1 > B.mapping\n```\n\n### Advanced Options\n\nThe `map` command supports several options to fine-tune its behavior:\n\n* `--only-obfuscated`: Prevents Alpaka from creating unnecessary mappings\n between unobfuscated classes.\n* `--no-propagation`: Only run the first analysis stage. Usually leads to more\n accurate results but fewer mappings overall.\n\n## License\n\nAlpaka is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.\n\n",
"bugtrack_url": null,
"license": null,
"summary": "A tool for mapping classes between different versions of the same APK.",
"version": "0.1.0",
"project_urls": {
"Bug Tracker": "https://github.com/DanielFi/alpaka/issues",
"Homepage": "https://github.com/DanielFi/alpaka",
"Repository": "https://github.com/DanielFi/alpaka"
},
"split_keywords": [
"apk",
" android",
" mapping",
" reverse-engineering",
" deobfuscation"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "470eb1125f5e66eb967162d508f5f199056f300288eeb3e7c1a4e4a95124c6c9",
"md5": "a575927429526669277c6117bf9ea179",
"sha256": "660b2df51a58092794ccabe7807b640a4b4a8400ed02937045a15081e7fa740c"
},
"downloads": -1,
"filename": "alpaka_re-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a575927429526669277c6117bf9ea179",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 8915,
"upload_time": "2025-07-23T15:22:03",
"upload_time_iso_8601": "2025-07-23T15:22:03.372505Z",
"url": "https://files.pythonhosted.org/packages/47/0e/b1125f5e66eb967162d508f5f199056f300288eeb3e7c1a4e4a95124c6c9/alpaka_re-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6cefd03dd1cee439c3aae58d2dfac151aa4460f86d9d836f13d3ab8fd7fbf00a",
"md5": "d2311feed6454c26f8b6d29f9f10672d",
"sha256": "3fbbc5c3902a92d728cadaa38f1168343c541b13c366fc17f08c6f8ba975975c"
},
"downloads": -1,
"filename": "alpaka_re-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "d2311feed6454c26f8b6d29f9f10672d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 7758,
"upload_time": "2025-07-23T15:22:04",
"upload_time_iso_8601": "2025-07-23T15:22:04.654621Z",
"url": "https://files.pythonhosted.org/packages/6c/ef/d03dd1cee439c3aae58d2dfac151aa4460f86d9d836f13d3ab8fd7fbf00a/alpaka_re-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-23 15:22:04",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "DanielFi",
"github_project": "alpaka",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "lief",
"specs": []
},
{
"name": "click",
"specs": []
}
],
"lcname": "alpaka-re"
}