{"id":13755610,"url":"https://github.com/tintinweb/unbox","last_synced_at":"2025-04-30T12:10:41.246Z","repository":{"id":150245503,"uuid":"123972878","full_name":"tintinweb/unbox","owner":"tintinweb","description":":gift: unbox - Unpack and Decompile the $h*! out of things","archived":false,"fork":false,"pushed_at":"2018-03-28T15:27:00.000Z","size":70,"stargazers_count":48,"open_issues_count":0,"forks_count":10,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-05-02T01:33:19.558Z","etag":null,"topics":["decompiler","unpacker","wrapper"],"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/tintinweb.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}},"created_at":"2018-03-05T20:12:29.000Z","updated_at":"2024-08-03T10:02:56.606Z","dependencies_parsed_at":null,"dependency_job_id":"3d97d3c4-4747-46d1-a2ae-a72fcadc173f","html_url":"https://github.com/tintinweb/unbox","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tintinweb%2Funbox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tintinweb%2Funbox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tintinweb%2Funbox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tintinweb%2Funbox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tintinweb","download_url":"https://codeload.github.com/tintinweb/unbox/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242650897,"owners_count":20163610,"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":["decompiler","unpacker","wrapper"],"created_at":"2024-08-03T10:00:58.138Z","updated_at":"2025-03-09T05:30:31.830Z","avatar_url":"https://github.com/tintinweb.png","language":"Python","funding_links":[],"categories":["\u003ca id=\"83de90385d03ac8ef27360bfcdc1ab48\"\u003e\u003c/a\u003e作为辅助\u0026\u0026构成其他的一环"],"sub_categories":["\u003ca id=\"1c698e298f6112a86c12881fbd8173c7\"\u003e\u003c/a\u003eSwift"],"readme":"![unbox](https://user-images.githubusercontent.com/2865694/37244319-898e3e32-2487-11e8-846a-e792ef989974.png) *Unpack and Decompile the $h\\*! out of things* \n\n# unbox\n\n\n**Unbox** is a convenient one-click unpack and decompiler tool that wraps existing 3rd party applications like *IDA Pro,\nJD-Cli, Dex2Src*, and others to provide a convenient archiver liker command line interfaces to unpack and decompile\nvarious types of files. It currently features support for compiled binaries (*.net, PE, elf, mach, ...*), *java classes,\nandroid application packages* and various types of archives or browser extensions. The goal of this tool is mainly to\ntake off the extra efford needed to deal with the various decompiler tools and give a standard yet easy to use\ninterface.\n\nRequires: :snake: python-2   \n\n**Dependencies:**\n\n* cigma - https://github.com/7h3rAm/cigma\n* patool - https://pypi.python.org/pypi/patool  \n\n# Usage :sheep:\n\n      example: unbox.py \u003ccommand\u003e [options] \u003ctarget\u003e [\u003ctarget\u003e, ...]\n      options:\n\t       -y, --yes    ...   answer prompts with yes\n\t       -n, --no     ...   answer prompts with no\n\n      command  ... list \u003ctarget\u003e\n               ... extract \u003ctarget\u003e \u003cdestination path\u003e\n\n               ... check-dependencies\n\n      target   ... file\n      \n  \n*One interface to rule them all...*\n  \n| usage | command |\n|-------|---------|\n| unpack and decompile all ***.jar** files | `#\u003e unbox/cli.py extract \\lib\\Adv*.jar c:\\_tmp\\decompiled` |\n| decompile a **Windows dll** | `#\u003e unbox/cli.py extract samples\\7-zip32.dll c:\\_tmp\\decompiled` | \n| decompile an **elf executable** | `#\u003e unbox/cli.py extract samples/crackme1 /tmp/decompiled` | \n| unpack and decompile an **apk** | `#\u003e unbox/cli.py extract test.apk c:\\_tmp\\decompiled` |\n| decompile a **.net** application | `#\u003e unbox/cli.py extract test.exe c:\\_tmp\\decompiled` | \n| unpack a **browser extension** | `#\u003e unbox/cli.py extract sample.crx c:\\_tmp\\decompiled` | \n| unpack **all supported** files | `#\u003e unbox/cli.py extract * c:\\_tmp\\decompiled` |\n\t\n*I think you got the idea ...*   \n*... and yes it will recursively unpack things ...*\n\n\n# Configuration\n\n* in case your 3rd party tools are not generally available via *PATH* configure them in `unbox.json`\n\napplication search-path order for `unbox.json` is \n\n* current working dir OR\n* `~/unbox.json` OR\n* `~/.unbox/unbox.json`\n\n\n# Setup\n\n* install\n* check dependencies `python cli.py check-dependencies`  \n  * install missing 3rd party applications (see table below)\n  * make them available in PATH or configure them in unbox.json\n  \n  \n# As a Library\n\n```python\n\nfrom unbox import UnboxPath\n\ntarget = \"path/to/target/file\"\n\ndst = UnboxPath(target)\t\t# crate an unbox path instance\nfor p in dst.files.walk():\t# auto-decompile/unpack and walk resulting files (source-code, etc..)\n\tprint p.path\t\t# print the unpacked files' path\n```\n\n# Live Action\n\n### List contents of windows DLL\n\n```\n#\u003e unbox/cli.py list \"samples\\7-zip32.dll\"\n[handler.base/2808][DEBUG     ] [base.get_path      ] unknown: 7-zip32.dll\n[handler.base/2808][DEBUG     ] [base.get_path      ] {'source': 'databuffer', 'magic': {'mimetype': 'application/x-executable-mz', 'patterns': [{'regex': '\\\\x4D\\\\x5A', 'offset': 0, 'size': 2}], 'shortname': 'EXE', 'id': 31, 'longname': 'Windows Executable'}}\n[handler.base/2808][DEBUG     ] [base.get_path      ] 2\n[handler.commands.commands/2808][DEBUG     ] [commands.decompile     ] [u'ida\\\\idaw.exe', '-B', '-M', '-S\"home\\\\.unbox\\\\ida_batch_decompile.py -o\\\\\"tmpfolder\\\\unbox3fcvpg\\\\7-zip32.c\\\\\"\"', '\"7-zip32.dll\"']\n[handler.base/2808][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/2808][DEBUG     ] [base.get_path      ] \u003cApplication32Bits encoding=None path=WindowsPath('tmpfolder/unbox3fcvpg')\u003e\n[handler.local/2808][DEBUG     ] [local.walk          ] walk: tmpfolder\n\n[handler.base/2808][DEBUG     ] [base.get_path      ] unknown: tmpfolder\\7-zip32.c\n[handler.base/2808][DEBUG     ] [base.get_path      ] {'source': 'databuffer', 'magic': None}\n[handler.base/2808][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/2808][DEBUG     ] [base.get_path      ] \u003cLocalPath encoding=None path=WindowsPath('tmpfolder/unbox3fcvpg/7-zip32.c')\u003e\ntmpfolder/unbox3fcvpg/7-zip32.c\n\n```\n\n### Decompile a windows DLL\n\n```\n#\u003e unbox/cli.py extract \"samples\\7-zip32.dll\"\n[handler.base/9848][DEBUG     ] [base.get_path      ] unknown: 7-zip32.dll\n[handler.base/9848][DEBUG     ] [base.get_path      ] {'source': 'databuffer', 'magic': {'mimetype': 'application/x-executable-mz', 'patterns': [{'regex': '\\\\x4D\\\\x5A', 'offset': 0, 'size': 2}], 'shortname': 'EXE', 'id': 31, 'longname': 'Windows Executable'}}\n[handler.base/9848][DEBUG     ] [base.get_path      ] 2\n[handler.commands.commands/9848][DEBUG     ] [commands.decompile     ] [u'ida\\\\idaw.exe', '-B', '-M', '-S\"home\\\\.unbox\\\\ida_batch_decompile.py -o\\\\\"tmpfolder\\\\unboxdaj2bd\\\\7-zip32.c\\\\\"\"', '\"7-zip32.dll\"']\n[handler.base/9848][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/9848][DEBUG     ] [base.get_path      ] \u003cApplication32Bits encoding=None path=WindowsPath('tmpfolder/unboxdaj2bd')\u003e\n[handler.local/9848][DEBUG     ] [local.walk          ] walk: tmpfolder\\unboxdaj2bd\n\n[handler.base/9848][DEBUG     ] [base.get_path      ] unknown: tmpfolder\\unboxdaj2bd\\7-zip32.c\n[handler.base/9848][DEBUG     ] [base.get_path      ] {'source': 'databuffer', 'magic': None}\n[handler.base/9848][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/9848][DEBUG     ] [base.get_path      ] \u003cLocalPath encoding=None path=WindowsPath('tmpfolder/unboxdaj2bd/7-zip32.c')\u003e\ntmpfolder\\unboxdaj2bd\\7-zip32.c\n```\n\n### Unpack and decompile apk\n\n(java) while decompiling binary applications on the fly (see ida output below)\n\n```\n#\u003e unbox/cli.py extract test.apk\n[handler.decompilable/13668][DEBUG     ] [decompilable._fetch        ] destination: test.apk.jar\n[handler.utils.shell/13668][DEBUG     ] [shell.execute       ] [u'dex-tools-2.0\\\\dex2jar-2.0\\\\d2j-dex2jar.bat', '-o', 'tmpfolder\\\\unboxsmansz\\\\test.apk.jar', 'test.apk']\ndex2jar test.apk -\u003e tmpfolder\\unboxsmansz\\test.apk.jar\n[handler.decompilable/13668][DEBUG     ] [decompilable._fetch        ] unpack .apk to tmpfolder\\unboxsmansz\\.apk\n[handler.decompilable/13668][DEBUG     ] [decompilable._fetch        ] decompile .jar to tmpfolder\\unboxsmansz\\.source\n[handler.utils.shell/13668][DEBUG     ] [shell.execute       ] [u'jd-cli\\\\jd-cli.bat', '--outputDir', 'tmpfolder\\\\unboxsmansz\\\\.source', 'test.apk.jar']\n21:05:30.434 INFO  jd.cli.Main - Decompiling tmpfolder\\unboxsmansz\\test.apk.jar\n21:05:30.467 INFO  jd.core.output.DirOutput - Directory output will be initialized for path tmpfolder\\unboxsmansz\\.source\n21:05:30.787 WARN  jd.core.output.DirOutput - Class name or java source is null\nReferenceMap.add: InvalidParameterException(android/util/SparseArray\u003cLandroid/support/v4/app/Fragment;\u003e)\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nReferenceMap.add: InvalidParameterException(java/util/Map\u003cLjava/lang/String;Ljava/lang/String;\u003e)\nReferenceMap.add: InvalidParameterException(java/util/Map\u003cLjava/lang/String;Ljava/lang/String;\u003e)\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\njava.lang.Throwable: NameGenerator.generateParameterNameFromSignature: invalid signature 'TT;'\n\tat jd.core.process.analyzer.variable.DefaultVariableNameGenerator.generateLocalVariableNameFromSignature(DefaultVariableNameGenerator.java:106)\n\tat jd.core.process.analyzer.classfile.LocalVariableAnalyzer.GenerateLocalVariableNames(LocalVariableAnalyzer.java:1733)\n\tat jd.core.process.analyzer.classfile.LocalVariableAnalyzer.Analyze(LocalVariableAnalyzer.java:206)\n\tat jd.core.process.analyzer.classfile.ClassFileAnalyzer.PreAnalyzeMethods(ClassFileAnalyzer.java:698)\n\tat jd.core.process.analyzer.classfile.ClassFileAnalyzer.AnalyzeClass(ClassFileAnalyzer.java:126)\n\tat jd.core.process.analyzer.classfile.ClassFileAnalyzer.Analyze(ClassFileAnalyzer.java:84)\n\tat jd.commonide.IdeDecompiler.decompile(IdeDecompiler.java:49)\n\tat jd.core.JavaDecompiler.decompile(JavaDecompiler.java:121)\n\tat jd.core.JavaDecompiler.decompileClass(JavaDecompiler.java:58)\n\tat jd.core.input.ZipFileInput.decompile(ZipFileInput.java:87)\n\tat jd.cli.Main.main(Main.java:118)\n21:05:56.837 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:56.848 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.270 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.293 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.441 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.445 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.501 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.502 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.506 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.507 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.510 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.522 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.527 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.543 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:57.547 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:58.220 WARN  jd.core.output.DirOutput - Class name or java source is null\n21:05:58.414 WARN  jd.core.output.DirOutput - Class name or java source is null\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\nReferenceMap.add: InvalidParameterException(java/util/Map\u003cLjava/lang/String;Ljava/lang/String;\u003e)\n21:06:04.651 WARN  jd.core.output.DirOutput - Class name or java source is null\nReferenceMap.add: InvalidParameterException(java/util/Map\u003cLjava/lang/String;Ljava/lang/String;\u003e)\nReferenceMap.add: InvalidParameterException(java/util/Map\u003cLjava/lang/String;Ljava/lang/String;\u003e)\nReferenceMap.add: InvalidParameterException(java/util/Map\u003cLjava/lang/String;Ljava/lang/String;\u003e)\nReferenceMap.add: InvalidParameterException(java/util/Map\u003cLjava/lang/String;Ljava/lang/String;\u003e)\nReferenceMap.add: InvalidParameterException(java/util/Map\u003cLjava/lang/String;Ljava/lang/String;\u003e)\nReferenceMap.add: InvalidParameterException(java/util/Map\u003cLjava/lang/String;Ljava/lang/String;\u003e)\nUndefined type catch\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nReferenceMap.add: InvalidParameterException(java/util/Map\u003cLjava/lang/String;Ljava/lang/String;\u003e)\nReferenceMap.add: InvalidParameterException(java/util/ArrayList\u003cLjava/lang/String;\u003e)\n21:06:11.038 WARN  jd.core.output.DirOutput - Class name or java source is null\njava.lang.Throwable: NameGenerator.generateParameterNameFromSignature: invalid signature 'TT;'\n\tat jd.core.process.analyzer.variable.DefaultVariableNameGenerator.generateLocalVariableNameFromSignature(DefaultVariableNameGenerator.java:106)\n\tat jd.core.process.analyzer.classfile.LocalVariableAnalyzer.GenerateLocalVariableNames(LocalVariableAnalyzer.java:1733)\n\tat jd.core.process.analyzer.classfile.LocalVariableAnalyzer.Analyze(LocalVariableAnalyzer.java:206)\n\tat jd.core.process.analyzer.classfile.ClassFileAnalyzer.PreAnalyzeMethods(ClassFileAnalyzer.java:698)\n\tat jd.core.process.analyzer.classfile.ClassFileAnalyzer.AnalyzeClass(ClassFileAnalyzer.java:126)\n\tat jd.core.process.analyzer.classfile.ClassFileAnalyzer.Analyze(ClassFileAnalyzer.java:84)\n\tat jd.commonide.IdeDecompiler.decompile(IdeDecompiler.java:49)\n\tat jd.core.JavaDecompiler.decompile(JavaDecompiler.java:121)\n\tat jd.core.JavaDecompiler.decompileClass(JavaDecompiler.java:58)\n\tat jd.core.input.ZipFileInput.decompile(ZipFileInput.java:87)\n\tat jd.cli.Main.main(Main.java:118)\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\nUndefined type catch\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\nConstantPool.addConstantClass: invalid name index\n21:06:19.486 INFO  jd.core.output.DirOutput - Finished with 2593 class file(s) and 0 resource file(s) written.\n[handler.decompilable/13668][DEBUG     ] [decompilable._fetch        ] remove .jar - we do not need it anymore\n[handler.base/13668][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/13668][DEBUG     ] [base.get_path      ] \u003cApk encoding=None path=WindowsPath('tmpfolder/unboxsmansz')\u003e\n[handler.local/13668][DEBUG     ] [local.walk          ] walk: tmpfolder\\unboxsmansz\n21:06:19.486 INFO  jd.core.output.DirOutput - Finished with 2593 class file(s) and 0 resource file(s) written.\n[handler.decompilable/13668][DEBUG     ] [decompilable._fetch        ] remove .jar - we do not need it anymore\n[handler.base/13668][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/13668][DEBUG     ] [base.get_path      ] \u003cApk encoding=None path=WindowsPath('tmpfolder/unboxsmansz')\u003e\n[handler.local/13668][DEBUG     ] [local.walk          ] walk: tmpfolder\\unboxsmansz\n\n[handler.base/13668][DEBUG     ] [base.get_path      ] unknown: tmpfolder\\unboxsmansz\\.apk\\AndroidManifest.xml\ntmpfolder\\unboxsmansz\\.apk\\AndroidManifest.xml\n[handler.base/13668][DEBUG     ] [base.get_path      ] {'source': 'databuffer', 'magic': None}\n[handler.base/13668][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/13668][DEBUG     ] [base.get_path      ] \u003cLocalPath encoding=None path=WindowsPath('tmpfolder/unboxsmansz/.apk/AndroidManifest.xml')\u003e\n[handler.base/13668][DEBUG     ] [base.get_path      ] unknown: tmpfolder\\unboxsmansz\\.apk\\classes.dex\n[handler.base/13668][DEBUG     ] [base.get_path      ] {'source': 'databuffer', 'magic': None}\ntmpfolder\\unboxsmansz\\.apk\\classes.dex\n[handler.base/13668][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/13668][DEBUG     ] [base.get_path      ] \u003cLocalPath encoding=None path=WindowsPath('tmpfolder/unboxsmansz/.apk/classes.dex')\u003e\n[handler.base/13668][DEBUG     ] [base.get_path      ] unknown: tmpfolder\\unboxsmansz\\.apk\\resources.arsc\n[handler.base/13668][DEBUG     ] [base.get_path      ] {'source': 'databuffer', 'magic': None}\ntmpfolder\\unboxsmansz\\.apk\\resources.arsc\n[handler.base/13668][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/13668][DEBUG     ] [base.get_path      ] \u003cLocalPath encoding=None path=WindowsPath('tmpfolder/unboxsmansz/.apk/resources.arsc')\u003e\n[handler.base/13668][DEBUG     ] [base.get_path      ] unknown: tmpfolder\\unboxsmansz\\.apk\\assets\\fonts\\eurostilebold.ttf\n[handler.base/13668][DEBUG     ] [base.get_path      ] {'source': 'databuffer', 'magic': {'mimetype': 'application/x-font-ttf', 'patterns': [{'regex': '\\\\x00\\\\x01\\\\x00\\\\x00\\\\x00', 'offset': 0, 'size': 5}], 'shortname': 'TTF', 'id': 32, 'longname': 'TrueType Font'}}\n[handler.base/13668][DEBUG     ] [base.get_path      ] None\n[handler.commands.commands/13668][DEBUG     ] [commands.decompile     ] [u'ida\\\\idaw.exe', '-B', '-M', '-S\"home\\\\.unbox\\\\ida_batch_decompile.py -o\\\\\"tmpfolder\\\\unboxeqk0no\\\\eurostilebold.c\\\\\"\"', '\"tmpfolder\\\\unboxsmansz\\\\.apk\\\\assets\\\\fonts\\\\eurostilebold.ttf\"']\n[handler.base/13668][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/13668][DEBUG     ] [base.get_path      ] \u003cApplication32Bits encoding=None path=WindowsPath('tmpfolder/unboxeqk0no')\u003e\n[handler.local/13668][DEBUG     ] [local.walk          ] walk: tmpfolder\\unboxeqk0no\n...\n\n...\ntmpfolder\\unboxsmansz\\.source\\org\\stockchart\\e\\h$a.java\ntmpfolder\\unboxsmansz\\.source\\org\\stockchart\\e\\h.java\n[handler.base/13668][DEBUG     ] [base.get_path      ] {'source': 'databuffer', 'magic': None}\n[handler.base/13668][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/13668][DEBUG     ] [base.get_path      ] \u003cLocalPath encoding=None path=WindowsPath('tmpfolder/unboxsmansz/.source/org/stockchart/e/h.java')\u003e\n[handler.base/13668][DEBUG     ] [base.get_path      ] unknown: tmpfolder\\unboxsmansz\\.source\\org\\stockchart\\e\\i.java\n[handler.base/13668][DEBUG     ] [base.get_path      ] {'source': 'databuffer', 'magic': None}\n[handler.base/13668][DEBUG     ] [base.get_path      ] scheme: c\n[handler.base/13668][DEBUG     ] [base.get_path      ] \u003cLocalPath encoding=None path=WindowsPath('tmpfolder//unboxsmansz/.source/org/stockchart/e/i.java')\u003e\ntmpfolder\\unboxsmansz\\.source\\org\\stockchart\\e\\i.java\n```\n\n# Contribute :trophy:\n\n## Add new tools and file formats\n\nTBD\n\n* add external command wrapper to `handler.commands.commands`\n* add the file handler to `handler.\u003carchive,decompilable,local,remote\u003e`\n* route the file to the correct handler in `handler.base.UniversalPath.get_path`\n\n\n## Supported Formats and implemented 3rd Party Applications:\n\n| Status   | Type |  Tool Dependency | ref |\n|--------|--------|------------------|-----|\n| :heavy_check_mark: | archive | patool or 7z | - |\n| :heavy_check_mark: | browser extension | patool or 7z | - |\n| :heavy_check_mark: | .net application | JustDecompile (windows) | https://github.com/telerik/JustDecompileEngine |\n| :heavy_check_mark: | apk | dex2jar and jd-cli | https://github.com/pxb1988/dex2jar |\n| :heavy_check_mark: | compiled java | jd-cli | https://github.com/kwart/jd-cmd |\n| :heavy_check_mark: | binary applications |IDA PRO / RetDec  :x: | https://www.hex-rays.com/products/ida/  https://github.com/avast-tl/retdec |\n| :x: | Ethereum solidity smart contract | porosity | https://github.com/comaeio/porosity/ |\n| :x: | compiled python | python-uncompyle6 | https://github.com/rocky/python-uncompyle6/ |\n\n\nAre you missing your favorite decompiler? Let me know or create a PR\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftintinweb%2Funbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftintinweb%2Funbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftintinweb%2Funbox/lists"}