{ "info": { "author": "CERT Polska", "author_email": "info@cert.pl", "bugtrack_url": null, "classifiers": [ "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3" ], "description": "# :duck: Malduck\n\n## [Installation \u2699\ufe0f](#how-to-start) | [Docs \ud83d\udcda](https://malduck.readthedocs.io/en/latest/)\n\n---\n\nMalduck is your ducky companion in malware analysis journeys. It is mostly based on [Roach](https://github.com/hatching/roach) project, which derives many concepts from [mlib](https://github.com/mak/mlib) \nlibrary created by [Maciej Kotowicz](https://lokalhost.pl). The purpose of fork was to make Roach independent from [Cuckoo Sandbox](https://cuckoosandbox.org/) project, but still supporting its internal `procmem` format.\n\nMalduck provides many improvements resulting from CERT.pl codebase, making scripts written for malware analysis purposes much shorter and more powerful. \n\n## Features\n\n- **Cryptography** (AES, Blowfish, Camelie, ChaCha20, Serpent and many others)\n- **Compression algorithms** (aPLib, gzip, LZNT1 (RtlDecompressBuffer))\n- **Memory model objects** (work on memory dumps, PE/ELF, raw files and IDA dumps using the same code)\n- **Extraction engine** (modular extraction framework for config extraction from files/dumps)\n- Fixed integer types (like Uint64) and bitwise utilities\n- String operations (chunks, padding, packing/unpacking etc)\n- Hashing algorithms (CRC32, MD5, SHA1, SHA256)\n\n## Usage examples\n\n#### AES\n\n```python\nfrom malduck import aes\n\nkey = b'A'*16\niv = b'B'*16\nplaintext = b'data'*16\nciphertext = aes.cbc.encrypt(key, iv, plaintext)\n```\n\n### Serpent\n\n```python\nfrom malduck import serpent\n\nkey = b'a'*16\niv = b'b'*16\nplaintext = b'data'*16\nciphertext = serpent.cbc.encrypt(key, plaintext, iv)\n```\n\n### APLib decompression\n\n```python\nfrom malduck import aplib\n\n# Headerless compressed buffer\naplib(b'T\\x00he quick\\xecb\\x0erown\\xcef\\xaex\\x80jumps\\xed\\xe4veur`t?lazy\\xead\\xfeg\\xc0\\x00')\n```\n\n### Fixed integer types\n\n```python\nfrom malduck import DWORD\n\ndef sdbm_hash(name: bytes) -> int:\n hh = 0\n for c in name:\n # operations on the DWORD type produce a dword, so a result\n # is also a DWORD.\n hh = DWORD(c) + (hh << 6) + (hh << 16) - hh\n return int(hh)\n```\n\n### Extractor engine - module example\n\n```python\nfrom malduck import Extractor\n\nclass Citadel(Extractor):\n family = \"citadel\"\n yara_rules = (\"citadel\",)\n overrides = (\"zeus\",)\n\n @Extractor.string(\"briankerbs\")\n def citadel_found(self, p, addr, match):\n log.info('[+] `Coded by Brian Krebs` str @ %X' % addr)\n return True\n\n @Extractor.string\n def cit_login(self, p, addr, match):\n log.info('[+] Found login_key xor @ %X' % addr)\n hit = p.uint32v(addr + 4)\n print(hex(hit))\n if p.is_addr(hit):\n return {'login_key': p.asciiz(hit)}\n\n hit = p.uint32v(addr + 5)\n print(hex(hit))\n if p.is_addr(hit):\n return {'login_key': p.asciiz(hit)}\n```\n\n### Memory model objects\n\n```python\nfrom malduck import procmempe\n\nwith procmempe.from_file(\"notepad.exe\", image=True) as p:\n resource_data = p.pe.resource(\"NPENCODINGDIALOG\")\n```\n\n## How to start\n\nInstall it by running\n\n```shell\npip install malduck\n```\n\nMore documentation can be found on [readthedocs](https://malduck.readthedocs.io/en/latest/).\n\n![Co-financed by the Connecting Europe Facility by of the European Union](https://www.cert.pl/uploads/2019/02/en_horizontal_cef_logo-e1550495232540.png)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/CERT-Polska/malduck", "keywords": "", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "malduck", "package_url": "https://pypi.org/project/malduck/", "platform": null, "project_url": "https://pypi.org/project/malduck/", "project_urls": { "Homepage": "https://github.com/CERT-Polska/malduck" }, "release_url": "https://pypi.org/project/malduck/4.2.0/", "requires_dist": [ "capstone (>=4.0.1)", "click (>=7.0)", "cryptography (>=3.1)", "pefile (==2019.4.18)", "pycryptodomex (>=3.8.2)", "pyelftools", "typing-extensions (>=3.7.4.2)", "yara-python" ], "requires_python": ">=3.6", "summary": "Malduck is your ducky companion in malware analysis journeys", "version": "4.2.0", "yanked": false, "yanked_reason": null }, "last_serial": 13619451, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "d499ae1a6f2bcdedfe46ce9eb9ffa2b8", "sha256": "9ab06b122ac97af98abdf1ce4e9362f0d7997210244d9f7df3ade600e0f59c22" }, "downloads": -1, "filename": "malduck-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d499ae1a6f2bcdedfe46ce9eb9ffa2b8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 59020, "upload_time": "2019-07-01T10:22:53", "upload_time_iso_8601": "2019-07-01T10:22:53.251860Z", "url": "https://files.pythonhosted.org/packages/76/27/a99eb909e551e8e356b3774629e7b6a114a60c0859595020d8cd24420cc1/malduck-1.0.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "79eb72ae352c92e1a15432a9a3b3d526", "sha256": "f5c3cf45ac819846735cf20908e1d6e581dd416314fd1bc14ea2df6bb528bf3f" }, "downloads": -1, "filename": "malduck-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "79eb72ae352c92e1a15432a9a3b3d526", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 78347, "upload_time": "2019-07-03T15:34:49", "upload_time_iso_8601": "2019-07-03T15:34:49.777061Z", "url": "https://files.pythonhosted.org/packages/b6/06/3e0854c2d1d6df5317684d7146ff9b8be16e60a36bd7ec9419d374b4baec/malduck-1.1.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "3a80cd476eabf5dd43f817de92ded917", "sha256": "1af8bcb452b9d9a8fd985e68425e19767f4619bdecc9b6b6d5b6bf027236330f" }, "downloads": -1, "filename": "malduck-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3a80cd476eabf5dd43f817de92ded917", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 78529, "upload_time": "2019-07-09T12:37:29", "upload_time_iso_8601": "2019-07-09T12:37:29.814781Z", "url": "https://files.pythonhosted.org/packages/ad/61/8cd856327207f73e542ae17537bcdd24b31476704667f3d60e20918eb167/malduck-1.2.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "b1caba76203e272bd32375b67f9a994e", "sha256": "757c81c0d1214bce98e244496012699d92a75890ae92ed287cd34abf27f80164" }, "downloads": -1, "filename": "malduck-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b1caba76203e272bd32375b67f9a994e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 82822, "upload_time": "2019-07-11T13:50:15", "upload_time_iso_8601": "2019-07-11T13:50:15.818277Z", "url": "https://files.pythonhosted.org/packages/18/ef/713216a95064f9315788da6ae7ea908de42d9913aae51a0d5e6d732e7538/malduck-1.3.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "958992c6d2cec8c62a55da49cc4669c6", "sha256": "652276e5ea9f45f7e31196383f14d2df563b6bccc2408de0eca1c2ed611a59fb" }, "downloads": -1, "filename": "malduck-1.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "958992c6d2cec8c62a55da49cc4669c6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 92319, "upload_time": "2019-07-25T15:57:10", "upload_time_iso_8601": "2019-07-25T15:57:10.273134Z", "url": "https://files.pythonhosted.org/packages/4b/cd/6aff1b04a66d55e5377a7867c3af2ba013181474598c296856e819a722e0/malduck-1.3.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "747bca2f72240d8f371defcd89ba3169", "sha256": "e02e1d2c81a109e76275ab69094cae9f95389f5ead267fc41d9e92a610ad057a" }, "downloads": -1, "filename": "malduck-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "747bca2f72240d8f371defcd89ba3169", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 98254, "upload_time": "2019-08-01T11:44:23", "upload_time_iso_8601": "2019-08-01T11:44:23.555765Z", "url": "https://files.pythonhosted.org/packages/0f/8b/c087344bad8510691ce3df29d5ceac805ab21e2bf4ae9c9cfff57422714e/malduck-2.0.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "4f0990cfe4dc496aa437f40bee22058f", "sha256": "a5b7f4830e71f4c715d79ce7410c9cfe81223d8871283b84792fbaa61c0fec06" }, "downloads": -1, "filename": "malduck-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4f0990cfe4dc496aa437f40bee22058f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 98262, "upload_time": "2019-08-02T12:58:32", "upload_time_iso_8601": "2019-08-02T12:58:32.899305Z", "url": "https://files.pythonhosted.org/packages/87/1f/297fc67a3153a05508460adce31e72a1f28fd8688882ccadc98ed2fe6f24/malduck-2.0.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "f887f55940fa1ca7f19a13b829650ea4", "sha256": "e47634d946df466c8db7588d18e4beac5d0319a744abad977081dd6240fbb224" }, "downloads": -1, "filename": "malduck-2.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f887f55940fa1ca7f19a13b829650ea4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 99221, "upload_time": "2019-08-21T16:19:48", "upload_time_iso_8601": "2019-08-21T16:19:48.557265Z", "url": "https://files.pythonhosted.org/packages/ba/f2/8cab6285572e2ae44890faabcaeeceb2703cfd9fd8266a5e5ad19b839c8b/malduck-2.1.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "0e6d70945ebfaa7da82db75a2aafbaf0", "sha256": "4ef51d37c90e7c7531ffe43921e5a5393894d92a98a2758679fc984374ff20f8" }, "downloads": -1, "filename": "malduck-2.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0e6d70945ebfaa7da82db75a2aafbaf0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 100296, "upload_time": "2019-10-29T10:42:13", "upload_time_iso_8601": "2019-10-29T10:42:13.990617Z", "url": "https://files.pythonhosted.org/packages/eb/ae/78e136b1456ec6841067cf123dfdb4004a27512c72ff616c46ee4f046a23/malduck-2.1.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "adb8f5324836e5caa369f08ee90800f1", "sha256": "ae081ca20c38efe06cfc8a23e956a282104f72aadfe204f9a0183270bf157da2" }, "downloads": -1, "filename": "malduck-3.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "adb8f5324836e5caa369f08ee90800f1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 103071, "upload_time": "2019-12-03T11:29:26", "upload_time_iso_8601": "2019-12-03T11:29:26.195134Z", "url": "https://files.pythonhosted.org/packages/20/05/f28646eaba7b8a55858ca8d5bd36ba28f8a94a6ba9539286d48ca1de307b/malduck-3.0.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "1fb6f303b87db34a6c42f16e635212f9", "sha256": "f44caecae0d6a7820e99c5fc50f558335f123fe48a58cfc9c58c993052b81776" }, "downloads": -1, "filename": "malduck-3.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1fb6f303b87db34a6c42f16e635212f9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 103069, "upload_time": "2019-12-03T16:14:54", "upload_time_iso_8601": "2019-12-03T16:14:54.118133Z", "url": "https://files.pythonhosted.org/packages/11/c1/1acca6641890fb823d6b7fd73123d41c641cbe47ac9ae68c37dfcf9e7941/malduck-3.0.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "3.0.2": [ { "comment_text": "", "digests": { "md5": "079289c11b7f54301aca2d781c6b6085", "sha256": "19b85c27be23bd34dcbccac35c1dfb94850e9d331a0d3e3a7a2d794d299e3e63" }, "downloads": -1, "filename": "malduck-3.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "079289c11b7f54301aca2d781c6b6085", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 103096, "upload_time": "2019-12-04T14:40:22", "upload_time_iso_8601": "2019-12-04T14:40:22.921020Z", "url": "https://files.pythonhosted.org/packages/73/6f/6821810c23dd4facdf665aeb3fe142b92f6c8dd19859e92d9b9a3a572128/malduck-3.0.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "3.1.0": [ { "comment_text": "", "digests": { "md5": "d0158d0d620ebe064aa883c5be6ae51f", "sha256": "decb3f1bb0918ea20a13997d32b8a8853203e24e80f01e11a8964f9155814628" }, "downloads": -1, "filename": "malduck-3.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d0158d0d620ebe064aa883c5be6ae51f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 103434, "upload_time": "2020-01-08T16:45:01", "upload_time_iso_8601": "2020-01-08T16:45:01.189365Z", "url": "https://files.pythonhosted.org/packages/87/45/b7e6bfb0abcb9171640bf3a3e5f2757425ab6dedba31f0d33487dc46c0b6/malduck-3.1.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "3.1.1": [ { "comment_text": "", "digests": { "md5": "436a0df90a7329c2b69526b2d39c7031", "sha256": "a0214101ace5989c1c6d06b8b76d03e6e1a32c09ead8e18057f0b833a4160fb8" }, "downloads": -1, "filename": "malduck-3.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "436a0df90a7329c2b69526b2d39c7031", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 103429, "upload_time": "2020-02-27T13:14:48", "upload_time_iso_8601": "2020-02-27T13:14:48.808298Z", "url": "https://files.pythonhosted.org/packages/fb/9b/9798ee64a7f396a65508279a4082d8b251bf409e6b83bcdde2788341319e/malduck-3.1.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "3.1.2": [ { "comment_text": "", "digests": { "md5": "4cc0887dc620c717b7a0df72fb531514", "sha256": "a00510cbe5d1b596e943130a686d116e7cb021df506896710521cbb2e3a65b65" }, "downloads": -1, "filename": "malduck-3.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4cc0887dc620c717b7a0df72fb531514", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 74761, "upload_time": "2020-03-12T12:51:35", "upload_time_iso_8601": "2020-03-12T12:51:35.600554Z", "url": "https://files.pythonhosted.org/packages/dd/20/b66f6f6884f9feaffbe7deeac76be6378e4156aa56dd1c932b0f27426ff7/malduck-3.1.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "3.2.0": [ { "comment_text": "", "digests": { "md5": "a5cab9955c4769c95cebf299bf886f5e", "sha256": "e130cfab448b4497b58242e55eac0ee85217d9973a29b29550d6debec1db8427" }, "downloads": -1, "filename": "malduck-3.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a5cab9955c4769c95cebf299bf886f5e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 78476, "upload_time": "2020-06-22T15:37:01", "upload_time_iso_8601": "2020-06-22T15:37:01.992841Z", "url": "https://files.pythonhosted.org/packages/18/ed/d860fe30774caedc3a3ba161a057b28a6f8e5da7c82390c05350e8b9ae1a/malduck-3.2.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "4.0.0": [ { "comment_text": "", "digests": { "md5": "31b7f96adbfc2d7b7f088d016df8750f", "sha256": "2f3206193539a206d2492cef8e934420bc3b4707de965dbdefe8ede7083d5b12" }, "downloads": -1, "filename": "malduck-4.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "31b7f96adbfc2d7b7f088d016df8750f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 84535, "upload_time": "2020-07-13T10:36:45", "upload_time_iso_8601": "2020-07-13T10:36:45.316354Z", "url": "https://files.pythonhosted.org/packages/4b/02/fea362db578dd8261305f2fc95b9e11c89c77ac0eafb17a0551177b702b3/malduck-4.0.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "4.0.1": [ { "comment_text": "", "digests": { "md5": "b1a9ca8e052a81021c5f5cb3fd21303b", "sha256": "6dc9e5186d361a3aa84a87304671228869fba7d3473f2e6a070385dd77876c12" }, "downloads": -1, "filename": "malduck-4.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b1a9ca8e052a81021c5f5cb3fd21303b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 84528, "upload_time": "2020-07-17T14:26:46", "upload_time_iso_8601": "2020-07-17T14:26:46.745043Z", "url": "https://files.pythonhosted.org/packages/65/c5/06bb8eb7e659f35f5d677dd5f2a3cf758f19af6441706a387e8c3630af62/malduck-4.0.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "4.0.2": [ { "comment_text": "", "digests": { "md5": "842a39ed096170dcc9e572966a5d74c7", "sha256": "4e1450eb4bfc53ecf679ba9deb8640a4897095e2a03629d3276e1fc4e5c70b16" }, "downloads": -1, "filename": "malduck-4.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "842a39ed096170dcc9e572966a5d74c7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 84775, "upload_time": "2020-08-20T11:02:59", "upload_time_iso_8601": "2020-08-20T11:02:59.795413Z", "url": "https://files.pythonhosted.org/packages/11/d1/0809bb45ea52538e54a87c501025e97bf4ec7796554577d9272c915b6c3c/malduck-4.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "4.0.3": [ { "comment_text": "", "digests": { "md5": "cf2feba608b439881f661f3e2d3a527e", "sha256": "e79768e9d7cf624c20a1a9ddb495d3ff622e4469a782a4d722e564b15bd7c9e1" }, "downloads": -1, "filename": "malduck-4.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "cf2feba608b439881f661f3e2d3a527e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 85120, "upload_time": "2020-09-18T10:13:11", "upload_time_iso_8601": "2020-09-18T10:13:11.878778Z", "url": "https://files.pythonhosted.org/packages/b8/4e/052afcc5830d31677e8cdfbf243c508b685496dabb0a04356a3b8cad8f07/malduck-4.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "4.1.0": [ { "comment_text": "", "digests": { "md5": "372bfe4142a8c43301094b13855934b0", "sha256": "333754ebdd4aac8a42dcb8db820f5e2411d2ccabf6cbd7b8c37b08c9de99664c" }, "downloads": -1, "filename": "malduck-4.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "372bfe4142a8c43301094b13855934b0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 87727, "upload_time": "2020-12-22T16:46:12", "upload_time_iso_8601": "2020-12-22T16:46:12.118879Z", "url": "https://files.pythonhosted.org/packages/f5/3b/80538ec5bac6bf76a29957d20bf1ced7eb75c31c306948b67027fb335257/malduck-4.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "4.2.0": [ { "comment_text": "", "digests": { "md5": "2311ce07e6a5b0c09463a1301fc9a399", "sha256": "d80cf8bea7ba81c80f969af6ccb099d6894d5f93ed6b0545f54f639e7dc95aab" }, "downloads": -1, "filename": "malduck-4.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2311ce07e6a5b0c09463a1301fc9a399", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 90140, "upload_time": "2022-04-25T20:10:26", "upload_time_iso_8601": "2022-04-25T20:10:26.289347Z", "url": "https://files.pythonhosted.org/packages/36/3e/3d2ad4492d39d96275c10fcc25bf909d6f097b17945042f77615b911d76a/malduck-4.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2311ce07e6a5b0c09463a1301fc9a399", "sha256": "d80cf8bea7ba81c80f969af6ccb099d6894d5f93ed6b0545f54f639e7dc95aab" }, "downloads": -1, "filename": "malduck-4.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2311ce07e6a5b0c09463a1301fc9a399", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 90140, "upload_time": "2022-04-25T20:10:26", "upload_time_iso_8601": "2022-04-25T20:10:26.289347Z", "url": "https://files.pythonhosted.org/packages/36/3e/3d2ad4492d39d96275c10fcc25bf909d6f097b17945042f77615b911d76a/malduck-4.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }