{"id":13845585,"url":"https://github.com/rovellipaolo/NinjaDroid","last_synced_at":"2025-07-12T03:31:26.831Z","repository":{"id":12373743,"uuid":"15025044","full_name":"rovellipaolo/NinjaDroid","owner":"rovellipaolo","description":"Ninja Reverse Engineering on Android APK packages","archived":false,"fork":false,"pushed_at":"2024-07-03T14:47:32.000Z","size":61049,"stargazers_count":267,"open_issues_count":4,"forks_count":49,"subscribers_count":12,"default_branch":"main","last_synced_at":"2024-08-05T17:44:57.576Z","etag":null,"topics":["android","androidmanifest","apk","cert","dex","docker","flatpak","reverse-engineering","snap"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rovellipaolo.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}},"created_at":"2013-12-08T14:33:02.000Z","updated_at":"2024-07-29T13:10:46.000Z","dependencies_parsed_at":"2024-03-18T11:52:27.948Z","dependency_job_id":null,"html_url":"https://github.com/rovellipaolo/NinjaDroid","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rovellipaolo%2FNinjaDroid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rovellipaolo%2FNinjaDroid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rovellipaolo%2FNinjaDroid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rovellipaolo%2FNinjaDroid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rovellipaolo","download_url":"https://codeload.github.com/rovellipaolo/NinjaDroid/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225791367,"owners_count":17524771,"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":["android","androidmanifest","apk","cert","dex","docker","flatpak","reverse-engineering","snap"],"created_at":"2024-08-04T17:03:29.316Z","updated_at":"2024-11-21T19:30:22.985Z","avatar_url":"https://github.com/rovellipaolo.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"NinjaDroid\n==========\n\nNinjaDroid is a simple tool to reverse engineering Android APK packages.\n\nPublished at: [https://snapcraft.io/ninjadroid](https://snapcraft.io/ninjadroid)\n```shell\n$ snap install ninjadroid --channel=beta\n```\n\n[![Build Status: GitHub Actions](https://github.com/rovellipaolo/NinjaDroid/actions/workflows/ci.yml/badge.svg)](https://github.com/rovellipaolo/NinjaDroid/actions)\n[![Test Coverage: Coveralls](https://coveralls.io/repos/github/rovellipaolo/NinjaDroid/badge.svg)](https://coveralls.io/github/rovellipaolo/NinjaDroid)\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n\n[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/ninjadroid)\n\n![NinjaDroid](docs/images/ninjadroid.gif \"Screencast of NinjaDroid\")\n\n\n\n## Overview\n\nNinjaDroid uses [AXMLParser](https://github.com/appknox/pyaxmlparser) together with a series of Python scripts based on `aapt`, `keytool`, `string` and such to extract a series of information from a given APK package, such as:\n\n- List of files of the APK: file name, size, MD5, SHA-1, SHA-256 and SHA-512\n- `AndroidManifest.xml` info: app name, package name, version, sdks, permissions, activities, services, broadcast-receivers, ...\n- `CERT.RSA/DSA` digital certificate info: serial number, validity, fingerprint, issuer and owner\n- List of URLs, shell commands and other generic strings hard-coded into the `classes.dex` files\n\nFurthermore, NinjaDroid uses [apktool](https://github.com/iBotPeaches/Apktool) and [dex2jar](https://github.com/pxb1988/dex2jar) to extract and store:\n\n- JSON report file, which contains all the extracted APK info\n- `AndroidManifest.xml` file (thanks to `apktool`)\n- `CERT.RSA/DSA` digital certificate file\n- `classes.dex` files\n- translated _.jar_ file (thanks to `dex2jar`)\n- disassembled smali files (thanks to `apktool`)\n- `assets/` and `res/` folders together with their content (thanks to `apktool`)\n\n\n\n## Build\n\nThe first step is cloning the NinjaDroid repository, or downloading its source code.\n\n```shell\n$ git clone https://github.com/rovellipaolo/NinjaDroid\n$ cd NinjaDroid\n```\n\nNinjaDroid has several ways to be executed: natively in your local environment, in [Docker](https://www.docker.com/), as a [Flatpak](https://flatpak.org/) (experimental) and as a [Snap](https://snapcraft.io/) (experimental).\n\n### Native\nTo execute NinjaDroid in your local machine, you need to install `Python 3.5` or higher, `Java 8` or higher and `binutils`.\n\nOptionally, if you have the Android SDK installed locally, you can use the SDK version of `aapt` instead of the included one. In order to do so, you need to change the `aapt` location in `ninjadroid/aapt/Aapt.py` (i.e. `__AAPT_EXEC_PATH = \"ninjadroid/aapt/aapt\"`).\n\n#### Linux\nJust launch the following commands, which will install all the Python dependencies (making sure that `aapt`, `apktool` and `dex2jar` have executable permissions) and add a `ninjadroid` symlink to `/usr/local/bin/`.\n\n```shell\n$ make build-linux\n$ make install\n$ ninjadroid --help\n```\n\n#### MacOS\nJust launch the following commands, which will install all the needed Python dependencies (making sure that `aapt`, `apktool` and `dex2jar` have executable permissions) and add a `ninjadroid` symlink to `/usr/local/bin/`.\n\n```shell\n$ make build-macos\n$ make install\n$ ninjadroid --help\n```\n\n### Docker\nTo execute NinjaDroid in Docker, you need `Docker` installed.\nTo build the Docker image, launch the following commands:\n```shell\n$ make build-docker\n$ docker run --name ninjadroid ninjadroid:latest ninjadroid --help\n```\n\nNote that you need to bind the directory containing the target APK package to the Docker image:\n```shell\n$ mkdir apks\n$ cp /path/to/your/package.apk apks/package.apk\n$ docker run --name ninjadroid -it --rm -v $(pwd)/apks:/apks ninjadroid:latest ninjadroid /apks/package.apk -aj\n```\nAnd the same applies also to the output directory when using the `-e`/`--extract` option, to which you also need to grant permissions:\n```shell\n$ mkdir output\n$ chmod 777\n$ docker run --name ninjadroid --rm -v $(pwd)/apks:/apks -v $(pwd)/output:/output ninjadroid:latest ninjadroid /apks/package.apk -ae /output\n```\n\n### Flatpak (experimental)\nTo execute NinjaDroid as a Flatpak, you need `Flatpak` and `flatpak-builder` installed.\nJust launch the following commands, which will install all the needed Flatpak dependencies:\n```shell\n$ make build-flatpak\n$ flatpak-builder --run flatpak/build flatpak/com.github.rovellipaolo.NinjaDroid.yaml ninjadroid --help\n```\n\n**NOTE:** The `-e`/`--extract` option does not work correctly at present (see: https://github.com/rovellipaolo/NinjaDroid/issues/21).\n\n\n### Snap (experimental)\nTo execute NinjaDroid as a Snap, you need `Snap` and `snapcraft` installed.\nJust launch the following commands, which will install all the needed Snap dependencies:\n```shell\n$ make build-snap\n$ make install-snap\n$ ninjadroid --help\n```\n\n**NOTE:** The `-e`/`--extract` option does not work correctly when the snap is installed without using the `--devmode` option (see: https://github.com/rovellipaolo/NinjaDroid/issues/20).\n\n\n\n## Test\n\nOnce you've configured it (see the _\"Installation\"_ section), you can also run the tests and checkstyle as follows.\n\n### Native\nTo run them in your local machine, launch the following commands:\n```shell\n$ make test\n$ make regression\n$ make checkstyle\n```\n\nYou can also run the tests with coverage by launching the following command:\n```shell\n$ make test-coverage\n```\n\nAnd/or configure the checkstyle to run automatically at every git commit by launching the following command:\n```\n$ make install-githooks\n```\n\n### Docker\nTo run them in Docker, launch the following commands:\n```shell\n$ make test-docker\n$ make regression-docker\n$ make checkstyle-docker\n```\n\n### Flatpak\nTo run the regression tests in Flatpak, launch the following command:\n```shell\n$ make regression-flatpak\n```\n\n### Snap\nTo run the regression tests in Snap, launch the following command:\n```shell\n$ make regression-snap\n```\n\n\n\n## Usage\n\nThe following are examples of running NinjaDroid against the sample APK package.\n\n### Show APK summary\n```shell\n$ ninjadroid regression/data/Example.apk\n```\n```shell\nfile:    regression/data/Example.apk\nsize:    70058\nmd5:     c9504f487c8b51412ba4980bfe3cc15d\nsha1:    482a28812495b996a92191fbb3be1376193ca59b\nsha256:  8773441a656b60c5e18481fd5ba9c1bf350d98789b975987cb3b2b57ee44ee51\nsha512:  559eab9840ff2f8507842605e60bb0730442ddf9ee7ca4ab4f386f715c1a4707766065d6f0b977816886692bf88b400643979e2fd13e6999358a21cabdfb3071\nname:    Example\ncert:\n\tfile:   META-INF/CERT.RSA\n\tsize:   906\n\tmd5:    860e19fa47d37d9510f1245c511a8578\n\tsha1:   59a04084c0d5ef23fd05f0f429dab6267ccb3d0b\n\tsha256: 0efa622919417adfa6eb77770fd33d3bcd93265ac7343695e246dab1a7b6bfee\n\tsha512: 2a5befcc0bcb14e44d7b7cb4322a76933ad3e90e5e1ffbb87ba31ee7cc0172725dcc98e9d414fb3a207bc107b2a7ca7563b5f954cac6bd41d77e4726c70a95a3\nmanifest:\n\tfile:   AndroidManifest.xml\n\tsize:   6544\n\tmd5:    1f97f7e7ca62f39f8f81d79b1b540c37\n\tsha1:   011316a011e5b8738c12c662cb0b0a6ffe04ca74\n\tsha256: 7c8011a46191ecb368bf2e0104049abeb98bae8a7b1fa3328ff050aed85b1347\n\tsha512: 8c7c1ede610f9c6613418b46a52a196ad6d5e8cc067c2f26b931738ad8087f998d9ea95e80ec4352c95fbdbb93a4f29c646973535068a3a3d584da95480ab45f\n\tpackage: com.example.app\n\tversion:\n\t\tcode:  1\n\t\tname:  1.0\n\tsdk:\n\t\tmin:   10\n\t\ttarget: 20\n\t\tmax:   20\n\tpermissions:\n\t\t- android.permission.INTERNET\n\t\t- android.permission.READ_EXTERNAL_STORAGE\n\t\t- android.permission.RECEIVE_BOOT_COMPLETED\n\t\t- android.permission.WRITE_EXTERNAL_STORAGE\ndex:\n\tfile:   classes.dex\n\tsize:   2132\n\tmd5:    7bc52ece5249ccd2d72c4360f9be2ca5\n\tsha1:   89476799bf92798047ca026c922a5bc33983b008\n\tsha256: 3f543c68c4c059548cec619a68f329010d797e5e4c00aa46cd34c0d19cabe056\n\tsha512: 0725f961bc1bac47eb8dd045c2f0a0cf5475fd77089af7ddc3098e341a95d8b5624969b6fa47606a05d5a6adf9d74d0c52562ea41a376bd3d7d0aa3695ca2e22\n```\n\n### Show APK extended information in JSON format\n```shell\n$ ninjadroid regression/data/Example.apk --all --json\n```\n```json\n{\n    \"cert\": {\n        \"file\": \"META-INF/CERT.RSA\",\n        \"fingerprint\": {\n            \"md5\": \"\",\n            \"sha1\": \"5A:C0:6C:32:63:7F:5D:BE:CA:F9:38:38:4C:FA:FF:ED:20:52:43:B6\",\n            \"sha256\": \"E5:15:CC:BC:5E:BF:B2:9D:A6:13:03:63:CF:19:33:FA:CE:AF:DC:ED:5D:2F:F5:98:7C:CE:37:13:64:4A:CF:77\",\n            \"signature\": \"SHA1withRSA\",\n            \"version\": \"3\"\n        },\n        \"issuer\": {\n            \"city\": \"City\",\n            \"country\": \"XX\",\n            \"domain\": \"\",\n            \"email\": \"\",\n            \"name\": \"Name\",\n            \"organization\": \"Organization\",\n            \"state\": \"State\",\n            \"unit\": \"Unit\"\n        },\n        \"md5\": \"860e19fa47d37d9510f1245c511a8578\",\n        \"owner\": {\n            \"city\": \"City\",\n            \"country\": \"XX\",\n            \"domain\": \"\",\n            \"email\": \"\",\n            \"name\": \"Name\",\n            \"organization\": \"Organization\",\n            \"state\": \"State\",\n            \"unit\": \"Unit\"\n        },\n        \"serial_number\": \"558e7595\",\n        \"sha1\": \"59a04084c0d5ef23fd05f0f429dab6267ccb3d0b\",\n        \"sha256\": \"0efa622919417adfa6eb77770fd33d3bcd93265ac7343695e246dab1a7b6bfee\",\n        \"sha512\": \"2a5befcc0bcb14e44d7b7cb4322a76933ad3e90e5e1ffbb87ba31ee7cc0172725dcc98e9d414fb3a207bc107b2a7ca7563b5f954cac6bd41d77e4726c70a95a3\",\n        \"size\": 906,\n        \"validity\": {\n            \"from\": \"2015-06-27 10:06:13Z\",\n            \"until\": \"2515-02-26 10:06:13Z\"\n        }\n    },\n    \"dex\": [\n        {\n            \"file\": \"classes.dex\",\n            \"md5\": \"7bc52ece5249ccd2d72c4360f9be2ca5\",\n            \"sha1\": \"89476799bf92798047ca026c922a5bc33983b008\",\n            \"sha256\": \"3f543c68c4c059548cec619a68f329010d797e5e4c00aa46cd34c0d19cabe056\",\n            \"sha512\": \"0725f961bc1bac47eb8dd045c2f0a0cf5475fd77089af7ddc3098e341a95d8b5624969b6fa47606a05d5a6adf9d74d0c52562ea41a376bd3d7d0aa3695ca2e22\",\n            \"shell_commands\": [\n                \"set\"\n            ],\n            \"size\": 2132,\n            \"strings\": [\n                \"!Lcom/example/app/ExampleService2;\",\n                \"!Lcom/example/app/ExampleService3;\",\n                \"#Landroid/content/BroadcastReceiver;\",\n                \")Lcom/example/app/ExampleBrodcastReceiver;\",\n                \"*Lcom/example/app/ExampleBrodcastReceiver2;\",\n                \"*Lcom/example/app/ExampleBrodcastReceiver3;\",\n                \"*Lcom/example/app/ExampleBrodcastReceiver4;\",\n                \"\u003cinit\u003e\",\n                \"Landroid/app/Activity;\",\n                \"Landroid/app/Service;\",\n                \"Landroid/content/Context;\",\n                \"Landroid/content/Intent;\",\n                \"Landroid/os/Bundle;\",\n                \"Landroid/os/IBinder;\",\n                \"Lcom/example/app/ExampleService;\",\n                \"Lcom/example/app/HomeActivity;\",\n                \"Lcom/example/app/OtherActivity;\",\n                \"onBind\",\n                \"onCreate\",\n                \"onReceive\",\n                \"setContentView\"\n            ],\n            \"urls\": []\n        }\n    ],\n    \"file\": \"regression/data/Example.apk\",\n    \"manifest\": {\n        \"activities\": [\n            {\n                \"intent-filter\": [\n                    {\n                        \"action\": [\n                            \"android.intent.action.MAIN\"\n                        ],\n                        \"category\": [\n                            \"android.intent.category.LAUNCHER\"\n                        ]\n                    }\n                ],\n                \"launchMode\": \"1\",\n                \"name\": \"com.example.app.HomeActivity\"\n            },\n            {\n                \"intent-filter\": [\n                    {\n                        \"action\": [\n                            \"android.intent.action.VIEW\"\n                        ],\n                        \"category\": [\n                            \"android.intent.category.DEFAULT\"\n                        ],\n                        \"data\": [\n                            {\n                                \"scheme\": \"content\"\n                            },\n                            {\n                                \"scheme\": \"file\"\n                            },\n                            {\n                                \"mimeType\": \"application/vnd.android.package-archive\"\n                            }\n                        ]\n                    }\n                ],\n                \"launchMode\": \"1\",\n                \"meta-data\": [\n                    {\n                        \"name\": \"android.support.PARENT_ACTIVITY\",\n                        \"value\": \"com.example.app.HomeActivity\"\n                    }\n                ],\n                \"name\": \"com.example.app.OtherActivity\",\n                \"noHistory\": \"true\",\n                \"parentActivityName\": \"com.example.app.HomeActivity\"\n            }\n        ],\n        \"file\": \"AndroidManifest.xml\",\n        \"md5\": \"1f97f7e7ca62f39f8f81d79b1b540c37\",\n        \"package\": \"com.example.app\",\n        \"permissions\": [\n            \"android.permission.INTERNET\",\n            \"android.permission.READ_EXTERNAL_STORAGE\",\n            \"android.permission.RECEIVE_BOOT_COMPLETED\",\n            \"android.permission.WRITE_EXTERNAL_STORAGE\"\n        ],\n        \"receivers\": [\n            {\n                \"name\": \"com.example.app.ExampleBrodcastReceiver\"\n            },\n            {\n                \"exported\": false,\n                \"intent-filter\": [\n                    {\n                        \"action\": [\n                            \"android.intent.action.BOOT_COMPLETED\",\n                            \"android.intent.action.MY_PACKAGE_REPLACED\"\n                        ],\n                        \"priority\": \"1000\"\n                    }\n                ],\n                \"name\": \"com.example.app.ExampleBrodcastReceiver2\"\n            },\n            {\n                \"enabled\": true,\n                \"exported\": false,\n                \"intent-filter\": [\n                    {\n                        \"action\": [\n                            \"android.intent.action.BROADCAST_PACKAGE_REMOVED\",\n                            \"android.intent.action.PACKAGE_ADDED\",\n                            \"android.intent.action.PACKAGE_REPLACED\"\n                        ],\n                        \"data\": [\n                            {\n                                \"scheme\": \"package\"\n                            }\n                        ],\n                        \"priority\": \"800\"\n                    }\n                ],\n                \"name\": \"com.example.app.ExampleBrodcastReceiver3\"\n            },\n            {\n                \"enabled\": false,\n                \"exported\": true,\n                \"name\": \"com.example.app.ExampleBrodcastReceiver4\"\n            }\n        ],\n        \"sdk\": {\n            \"max\": \"20\",\n            \"min\": \"10\",\n            \"target\": \"20\"\n        },\n        \"services\": [\n            {\n                \"name\": \"com.example.app.ExampleService\"\n            },\n            {\n                \"enabled\": false,\n                \"exported\": true,\n                \"isolatedProcess\": true,\n                \"name\": \"com.example.app.ExampleService2\"\n            },\n            {\n                \"enabled\": true,\n                \"exported\": false,\n                \"isolatedProcess\": false,\n                \"name\": \"com.example.app.ExampleService3\"\n            }\n        ],\n        \"sha1\": \"011316a011e5b8738c12c662cb0b0a6ffe04ca74\",\n        \"sha256\": \"7c8011a46191ecb368bf2e0104049abeb98bae8a7b1fa3328ff050aed85b1347\",\n        \"sha512\": \"8c7c1ede610f9c6613418b46a52a196ad6d5e8cc067c2f26b931738ad8087f998d9ea95e80ec4352c95fbdbb93a4f29c646973535068a3a3d584da95480ab45f\",\n        \"size\": 6544,\n        \"version\": {\n            \"code\": 1,\n            \"name\": \"1.0\"\n        }\n    },\n    \"md5\": \"c9504f487c8b51412ba4980bfe3cc15d\",\n    \"name\": \"Example\",\n    \"other\": [\n        {\n            \"file\": \"res/drawable-hdpi-v4/ic_launcher.png\",\n            \"md5\": \"e74dbf28ebab4e1b7442a9c78067d1c2\",\n            \"sha1\": \"450d3d44325fdf259810a60e6afa36103e186b3d\",\n            \"sha256\": \"9b2639dbfdd60e0dab70e572f39660c8dfabd19b7987a7619d770824db342925\",\n            \"sha512\": \"44050c4db6d5275b70856050c0d58d3d9892ba09bd8cf1a8343a3c6d4f2e2af6eae1f8b687efb59b7f8122e5bea1a63e08546fee35124cc0faab40ef6274ab4f\",\n            \"size\": 9193\n        },\n        {\n            \"file\": \"res/drawable-hdpi-v4/ic_launcher_logo.png\",\n            \"md5\": \"e74dbf28ebab4e1b7442a9c78067d1c2\",\n            \"sha1\": \"450d3d44325fdf259810a60e6afa36103e186b3d\",\n            \"sha256\": \"9b2639dbfdd60e0dab70e572f39660c8dfabd19b7987a7619d770824db342925\",\n            \"sha512\": \"44050c4db6d5275b70856050c0d58d3d9892ba09bd8cf1a8343a3c6d4f2e2af6eae1f8b687efb59b7f8122e5bea1a63e08546fee35124cc0faab40ef6274ab4f\",\n            \"size\": 9193\n        },\n        {\n            \"file\": \"res/drawable-ldpi-v4/ic_launcher.png\",\n            \"md5\": \"58b9a42eeb99fad5321208fe02f24375\",\n            \"sha1\": \"09ea65885b4080e515ef7064e816c77991c0757b\",\n            \"sha256\": \"c4f061b2c758185371f39afcb166ba039e955d3be2619ab5469a1b873f952d0d\",\n            \"sha512\": \"415ed16de6fd335b24bd985d9152323d04fc02287acd3f26fa98722832cfecf89cf2c77ad8ae3f5588acc5cac401129ac3b3d714abbf8dcc492ab2fd98f106e5\",\n            \"size\": 2658\n        },\n        {\n            \"file\": \"res/drawable-ldpi-v4/ic_launcher_logo.png\",\n            \"md5\": \"58b9a42eeb99fad5321208fe02f24375\",\n            \"sha1\": \"09ea65885b4080e515ef7064e816c77991c0757b\",\n            \"sha256\": \"c4f061b2c758185371f39afcb166ba039e955d3be2619ab5469a1b873f952d0d\",\n            \"sha512\": \"415ed16de6fd335b24bd985d9152323d04fc02287acd3f26fa98722832cfecf89cf2c77ad8ae3f5588acc5cac401129ac3b3d714abbf8dcc492ab2fd98f106e5\",\n            \"size\": 2658\n        },\n        {\n            \"file\": \"res/drawable-mdpi-v4/ic_launcher.png\",\n            \"md5\": \"acefc1f320111a8d71bcdb8b4aa0656c\",\n            \"sha1\": \"23730fd0d5e720d1f719be1afc8c48fa7305da6c\",\n            \"sha256\": \"05346d62d4096537906928af523ef9d5997663707a1d48e08f20992584e1424d\",\n            \"sha512\": \"59896fc52679e86898dc09b56fb53270d4297c53adee26f864657c5ef4aff9e5f5922dfa9370c3d1748068aa7b1270e0fa8a1323ce3b69c7548a50ca221befc1\",\n            \"size\": 5057\n        },\n        {\n            \"file\": \"res/drawable-mdpi-v4/ic_launcher_logo.png\",\n            \"md5\": \"acefc1f320111a8d71bcdb8b4aa0656c\",\n            \"sha1\": \"23730fd0d5e720d1f719be1afc8c48fa7305da6c\",\n            \"sha256\": \"05346d62d4096537906928af523ef9d5997663707a1d48e08f20992584e1424d\",\n            \"sha512\": \"59896fc52679e86898dc09b56fb53270d4297c53adee26f864657c5ef4aff9e5f5922dfa9370c3d1748068aa7b1270e0fa8a1323ce3b69c7548a50ca221befc1\",\n            \"size\": 5057\n        },\n        {\n            \"file\": \"res/drawable-xhdpi-v4/ic_launcher.png\",\n            \"md5\": \"94f5591633218c0b469b65947fd8943b\",\n            \"sha1\": \"502cd84fa444f26d7ecfdf4a355064867977f236\",\n            \"sha256\": \"29d15992424b40757135f47fc8ddd15e30c7774646b37755608f7cfec1df7d8a\",\n            \"sha512\": \"d5b48e065a614c5a2400b6565dc36777d9923d8d5154487113dd1f46b05d36d1db3f28fb72f61a68fcbd225c93495541579574e6611f650fe2857767412c3b1f\",\n            \"size\": 14068\n        },\n        {\n            \"file\": \"res/drawable-xhdpi-v4/ic_launcher_logo.png\",\n            \"md5\": \"94f5591633218c0b469b65947fd8943b\",\n            \"sha1\": \"502cd84fa444f26d7ecfdf4a355064867977f236\",\n            \"sha256\": \"29d15992424b40757135f47fc8ddd15e30c7774646b37755608f7cfec1df7d8a\",\n            \"sha512\": \"d5b48e065a614c5a2400b6565dc36777d9923d8d5154487113dd1f46b05d36d1db3f28fb72f61a68fcbd225c93495541579574e6611f650fe2857767412c3b1f\",\n            \"size\": 14068\n        },\n        {\n            \"file\": \"res/layout/main.xml\",\n            \"md5\": \"8cdec0105448937475e45e22c80fd611\",\n            \"sha1\": \"51ebf14ed21238f7d147a6744cae18c0f55fcbe6\",\n            \"sha256\": \"e74db1ac37395ca9fd25b93261d3ab76ed7dfc9b355ea63d856afc7453313738\",\n            \"sha512\": \"2d2147365b8b00f2db7498b7f0ed8a360fc15bd43dfd3704b4b1cb912619d9ff1bc35837eb1e601ea6d1aa3a8c0d555f2105d6ed37de919fa128568527765d63\",\n            \"size\": 552\n        },\n        {\n            \"file\": \"resources.arsc\",\n            \"md5\": \"2886f2825eef3b5c4478852935c68640\",\n            \"sha1\": \"1eff126288b4bea6fa78eb79832d6a7fa098695e\",\n            \"sha256\": \"ac46f54fa12dc20e94619465482186047505fb9f27508861220063c93f0c6c4e\",\n            \"sha512\": \"da8c41d0c27839ed89cb06a2f89f6993bd88f5179e97f3291f0e17348868b3e9c106e96f482ecd86f11808170937773e7599ccd338900908359e870ea5446169\",\n            \"size\": 1640\n        },\n        {\n            \"file\": \"META-INF/MANIFEST.MF\",\n            \"md5\": \"6098a6409625f1c0d97cd33c13ad300c\",\n            \"sha1\": \"ccfe31190feb259a4a56599ad1403a956f6944b5\",\n            \"sha256\": \"8a18f285481346919f4df55f576ee504bf5abecb068a2d642fdef17f3b5cd631\",\n            \"sha512\": \"17a68bf605aff149aa31e1b0b81af3d3f74f939e1cb7a10f3eddf84775f901b09ba9722efad1265b0057cdfcd12c6fac701067993081620b00bbfcc4efff3599\",\n            \"size\": 1061\n        },\n        {\n            \"file\": \"META-INF/CERT.SF\",\n            \"md5\": \"fb02917b68510e413a06e52873802bcd\",\n            \"sha1\": \"dfb7bbb487010b980152610fe7d669c1b4f626be\",\n            \"sha256\": \"e2fa373f8b065ef7c78387ab9242e98dd19bdeb2b768295506295f7beb0bfe3f\",\n            \"sha512\": \"3aa74603588ca5c563b6586d1216dc6cea3b8d2a1a47eb189197e8f20cd7508d3e652c7ff849261e95cff52451476b2993caadf051fdf66cc01f5e6e16b180fc\",\n            \"size\": 1114\n        }\n    ],\n    \"sha1\": \"482a28812495b996a92191fbb3be1376193ca59b\",\n    \"sha256\": \"8773441a656b60c5e18481fd5ba9c1bf350d98789b975987cb3b2b57ee44ee51\",\n    \"sha512\": \"559eab9840ff2f8507842605e60bb0730442ddf9ee7ca4ab4f386f715c1a4707766065d6f0b977816886692bf88b400643979e2fd13e6999358a21cabdfb3071\",\n    \"size\": 70058\n}\n```\n\n### Extract and store APK entries and information\n```shell\n$ ninjadroid regression/data/Example.apk --all --extract output/\n```\n```shell\n  \u003e\u003e NinjaDroid: [INFO] Executing apktool...\n  \u003e\u003e NinjaDroid: [INFO] Creating output/smali/...\n  \u003e\u003e NinjaDroid: [INFO] Creating output/AndroidManifest.xml...\n  \u003e\u003e NinjaDroid: [INFO] Creating output/res/...\n  \u003e\u003e NinjaDroid: [INFO] Creating output/assets/...\n  \u003e\u003e NinjaDroid: [INFO] Executing dex2jar...\n  \u003e\u003e NinjaDroid: [INFO] Creating output/Example.jar...\ndex2jar regression/data/Example.apk -\u003e output/Example.jar\n  \u003e\u003e NinjaDroid: [INFO] Extracting certificate file...\n  \u003e\u003e NinjaDroid: [INFO] Creating output/META-INF/CERT.RSA...\n  \u003e\u003e NinjaDroid: [INFO] Extracting DEX files...\n  \u003e\u003e NinjaDroid: [INFO] Creating output/classes.dex...\n  \u003e\u003e NinjaDroid: [INFO] Generating JSON report file...\n  \u003e\u003e NinjaDroid: [INFO] Creating output/report-Example.json...\n```\n**NOTE:** without specifying an output directory, one with the APK package name will be created inside the current working directory.\n\n\n\n## Licence\n\nNinjaDroid is licensed under the GNU General Public License v3.0 (http://www.gnu.org/licenses/gpl-3.0.html).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frovellipaolo%2FNinjaDroid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frovellipaolo%2FNinjaDroid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frovellipaolo%2FNinjaDroid/lists"}