{ "info": { "author": "Loic Jaquemet", "author_email": "loic.jaquemet+python@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License (GPL)", "Programming Language :: Python", "Topic :: Security", "Topic :: System :: Networking" ], "description": "python-haystack memory forensics\n################################\n\n|travis| |coverage| |landscape| |pypi| |docs|\n\nQuick Start:\n============\n`Quick usage guide `_ in the docs/ folder.\n\n`Haystack-reverse CLI `_ in the docs/ folder.\n\n`More documentation `_\n\nIntroduction:\n=============\n\npython-haystack is an heap analysis framework, focused on searching and reversing of\nC structure in allocated memory.\n\nThe first function/API is the SEARCH function.\nIt gives the ability to search for known record types in a process memory dump or live process's memory.\n\nThe second function/API is the REVERSE function in the extension `python-haystack-reverse `_\nIt aims at helping an analyst in reverse engineering the memory records types present in a process heap.\nIt focuses on reconstruction, classification of classic C structures from memory.\nIt attempts to recreate types definition.\n\nScripts & Memory handler format:\n================================\n\nA few entry points exists to handle the format your memory dump.\n\nMemory dump folder produced by ``haystack-live-dump``\n-----------------------------------------------------\n - ``haystack-find-heap`` allows to show details on Windows HEAP.\n - ``haystack-search`` search CLI\n - ``haystack-show`` show CLI for specific record type at a specific address\n\nYou can use the following URL to designate your memory handler/dump:\n\n - ``dir:///path/to/my/haystack/fump/folder`` to use the haystack dump format\n - ``dmp:///path/to/my/minidump/file`` use the minidump format (microsoft?)\n - ``frida://name_or_pid_of_process_to_attach_to`` use frida to access a live process memory\n - ``live://name_or_pid_of_process_to_attach_to`` ptrace a live process\n - ``rekall://`` load a rekall image\n - ``volatility://`` load a volatility image\n - ``cuckoo://`` load a memory dump produced by Cuckoo (beta might need patch)\n\n\nHow to get a memory dump:\n=========================\n\nOn Windows, the most straightforward is to get a Minidump. The Microsoft Sysinternals\nsuite of tools provide either a CLI (procdump.exe) or a GUI (Process explorer).\nUsing one of these (with full memory dump option) you will produce a file\nthat can be used with the ``haystack-minidump-xxx`` list of entry points.\n\nWhile technically you could use many third party tool, haystack actually\nneed memory mapping information to work with.\nSo there is a dumping tool included ``haystack-live-dump``:\n\n.. code-block:: bash\n\n # haystack-live-dump myproc.dump\n\nFor live processes\n------------------\n - ``haystack-live-dump`` capture a process memory dump to a folder (haystack format)\n\nFor a Rekall memory dump\n------------------------\n - ``haystack-rekall-dump`` dump a specific process to a haystack process dump\n\nFor a Volatility memory dump\n----------------------------\n - ``haystack-volatility-dump`` dump a specific process to a haystack process dump\n\nYou can easily reproduce the format of the dump, its a folder/archive\ncontaining each memory map in a separate file :\n\n- memory content in a file named after it's start/end addresses ( 0x000700000-0x000800000 )\n- 'mappings' file containing memory mappings metadata. ( mappings )\n\nOr you can code a ``haystack.abc.IMemoryMapping`` implementation for your favorite format.\n\nOtherwise, if you already have a system memory dump from Volatility or Rekall,\nyou can use the ``haystack-rekall-xxx`` or ``haystack-volatility-xxx`` families of\nentry points to extract a specific process memory into a file.\n\nVerifying Windows Heap attributes:\n==================================\n\nThe entry point ``haystack-find-heap`` allows to show details on Windows HEAP.\nIt should support:\n\n- Windows XP 32 bits\n- Windows XP 64 bits\n- Windows 7 32 bits\n- Windows 7 64 bits\n\nand show details of the Look Aside List (LAL) and Low Fragmentation Heap (LFH) frontend.\n\nYou might be surprised to see that sometimes, a single process can mix the two types of HEAP (32 & 64).\n\nSearch for known structures:\n============================\n\nTo search for a specific record, you will first need to define that record type.\nA [quick usage guide](docs/Haystack basic usage.ipynb) is available to go\nover the basic steps to go from a C Header file to a Python ctypes definition.\nOr you can do it yourself, with traditional Python ctypes records.\n\nThe search api is available through the ``haystack-xxx-search`` family of scripts but\nalso in an API so that you can embed that search in your own code.\n\nIn short, the haystack search will iterate over every offset of the program's\nmemory to try and find 'valid' offset for that specific record type.\n\nThe validity of the record is determined by type constraints such as:\n- pointer field should have valid address space values\n- user-defined type constraints (see 'Constraints file' section below)\n- etc..\n\n.. code-block:: bash\n\n $ python haystack/cli.py dir:///home/user/project/python-haystack/test/src/test-ctypes6.32.dump ctypes6_gen32.struct_usual\n\nConstraints file:\n-----------------\n\nThe following constraints are supported:\n - IgnoreMember: The value of this field will be ignored. Useful to Ignore pointer fields.\n - NotNull: The value of this field must not be 0.\n - RangeValue(x,y): the field must have a value between x and y.\n - PerfectMatch('hello world'): the field (a string) must match 'hello world'\n - [1,2,3]: A list of values that the fields should have\n - [1, RangeValue(12,16), 42]: The field value should be 1, 12-16 or 42.\n\n\nExample:\n\n.. code-block:: python\n\n [struct_name]\n myfield: [1,0xff]\n ptr_field: NotNull\n\nYou can take a look a ``haystack/allocators/win32/winxpheap32.constraints``, where\nthe constraints of a Windows XP HEAP x32 are defined.\n\nObviously, the more constraints, the better the results will be.\n\nDynamic constraints definition:\n-------------------------------\nYou can also create more complex constraints using python code by implementing\na ``haystack.abc.interface.IRecordTypeDynamicConstraintsValidator`` class and feeding it to\nthe ``ModuleConstraints.set_dynamic_constraints``\n\nCommand line example:\n---------------------\n\n**sslsnoop repository needs an update to be compatible with releases > v0.30 - pending**\n\nFor example, this will dump the session_state structures + pointed\nchildren structures as an python object that we can play with.\nLets assume we have an ssh client or server as pid *4042*:\n\n.. code-block:: bash\n\n $ sudo haystack-live-search --pickled 4042 sslsnoop.ctypes_openssh.session_state search > instance.pickled\n $ sudo haystack-live-search --pickled 4042 sslsnoop.ctypes_openssh.session_state refresh 0xb8b70d18 > instance.pickled\n $ sudo haystack-live-search --pickled search\n\n\nGraphic User Interface :\n------------------------\n\n**This is not working right now**\n\nThere is also an attempt at a Graphical UI `python-haystack-gui `_\n\n\npython API example:\n-------------------\n\nSee the `quick usage guide `_\n\n\nHow to define your own structures:\n----------------------------------\n\nThe most easy way is to use ctypeslib to generate ctypes records from\nC Headers.\n\nOr define your python ctypes record by hand.\n\n\nExtension examples :\n====================\n@ see sslsnoop in the Pypi repo. openssl and nss structures are generated.\n\n@ see ctypes-kernel on my github. Linux kernel structure are generated from a build kernel tree. (VMM is abitch)\n\n\n\nnot so FAQ :\n============\n\nWhat does it do ?:\n------------------\nThe basic functionality is to search in a process' memory for a\nspecific C Record.\n\nThe extended reverse engineering functionality aims at reversing\nstructures from memory/heap analysis.\n\nHow do it knows that the structures is valid ? :\n------------------------------------------------\nYou add some constraints on the record fields expected values.\nPointers are always constrained to valid memory space.\n\nWhere does the idea comes from ? :\n----------------------------------\n`passe-partout `_ originally.\nsince I started in March 2011, I have uncovered several other related\nprevious work.\n\nMost of them are in the docs/ folder.\n\nOther related work are mona.py from Immunity, some other Mandiant stuff...\n\nIn a nutshell, this is probably not an original idea. But yet, I could\nnot find a operational standalone lib for live memory extraction for my sslsnoop PoC, so....\n\n`Related work `_\n\nWhat are the dependencies ? :\n-----------------------------\n\n- python-ptrace on linux\n- winappdbg on win32 ( not sure if working, feedback welcome)\n- python-numpy\n- python-networkx\n- python-levenshtein\n- several others...\n\nOthers\n------\nhttp://ntinfo.biz/ xntsv32\n\n.. |pypi| image:: https://img.shields.io/pypi/v/haystack.svg?style=flat-square&label=latest%20stable%20version\n :target: https://pypi.python.org/pypi/haystack\n :alt: Latest version released on PyPi\n\n.. |coverage| image:: https://img.shields.io/coveralls/trolldbois/python-haystack/master.svg?style=flat-square&label=coverage\n :target: https://coveralls.io/github/trolldbois/python-haystack?branch=master\n :alt: Test coverage\n\n.. |travis| image:: https://img.shields.io/travis/trolldbois/python-haystack/master.svg?style=flat-square&label=travis-ci\n :target: http://travis-ci.org/trolldbois/python-haystack\n :alt: Build status of the master branch on Mac/Linux\n\n.. |landscape| image:: https://landscape.io/github/trolldbois/python-haystack/master/landscape.svg?style=flat\n :target: https://landscape.io/github/trolldbois/python-haystack/master\n :alt: Code Health\n\n.. |docs| image:: https://readthedocs.org/projects/python-haystack/badge/?version=latest\n :target: https://readthedocs.org/projects/python-haystack/badge/?version=latest\n :alt: Documentation status", "description_content_type": null, "docs_url": null, "download_url": "http://github.com/trolldbois/python-haystack/tree/master", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://packages.python.org/haystack/", "keywords": "memory", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "haystack", "package_url": "https://pypi.org/project/haystack/", "platform": "", "project_url": "https://pypi.org/project/haystack/", "project_urls": { "Download": "http://github.com/trolldbois/python-haystack/tree/master", "Homepage": "http://packages.python.org/haystack/" }, "release_url": "https://pypi.org/project/haystack/0.42/", "requires_dist": null, "requires_python": "", "summary": "Search C Structures in a process' memory", "version": "0.42" }, "last_serial": 2995782, "releases": { "0.10": [ { "comment_text": "", "digests": { "md5": "2a68e0005e208e29c4c382d636fe0d37", "sha256": "1cf5f3be9cd41372afa7fa6f6ea8b96e094d794186abf9271f0eb87ad29a7db8" }, "downloads": -1, "filename": "haystack-0.10.tar.gz", "has_sig": false, "md5_digest": "2a68e0005e208e29c4c382d636fe0d37", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46548, "upload_time": "2011-08-16T05:15:59", "url": "https://files.pythonhosted.org/packages/19/05/b5cde2f8d631f73c1798ce3b0b810af400c7e7d88ef9cfceb0e16b2bbe08/haystack-0.10.tar.gz" } ], "0.11": [ { "comment_text": "", "digests": { "md5": "36cbb7e0882fd923bc5ecff0ca28e1f9", "sha256": "27ca3767a935ded210654456bacebb55ab923dd81c9704565ba23a3519d74511" }, "downloads": -1, "filename": "haystack-0.11.tar.gz", "has_sig": false, "md5_digest": "36cbb7e0882fd923bc5ecff0ca28e1f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57839, "upload_time": "2011-08-22T05:04:25", "url": "https://files.pythonhosted.org/packages/c7/fd/dbd619a4abf9100d228b4838557ac7eb04b68518961b7c131ea47e8b525d/haystack-0.11.tar.gz" } ], "0.12": [ { "comment_text": "", "digests": { "md5": "5e82be87cc49af8c0594519bd0a8d67d", "sha256": "fa38f019702e701663b797d734dfea2bed5cdc14b1ef1beed3b4924fabdd0586" }, "downloads": -1, "filename": "haystack-0.12.tar.gz", "has_sig": false, "md5_digest": "5e82be87cc49af8c0594519bd0a8d67d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58558, "upload_time": "2011-08-24T05:04:31", "url": "https://files.pythonhosted.org/packages/75/a4/afe0e7f2f9fac9b3a885f843d7cd19fb6bc4c3c5f215f3a676097a1a46f4/haystack-0.12.tar.gz" } ], "0.13": [ { "comment_text": "", "digests": { "md5": "db0da6f2e818d4f86554b7166850a423", "sha256": "028b4ce344f89bb92dc22553236ee5b28617c735384dfe81b59c2702ab6842eb" }, "downloads": -1, "filename": "haystack-0.13.tar.gz", "has_sig": false, "md5_digest": "db0da6f2e818d4f86554b7166850a423", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59398, "upload_time": "2011-08-29T05:55:08", "url": "https://files.pythonhosted.org/packages/2e/2d/3ad68242d931b26a36dc998ca48369b3b62cdea85589c142815d85190135/haystack-0.13.tar.gz" } ], "0.15": [ { "comment_text": "", "digests": { "md5": "5baa882af9855300462df40f97a93a7c", "sha256": "3539a13a3725af4823663d0b1b6e5aebef978c98f722cebd7e097232f83a0bfd" }, "downloads": -1, "filename": "haystack-0.15.tar.gz", "has_sig": false, "md5_digest": "5baa882af9855300462df40f97a93a7c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 122978, "upload_time": "2012-02-19T07:00:13", "url": "https://files.pythonhosted.org/packages/d1/77/c213037033c0e3d2020aa995026649c96cef1a77f14e5868a8f0d2787e73/haystack-0.15.tar.gz" } ], "0.16": [ { "comment_text": "", "digests": { "md5": "0c7a0c969c2925c11cacef9b9b7a3db8", "sha256": "5e228cfd6abf1645a02f422f0d3eaa7fad38a2d9a9bc02965102bed755a3766d" }, "downloads": -1, "filename": "haystack-0.16-py2.6.egg", "has_sig": false, "md5_digest": "0c7a0c969c2925c11cacef9b9b7a3db8", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 361147, "upload_time": "2012-04-05T06:15:11", "url": "https://files.pythonhosted.org/packages/73/67/33ce04b591d5afaa8040cad811f9da87c52678c4bd5217b332ac2d77f0ab/haystack-0.16-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "92047433aafe7ecbd6a596101384487c", "sha256": "d387c101dfb617180e5644cf7fc280a90c5f4eb00cb49136907d77d6068e2397" }, "downloads": -1, "filename": "haystack-0.16-py2.7.egg", "has_sig": false, "md5_digest": "92047433aafe7ecbd6a596101384487c", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 359596, "upload_time": "2012-04-05T06:15:53", "url": "https://files.pythonhosted.org/packages/47/18/072a5432883eb04fe25f03b0f5351337a7076d95abe55b7f5f938a2e11bb/haystack-0.16-py2.7.egg" } ], "0.17": [], "0.2": [ { "comment_text": "", "digests": { "md5": "7071b11a246fde19f652d21449924c7d", "sha256": "ff35bbabf3374ee262209abbd72dae82e2fae7f6cf2b02a5c7906b4eeb2f07cb" }, "downloads": -1, "filename": "haystack-0.2.tar.gz", "has_sig": false, "md5_digest": "7071b11a246fde19f652d21449924c7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14204, "upload_time": "2011-03-29T05:34:44", "url": "https://files.pythonhosted.org/packages/2c/3c/c35a7ea088cefdff6982bb48ec666e4d38306815e25d49ed151e50f669ce/haystack-0.2.tar.gz" } ], "0.20": [], "0.21": [ { "comment_text": "", "digests": { "md5": "54f92c32361ac0dc088a7d6d8a48427a", "sha256": "24ee5e1143fca5704cc37c16816afd36ea5bedf532245dc4e9f6e8d9ba0a22c8" }, "downloads": -1, "filename": "haystack-0.21-py2.7.egg", "has_sig": false, "md5_digest": "54f92c32361ac0dc088a7d6d8a48427a", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 537334, "upload_time": "2015-09-10T20:24:22", "url": "https://files.pythonhosted.org/packages/83/7c/22e92fd9117d6c85c09ded5969950eb25f848879df2e483862daf9e2fa5b/haystack-0.21-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "30f56a28346d9c4dc77575aa38d27313", "sha256": "578063aa361151b0ea53e6416882f4c3947838c3add09775ff2d0abfad46bc16" }, "downloads": -1, "filename": "haystack-0.21.tar.gz", "has_sig": false, "md5_digest": "30f56a28346d9c4dc77575aa38d27313", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215170, "upload_time": "2015-09-10T20:24:13", "url": "https://files.pythonhosted.org/packages/12/06/7ad563a09916356b6670fc7947d1301c2c1460db707d03ae66bd8d7cd970/haystack-0.21.tar.gz" } ], "0.22": [ { "comment_text": "", "digests": { "md5": "71c167ae99a966e5c91549e85a9e2da4", "sha256": "fe7f04ff7b7fb15eddeb6b9a89ee0b9423c8e0993ff01ca3bc251bc983e31d9d" }, "downloads": -1, "filename": "haystack-0.22-py2.7.egg", "has_sig": false, "md5_digest": "71c167ae99a966e5c91549e85a9e2da4", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 537274, "upload_time": "2015-09-10T20:45:56", "url": "https://files.pythonhosted.org/packages/dc/ef/44ba8a2b93d3268a30233973d957dd83ee09d78719a621868fa6800775d6/haystack-0.22-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "2faf59773551dcf15098d8e0403d379b", "sha256": "3a25d71439a0b0157ada2ac2c1e58b9d8bf2d0321cdb58460b718072ea3e468e" }, "downloads": -1, "filename": "haystack-0.22.tar.gz", "has_sig": false, "md5_digest": "2faf59773551dcf15098d8e0403d379b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215153, "upload_time": "2015-09-10T20:45:46", "url": "https://files.pythonhosted.org/packages/90/57/228d907482a42b06daa5cf1de8e1b934e87add009fbd6db4e99fb95fc1e6/haystack-0.22.tar.gz" } ], "0.23": [ { "comment_text": "", "digests": { "md5": "9fd2710e38a7ce447a7c72f944406afa", "sha256": "340a03c1f79c84332cd682f30b86417a307ef69969d847426b15bf04b09ee34c" }, "downloads": -1, "filename": "haystack-0.23-py2.7.egg", "has_sig": false, "md5_digest": "9fd2710e38a7ce447a7c72f944406afa", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 537271, "upload_time": "2015-09-10T20:51:30", "url": "https://files.pythonhosted.org/packages/ce/59/1490ed6db5bf58366f4c484edb8cfdb2aebaf50cd7dd12b247f1ac7744b9/haystack-0.23-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "6dc171a2fcf7a60823dd07cf473f4071", "sha256": "7481c18ed311a6324e0855b2ebd72b57ef52d9f3d27eac9af99ead8ce6602046" }, "downloads": -1, "filename": "haystack-0.23.tar.gz", "has_sig": false, "md5_digest": "6dc171a2fcf7a60823dd07cf473f4071", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215168, "upload_time": "2015-09-10T20:51:21", "url": "https://files.pythonhosted.org/packages/f6/da/63d7b066cd12c5089f2ddcc99d43d4497ad3bb313f494c144d1d935a3801/haystack-0.23.tar.gz" } ], "0.24": [ { "comment_text": "", "digests": { "md5": "e89f2a7c0a128fe6c1b08fa1c9e5e6b2", "sha256": "4ae6a933c2533b0bc41e3530bae62d3faf049dfb22f602303d644d14c270a773" }, "downloads": -1, "filename": "haystack-0.24-py2.7.egg", "has_sig": false, "md5_digest": "e89f2a7c0a128fe6c1b08fa1c9e5e6b2", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 537271, "upload_time": "2015-09-10T20:52:56", "url": "https://files.pythonhosted.org/packages/45/a2/d136ed5e0c2258e57c1e85798dec748b427e5b864730de000944d2aacab2/haystack-0.24-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "bcc8a1a380cb79a91210b279d4b7dfdd", "sha256": "087e74e2057dcc40737e4410b41362f6b3d04d9eb09b01683d39d512aa60af3e" }, "downloads": -1, "filename": "haystack-0.24.tar.gz", "has_sig": false, "md5_digest": "bcc8a1a380cb79a91210b279d4b7dfdd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215173, "upload_time": "2015-09-10T20:52:47", "url": "https://files.pythonhosted.org/packages/b4/11/d826214f7464fb745107c6086c281c77425477948129801d05a3269227c3/haystack-0.24.tar.gz" } ], "0.25": [ { "comment_text": "", "digests": { "md5": "d8325eaa2300356fd92e8554dac8598e", "sha256": "c9785f7899c4e05cc79fbc16c8351cd47794819ddeb035c83cbf361bebb8ab2b" }, "downloads": -1, "filename": "haystack-0.25-py2.7.egg", "has_sig": false, "md5_digest": "d8325eaa2300356fd92e8554dac8598e", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 537200, "upload_time": "2015-09-11T21:08:42", "url": "https://files.pythonhosted.org/packages/8d/e8/99472b99703b39df6fd02724cf181da90291fd34d0ebaf852473ced66563/haystack-0.25-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "dd5f9b803a51a220a211c3e9790909c3", "sha256": "760dca65c04263c544fbe41806da2906670f41e0476c424826829a6b072c2b64" }, "downloads": -1, "filename": "haystack-0.25.tar.gz", "has_sig": false, "md5_digest": "dd5f9b803a51a220a211c3e9790909c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215159, "upload_time": "2015-09-11T21:08:32", "url": "https://files.pythonhosted.org/packages/90/f3/0246329121e9ac19714df69236a15886e9007419004612d9896a43830e42/haystack-0.25.tar.gz" } ], "0.26": [ { "comment_text": "", "digests": { "md5": "ce41cc0a0a84109d32a38b5a1d63d828", "sha256": "9ddf46eb1934ecb49e0e6591c924a18ca8f3c3f4cba8a636ab8555a428033d46" }, "downloads": -1, "filename": "haystack-0.26-py2.7.egg", "has_sig": false, "md5_digest": "ce41cc0a0a84109d32a38b5a1d63d828", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 537204, "upload_time": "2015-09-11T21:11:42", "url": "https://files.pythonhosted.org/packages/2e/03/c7ba17451eac3537707da67a03384fbdbca08c6df9f1bf823a3f2555ebcd/haystack-0.26-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "f5ebe83a3b6309b59a48e66b1e7717da", "sha256": "cb19c633b23c6e6d8f0775bb370e26b4bd8870473ad4424f4e0ab08204e8059f" }, "downloads": -1, "filename": "haystack-0.26.tar.gz", "has_sig": false, "md5_digest": "f5ebe83a3b6309b59a48e66b1e7717da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215157, "upload_time": "2015-09-11T21:11:32", "url": "https://files.pythonhosted.org/packages/2c/65/78050075039569afd7127ca375850d339de7426c5a614f71aed7071d0249/haystack-0.26.tar.gz" } ], "0.27": [ { "comment_text": "", "digests": { "md5": "53d548cc4c101a76fb967afe056bfe62", "sha256": "d91708170b1883b1ab19e5ab7b7b78eb591eaeea9967f14f909c3ac925a657ef" }, "downloads": -1, "filename": "haystack-0.27-py2.7.egg", "has_sig": false, "md5_digest": "53d548cc4c101a76fb967afe056bfe62", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 537265, "upload_time": "2015-09-23T22:10:29", "url": "https://files.pythonhosted.org/packages/fe/ab/3b1817edcd3046c94ae3fc4723383dbcee8807b0fe56cd47f9bb108b85b2/haystack-0.27-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "28667daa9adad5ffaba4c18559e7bdcc", "sha256": "d1dc04780755c2f381d676faa789380609ad782a3f1cd938c0dd6fb46b3681ec" }, "downloads": -1, "filename": "haystack-0.27.tar.gz", "has_sig": false, "md5_digest": "28667daa9adad5ffaba4c18559e7bdcc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 214181, "upload_time": "2015-09-23T22:10:15", "url": "https://files.pythonhosted.org/packages/0e/bd/1dacf240d70edebb5356ef4ab7e5964fe12bbee53d63b9e54aea446a73ea/haystack-0.27.tar.gz" } ], "0.28": [ { "comment_text": "", "digests": { "md5": "92b3ba798847801123adc1ba206886f9", "sha256": "f8221f25663d343e9d9a9642256837ae4ff53498a980f69bda656b9ce14f1642" }, "downloads": -1, "filename": "haystack-0.28-py2.7.egg", "has_sig": false, "md5_digest": "92b3ba798847801123adc1ba206886f9", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 550170, "upload_time": "2015-10-08T00:27:45", "url": "https://files.pythonhosted.org/packages/d0/fd/ceede62f0a7f4d0a926cc8e60c27faf947b9b103985fb76e1b66d4a39ecf/haystack-0.28-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "18fec348b4dfe963d6d20185c675147b", "sha256": "99a4557e0b8d2fbbbfc05f349a7e45d67c1c29c6e86dbb5bfebc04d6343e5a93" }, "downloads": -1, "filename": "haystack-0.28.tar.gz", "has_sig": false, "md5_digest": "18fec348b4dfe963d6d20185c675147b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215978, "upload_time": "2015-10-08T00:27:35", "url": "https://files.pythonhosted.org/packages/9e/3a/dc8d52faeb8bf53ded72a77d245a6eed4bf0f145361085801010cba08228/haystack-0.28.tar.gz" } ], "0.29": [ { "comment_text": "", "digests": { "md5": "9c295ffef165913d99be521769540e18", "sha256": "5c6765c2c96fc6497b8a1839f32cb03da2fef77d6684f44388602f14b884f1aa" }, "downloads": -1, "filename": "haystack-0.29-py2.7.egg", "has_sig": false, "md5_digest": "9c295ffef165913d99be521769540e18", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 550297, "upload_time": "2015-10-08T22:21:39", "url": "https://files.pythonhosted.org/packages/eb/9e/7f6e76ad3ed011d06fabe95a9d732b2c13440b0957babe60d905cc33c976/haystack-0.29-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "436223f7e79c452a7289cadb7374065a", "sha256": "4d413f0e4d7eb45eebcf9c6a50119db76baf30f8f4abbe4a1547f8df60df5d6e" }, "downloads": -1, "filename": "haystack-0.29.tar.gz", "has_sig": false, "md5_digest": "436223f7e79c452a7289cadb7374065a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215990, "upload_time": "2015-10-08T22:21:30", "url": "https://files.pythonhosted.org/packages/ef/ad/c82bbdf5b0305ec511abe2eb40fb5128f034743539351075d8f949b2d1d6/haystack-0.29.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "091e6c733e504c9c88291b348ee33704", "sha256": "a001c1916155aeb040b59c9d0b461b8c3368e07265720a86d23744c7b28b6a4a" }, "downloads": -1, "filename": "haystack-0.3.tar.gz", "has_sig": false, "md5_digest": "091e6c733e504c9c88291b348ee33704", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15831, "upload_time": "2011-03-31T01:32:35", "url": "https://files.pythonhosted.org/packages/89/94/4feac1e0e360e9fbd65f66ca95836e00f6072a0845bb1c085a9dff5f7996/haystack-0.3.tar.gz" } ], "0.30": [ { "comment_text": "", "digests": { "md5": "24576e3af57ca226329d4d1a38bb24df", "sha256": "ba77083b4b33afe03ad25e777a8ca9f1bb71af919f69ba3acd410402253e4c7f" }, "downloads": -1, "filename": "haystack-0.30-py2.7.egg", "has_sig": false, "md5_digest": "24576e3af57ca226329d4d1a38bb24df", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 729941, "upload_time": "2015-10-29T03:32:24", "url": "https://files.pythonhosted.org/packages/4e/61/27ce298be85e2a6a33f56adf786f181635237d1c4878ebe18c845a2ebe68/haystack-0.30-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "c85ee62708b561faf1eec4e8ca1f2f4b", "sha256": "0638db18ce4e4b28e67a2c2c78839f014a053bac1d1629ae11c9858a5203b515" }, "downloads": -1, "filename": "haystack-0.30.tar.gz", "has_sig": false, "md5_digest": "c85ee62708b561faf1eec4e8ca1f2f4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215512, "upload_time": "2015-10-29T03:31:59", "url": "https://files.pythonhosted.org/packages/86/e2/8e931a14290f30e06e49e50bc3b9a783754bfedcb6bb7c96523a307c28a1/haystack-0.30.tar.gz" } ], "0.31": [ { "comment_text": "", "digests": { "md5": "83c0c36098502c1f274dd91de2916a19", "sha256": "bedaae63540f969e11a6f6448708d39c922ce47673fd8c3dd284ace7d590b07e" }, "downloads": -1, "filename": "haystack-0.31-py2.7.egg", "has_sig": false, "md5_digest": "83c0c36098502c1f274dd91de2916a19", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 731955, "upload_time": "2015-11-05T03:56:21", "url": "https://files.pythonhosted.org/packages/f9/c5/7d09d1f735f1ba410768e4999c805367a19d21759979468f818e35f66610/haystack-0.31-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "739e7facce895c51d2cd09ad2cc62f05", "sha256": "587dcc1ae846f30a299d659a72e273d0b924743cb24d8d997b84db04dc0979f4" }, "downloads": -1, "filename": "haystack-0.31.tar.gz", "has_sig": false, "md5_digest": "739e7facce895c51d2cd09ad2cc62f05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 216540, "upload_time": "2015-11-05T03:56:09", "url": "https://files.pythonhosted.org/packages/93/80/14e3fe77ac3305ba6a91ad89c335b0312edf42effe6e6c5c2d6dcf0cdd55/haystack-0.31.tar.gz" } ], "0.32": [ { "comment_text": "", "digests": { "md5": "f616351453d3e91db24382de9c1059f9", "sha256": "b9256ddf9e79cf0507bb4247f8b61183f1dbe5fdb2c0b59b8911c2c679134182" }, "downloads": -1, "filename": "haystack-0.32.tar.gz", "has_sig": false, "md5_digest": "f616351453d3e91db24382de9c1059f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 239766, "upload_time": "2016-01-25T03:55:37", "url": "https://files.pythonhosted.org/packages/5d/9a/bfa913a437f820b98c72bef69a56ad67fd227c86a83ec97fea47a42bca64/haystack-0.32.tar.gz" } ], "0.33": [ { "comment_text": "", "digests": { "md5": "faf399313e770594a52e1eeb0781bf7f", "sha256": "fbe938a8f2f45d19b563d7d84ec9c10881d6b0b8cc0266ad6450d27f99c3af62" }, "downloads": -1, "filename": "haystack-0.33.tar.gz", "has_sig": false, "md5_digest": "faf399313e770594a52e1eeb0781bf7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 240098, "upload_time": "2016-01-26T16:18:23", "url": "https://files.pythonhosted.org/packages/aa/ae/81856402d9df1948d51d355a91f485c3cf32484178050f43a24108a707fc/haystack-0.33.tar.gz" } ], "0.34": [ { "comment_text": "", "digests": { "md5": "61e7ab731206e7b5da20ee1e196785ee", "sha256": "5e6b3150140edd41cdd4664607fd332c641ce2aa1ffb07df970bc7a965fc6dfa" }, "downloads": -1, "filename": "haystack-0.34.tar.gz", "has_sig": false, "md5_digest": "61e7ab731206e7b5da20ee1e196785ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 245864, "upload_time": "2016-03-05T08:07:09", "url": "https://files.pythonhosted.org/packages/da/68/d06f8c658fbddc219a2fd6270a83d73c0aa4b44719c02cee06e93a3626b3/haystack-0.34.tar.gz" } ], "0.35": [ { "comment_text": "", "digests": { "md5": "4dd8735e163059d5c5ec9b4b7daa12ea", "sha256": "07af12d067f4c54700f36cb2ed9b1b9daf8ded4fbc6d7a462c307c350c6e23f1" }, "downloads": -1, "filename": "haystack-0.35.tar.gz", "has_sig": false, "md5_digest": "4dd8735e163059d5c5ec9b4b7daa12ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 247210, "upload_time": "2016-03-15T22:57:51", "url": "https://files.pythonhosted.org/packages/a2/5b/0f6f81c402622e4007dead9897f546c965bc156cd51e1631cd25d1dd225a/haystack-0.35.tar.gz" } ], "0.36": [ { "comment_text": "", "digests": { "md5": "2de1750abbf3854da111fa945be770fd", "sha256": "6ac391d82456905bb2592c7277b6fb34618a7366899174b254e86f4879208973" }, "downloads": -1, "filename": "haystack-0.36.tar.gz", "has_sig": false, "md5_digest": "2de1750abbf3854da111fa945be770fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 246582, "upload_time": "2016-03-16T15:55:11", "url": "https://files.pythonhosted.org/packages/16/b9/ac91ac68fd6f6900f53a7a1cbefadac5b2169faf7ed449a6f7b06a79e446/haystack-0.36.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "6281f26df1c7b28d546ce1c3880c8e61", "sha256": "b31bc99c4b6faaca18c4b394948f63851e37e67105b0019c8b8b7a3bda718239" }, "downloads": -1, "filename": "haystack-0.4.tar.gz", "has_sig": false, "md5_digest": "6281f26df1c7b28d546ce1c3880c8e61", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17431, "upload_time": "2011-04-01T22:59:49", "url": "https://files.pythonhosted.org/packages/60/41/f09537f706c4ef25b5c1d2301a5b023d8c6f3cde3dea1125267d84902168/haystack-0.4.tar.gz" } ], "0.40": [ { "comment_text": "", "digests": { "md5": "5fc70a797f439aa93f562f3cde23e586", "sha256": "24bb7b64c4bf02796369a7e9c838c45f091070857517731573bdb593fec8cf61" }, "downloads": -1, "filename": "haystack-0.40-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5fc70a797f439aa93f562f3cde23e586", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 175196, "upload_time": "2017-06-08T23:47:38", "url": "https://files.pythonhosted.org/packages/13/60/aa93a9397dae45072f317750e1d1f77073cdc531f729f72c21f2c46776a8/haystack-0.40-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38c97971eaadd123bbddfaaf04579dcd", "sha256": "b1348f38acd6a06319933e64c4d1243f2ae9f4e39090121a7d3ef494ec55a306" }, "downloads": -1, "filename": "haystack-0.40.tar.gz", "has_sig": false, "md5_digest": "38c97971eaadd123bbddfaaf04579dcd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 155336, "upload_time": "2017-06-08T23:47:36", "url": "https://files.pythonhosted.org/packages/92/cd/c84824f3352ec6acf43cae6d0497e7e457b4a05b6c7996c39e8312594236/haystack-0.40.tar.gz" } ], "0.41": [ { "comment_text": "", "digests": { "md5": "09596fd1f2618bd1834e1f618ba4b1c9", "sha256": "05b1248675a85b722f12cb885c2573aeed987578fea49a4378fc689a910c69ce" }, "downloads": -1, "filename": "haystack-0.41-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "09596fd1f2618bd1834e1f618ba4b1c9", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 175653, "upload_time": "2017-06-16T00:23:15", "url": "https://files.pythonhosted.org/packages/6a/69/c6022c62e65c47280df90b469801ac507669b8fbc53ef015a77357af5d70/haystack-0.41-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "362cbdcda1454e8d54d5e000b57e7a27", "sha256": "42e42b38c35808353680f66599038348cbc4038c8e6de0e18f3f981603afc270" }, "downloads": -1, "filename": "haystack-0.41.tar.gz", "has_sig": false, "md5_digest": "362cbdcda1454e8d54d5e000b57e7a27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 156031, "upload_time": "2017-06-16T00:23:12", "url": "https://files.pythonhosted.org/packages/5d/c6/c576b1332e677f36e7eee5a45c57a595611bc3d9ccf026f4b209b2d68880/haystack-0.41.tar.gz" } ], "0.42": [ { "comment_text": "", "digests": { "md5": "f5d9fe6c9e53573265e07809009856fc", "sha256": "3d1a906ddca6a08c6e5f965026cc1978f09795c65d5ab2c84b3c039378a9bec8" }, "downloads": -1, "filename": "haystack-0.42-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f5d9fe6c9e53573265e07809009856fc", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 179600, "upload_time": "2017-07-03T04:44:52", "url": "https://files.pythonhosted.org/packages/3a/4b/b31b92843123801604c496ed483cb8f3d9b998ee54d0233289a417a1e187/haystack-0.42-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f8a30ea484d2688562fb4cb185289784", "sha256": "4eaf0ba481d160639e240602734a9195f3dfc37c6c0ad132a14e9eb1454868f0" }, "downloads": -1, "filename": "haystack-0.42.tar.gz", "has_sig": false, "md5_digest": "f8a30ea484d2688562fb4cb185289784", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 158461, "upload_time": "2017-07-03T04:44:49", "url": "https://files.pythonhosted.org/packages/d2/b7/1647c0807478c81a997ae3c4b9a1db0428b4a1d4fd59dcf70a869ebec2a5/haystack-0.42.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "acb82f7323a39c202a059b5190c40bb4", "sha256": "5d258561a3930aabd823a266ea709dbdd8194f3f7fd48469693db0fdab57269c" }, "downloads": -1, "filename": "haystack-0.5.tar.gz", "has_sig": false, "md5_digest": "acb82f7323a39c202a059b5190c40bb4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17881, "upload_time": "2011-04-08T18:22:21", "url": "https://files.pythonhosted.org/packages/b1/4f/be01dbb40ff9cbad4265e72be9d4587b8ee6d245873aeb37fbcf70644941/haystack-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "a94f7861402287f84d46c1e044c4c26a", "sha256": "a4b39ec520904cce2699689104bde0717863f7cebbf2326d809e32045542dd3e" }, "downloads": -1, "filename": "haystack-0.6.tar.gz", "has_sig": false, "md5_digest": "a94f7861402287f84d46c1e044c4c26a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17875, "upload_time": "2011-04-14T13:21:49", "url": "https://files.pythonhosted.org/packages/51/9f/4d6fdb9b4afdcd0d47077f72fafd4db07cd67d1097412862a56f6e0d7b08/haystack-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "7ae49125ec96b67a5a829ccf5b39fdf2", "sha256": "58dea35da8ce3e09d6ede6dc4b03fa9a72ea64ebfc32ab05939a0ba13cd52436" }, "downloads": -1, "filename": "haystack-0.7.tar.gz", "has_sig": false, "md5_digest": "7ae49125ec96b67a5a829ccf5b39fdf2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17929, "upload_time": "2011-05-07T03:31:48", "url": "https://files.pythonhosted.org/packages/bb/78/8281447e0ca54a788b9ba9b4c0ce4d7f84fc42f58a43707e94b73137b59c/haystack-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "cf8345369d99a238a1ed482006352d47", "sha256": "0e3e851a3999a8e1c04257b9d9a4fd5edc4148170626cb84b5607774c322a1fa" }, "downloads": -1, "filename": "haystack-0.8.tar.gz", "has_sig": false, "md5_digest": "cf8345369d99a238a1ed482006352d47", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33707, "upload_time": "2011-07-08T11:47:51", "url": "https://files.pythonhosted.org/packages/3e/97/2d03659e2e264876d501f7075df1806e20c931312f579517c2f5d97d7126/haystack-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "8c02687e9d0c6dd91893fd89d1c50ffd", "sha256": "1e6b2c8fa83cffeec311ddce34562d01deff1dea30551f172395773ebc248827" }, "downloads": -1, "filename": "haystack-0.9.tar.gz", "has_sig": false, "md5_digest": "8c02687e9d0c6dd91893fd89d1c50ffd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37655, "upload_time": "2011-07-29T06:07:04", "url": "https://files.pythonhosted.org/packages/cc/cf/c18fcd71f931c582852ab9024e5b92d81f9bc6f5ad0169cdc0c374eaa016/haystack-0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f5d9fe6c9e53573265e07809009856fc", "sha256": "3d1a906ddca6a08c6e5f965026cc1978f09795c65d5ab2c84b3c039378a9bec8" }, "downloads": -1, "filename": "haystack-0.42-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f5d9fe6c9e53573265e07809009856fc", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 179600, "upload_time": "2017-07-03T04:44:52", "url": "https://files.pythonhosted.org/packages/3a/4b/b31b92843123801604c496ed483cb8f3d9b998ee54d0233289a417a1e187/haystack-0.42-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f8a30ea484d2688562fb4cb185289784", "sha256": "4eaf0ba481d160639e240602734a9195f3dfc37c6c0ad132a14e9eb1454868f0" }, "downloads": -1, "filename": "haystack-0.42.tar.gz", "has_sig": false, "md5_digest": "f8a30ea484d2688562fb4cb185289784", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 158461, "upload_time": "2017-07-03T04:44:49", "url": "https://files.pythonhosted.org/packages/d2/b7/1647c0807478c81a997ae3c4b9a1db0428b4a1d4fd59dcf70a869ebec2a5/haystack-0.42.tar.gz" } ] }