{ "info": { "author": "Yuval Adam", "author_email": "_@yuv.al", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "ASP.NET View State Decoder\n==========================\n\nA small Python 3.5+ library for decoding ASP.NET viewstate.\n\nViewstate is a method used in the ASP.NET framework to persist changes to a web form across postbacks. It is usually saved on a hidden form field:\n\n.. code-block:: html\n\n \n\nDecoding the view state can be useful in penetration testing on ASP.NET applications, as well as revealing more information that can be used to efficiently scrape web pages.\n\n.. image:: https://travis-ci.org/yuvadm/viewstate.svg?branch=master\n :target: https://travis-ci.org/yuvadm/viewstate\n\nInstall\n-------\n\n.. code-block:: shell\n\n $ pip install viewstate\n\nUsage\n-----\n\nThe Viewstate decoder accepts Base64 encoded .NET viewstate data and returns the decoded output in the form of plain Python objects.\n\nThere are two main ways to use this package. First, it can be used as an imported library with the following typical use case:\n\n.. code-block:: python\n\n >>> from viewstate import ViewState\n >>> base64_encoded_viewstate = '/wEPBQVhYmNkZQ9nAgE='\n >>> vs = ViewState(base64_encoded_viewstate)\n >>> vs.decode()\n ('abcde', (True, 1))\n\nIt is also possible to feed the raw bytes directly:\n\n.. code-block:: python\n\n >>> vs = ViewState(raw=b'\\xff\\x01....')\n\nAlternatively, the library can be used via command line by directly executing the module:\n\n.. code-block:: shell\n\n $ cat data.base64 | python -m viewstate\n\nWhich will pretty-print the decoded data structure.\n\nThe command line usage can also accept raw bytes with the ``-r`` flag:\n\n.. code-block:: shell\n\n $ cat data.base64 | base64 -d | python -m viewstate -r\n\nViewstate HMAC signatures are also supported. In case there are any remaining bytes after parsing, they are assumed to be HMAC signatures, with the types estimated according to signature length.\n\n.. code-block:: python\n\n >>> vs = ViewState(signed_view_state)\n >>> vs.decode()\n >>> vs.mac\n 'hmac_sha256'\n >>> vs.signature\n b'....'\n\nDevelopment\n-----------\n\n.. code-block:: shell\n\n $ pytest\n\nReferences\n----------\n\nSince there is no publically available specification of how .NET viewstate is encoded, reverse engineering was based on prior work:\n\n- https://github.com/mutantzombie/JavaScript-ViewState-Parser\n- http://viewstatedecoder.azurewebsites.net/\n\nAny official documents would be gladly accepted to help improve the parsing logic.\n\nLicense\n-------\nMIT\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/yuvadm/viewstate", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "viewstate", "package_url": "https://pypi.org/project/viewstate/", "platform": "", "project_url": "https://pypi.org/project/viewstate/", "project_urls": { "Homepage": "https://github.com/yuvadm/viewstate" }, "release_url": "https://pypi.org/project/viewstate/0.4.3/", "requires_dist": null, "requires_python": ">=3.5.0", "summary": ".NET viewstate decoder", "version": "0.4.3" }, "last_serial": 3758185, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "9bdbc748f087f389fb50b9a576d95873", "sha256": "6712f6699e55050082d50aa91a4e31b53d1251b53da8dcced97b051bf007c380" }, "downloads": -1, "filename": "viewstate-0.1.0.tar.gz", "has_sig": true, "md5_digest": "9bdbc748f087f389fb50b9a576d95873", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2827, "upload_time": "2018-02-26T22:27:33", "url": "https://files.pythonhosted.org/packages/c6/a8/b1697d6027e9267e809e2cd770aef28be1e5a3a8fbaf90fdef5d071b59fa/viewstate-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "3c684d4a588a30c78f84257bcbd50b30", "sha256": "3dcc307b078967474f53a69b20b983077a30659c2bec27617fbbe034e6d61b33" }, "downloads": -1, "filename": "viewstate-0.1.1.tar.gz", "has_sig": true, "md5_digest": "3c684d4a588a30c78f84257bcbd50b30", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 2942, "upload_time": "2018-02-26T22:47:39", "url": "https://files.pythonhosted.org/packages/45/5f/e49e100b1a9cc3a76ec5baa3f263ef91c38ebf149ba5c83a8f6a227398f0/viewstate-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "ce3c6cafbbd997fa8eb8e7317ead0a1b", "sha256": "6818fb123c7807b3c0a6b116b96037fe764acecc01c5af3832e8496c397928a0" }, "downloads": -1, "filename": "viewstate-0.1.2.tar.gz", "has_sig": true, "md5_digest": "ce3c6cafbbd997fa8eb8e7317ead0a1b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 3647, "upload_time": "2018-02-26T22:54:17", "url": "https://files.pythonhosted.org/packages/60/e4/48150e345ca715b8603361352343264daa9cdaeec694a94ea2c1773ae67c/viewstate-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "e19c36d435e32167cec5539e7d237b0b", "sha256": "c843eae538e4f3198cb1a5edac0f65b1fcea08a403ff8d6cdb0429c71a0aa1d4" }, "downloads": -1, "filename": "viewstate-0.2.0.tar.gz", "has_sig": true, "md5_digest": "e19c36d435e32167cec5539e7d237b0b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 3913, "upload_time": "2018-02-28T15:09:29", "url": "https://files.pythonhosted.org/packages/83/0e/c53e046eae816844340623542b29aa385ba4fdc8887acd7cd790a64132fe/viewstate-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "054b78a586c466f8a0b769b733b5ba83", "sha256": "17023f06a3de54f6ea9bb563d07f20b509dfd4ba03a1868cbcc87612063af531" }, "downloads": -1, "filename": "viewstate-0.2.1.tar.gz", "has_sig": true, "md5_digest": "054b78a586c466f8a0b769b733b5ba83", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 3927, "upload_time": "2018-02-28T15:14:32", "url": "https://files.pythonhosted.org/packages/8b/7b/fec00228e66ac2afd2b97a642412b24a88172c623fbd603c20d257c45238/viewstate-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "639eee3a654e678582c0297504baca07", "sha256": "97f6d97ecfddf4485475c9cb13bed84b2702888eb1c8cdee833f62dbca9af16f" }, "downloads": -1, "filename": "viewstate-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "639eee3a654e678582c0297504baca07", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 6780, "upload_time": "2018-03-19T09:15:10", "url": "https://files.pythonhosted.org/packages/a2/d7/01079607e3f9285d247fffb9e4bf8df2db893716f9e8b08546e2d544c0d5/viewstate-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ba245650169dbace7610773c7f2c8d24", "sha256": "3e680727bdf8660fe3cff3fdeb8ca769108ccc02a612487ae7c31df75659f761" }, "downloads": -1, "filename": "viewstate-0.3.0.tar.gz", "has_sig": false, "md5_digest": "ba245650169dbace7610773c7f2c8d24", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 4373, "upload_time": "2018-03-19T09:15:12", "url": "https://files.pythonhosted.org/packages/22/99/696efad80cc92b088d2146e4861f5ad8c617e10dbd0fbbb3238516709c73/viewstate-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "7f6726c851f1e3381e8a7cc9cb1c8072", "sha256": "2a3ee95fb5a940aa944d1f113715547a54cd14764e7a9bbeda7682696c03e7f8" }, "downloads": -1, "filename": "viewstate-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7f6726c851f1e3381e8a7cc9cb1c8072", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 7228, "upload_time": "2018-03-19T10:02:37", "url": "https://files.pythonhosted.org/packages/38/cc/2d416125a089f8418bf44e8819e48bcc6a0a832777dac6a5516e4164202b/viewstate-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fde506209f6960a78744c912f2553b21", "sha256": "60c398dd6507ee522f18a1c6b980d1335e5af37809cae98358e60f18954a8adc" }, "downloads": -1, "filename": "viewstate-0.3.1.tar.gz", "has_sig": false, "md5_digest": "fde506209f6960a78744c912f2553b21", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 4707, "upload_time": "2018-03-19T10:02:39", "url": "https://files.pythonhosted.org/packages/9a/2b/cf4d8c23487a5455814a24357f41ce9f2dec168a300e77a624df3cec4805/viewstate-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "f153449e473f35eeb611f12bdafd0ab3", "sha256": "2fb6d7014b8db93d914f7c1e697ecc95ded6b4cfefe5d0b132e005af59b915c3" }, "downloads": -1, "filename": "viewstate-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f153449e473f35eeb611f12bdafd0ab3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 7807, "upload_time": "2018-04-12T09:15:09", "url": "https://files.pythonhosted.org/packages/4a/8d/5f37170b10d3f6fffd44a84bc16ab155ae07e8006ca73d2689b6fc7a8831/viewstate-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "683024ef2c3ac9caf142e9c848890020", "sha256": "63ceaa923ae95d31c2c18103157b8eff9c5bc2e1d2c0622a1dfb28110e957f77" }, "downloads": -1, "filename": "viewstate-0.4.0.tar.gz", "has_sig": false, "md5_digest": "683024ef2c3ac9caf142e9c848890020", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 5074, "upload_time": "2018-04-12T09:15:10", "url": "https://files.pythonhosted.org/packages/7f/05/141b95c9df47f20c5ae7a3ed46fb9c0401b273ff71bd8cb9a70c5b3fddb4/viewstate-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "116f6863fce3d3aaee6fa9f154723096", "sha256": "21d1a81f74be071bda40f6f5955603f98bb152c96cff41d0c99ed35f2964538f" }, "downloads": -1, "filename": "viewstate-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "116f6863fce3d3aaee6fa9f154723096", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 8184, "upload_time": "2018-04-12T09:31:15", "url": "https://files.pythonhosted.org/packages/43/43/119921497a9509fd6355beed2baed95c376be2f198f88e4e874bf35f0244/viewstate-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7dbf7a2efa1696e8332aa979cddbdf5c", "sha256": "7a34e4b9a64fd05d8af61fbec5b36575e790e75b27da716bdb35c105dc9788ef" }, "downloads": -1, "filename": "viewstate-0.4.1.tar.gz", "has_sig": false, "md5_digest": "7dbf7a2efa1696e8332aa979cddbdf5c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 5297, "upload_time": "2018-04-12T09:31:16", "url": "https://files.pythonhosted.org/packages/e7/01/445b8626409505ef9ef4897cb727f3b89c11853440dd5ac3376c70eedab4/viewstate-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "38615c124a95ea2d6afba12a534df4a8", "sha256": "df0136812ceef75fc0bc8d840d05f4689bc86204dd3a04ded9542bffaa1deba2" }, "downloads": -1, "filename": "viewstate-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "38615c124a95ea2d6afba12a534df4a8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 8242, "upload_time": "2018-04-12T09:58:34", "url": "https://files.pythonhosted.org/packages/07/0b/9807cfd8f1c344f2ee0d2aa5b08c14996581278a29cf357a7f5055e7f2df/viewstate-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "370638c07185e03ded42a7239257fb0f", "sha256": "17eaedfa944125054945d0127cbbb1ad21676d9ee714a2e4b8a2a4d9b190648c" }, "downloads": -1, "filename": "viewstate-0.4.2.tar.gz", "has_sig": false, "md5_digest": "370638c07185e03ded42a7239257fb0f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 5412, "upload_time": "2018-04-12T09:58:35", "url": "https://files.pythonhosted.org/packages/a1/45/544e5197af5d1325fabb5f4dc14af0767bdcfa403004a9b623cb1598be18/viewstate-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "fa086a165480a69dc700546dad1e38ae", "sha256": "05b74f21d787c48e02ad3ed6bdf7a36c51880905e441a3e8eb39eca61af54915" }, "downloads": -1, "filename": "viewstate-0.4.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fa086a165480a69dc700546dad1e38ae", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 8187, "upload_time": "2018-04-12T09:59:57", "url": "https://files.pythonhosted.org/packages/22/22/c2a301dd3d5618dc528c3b87963a19e8d0e9ad25553c2d1a7fc0700008e4/viewstate-0.4.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a187fe15b0be000eb1a673b546f31fcb", "sha256": "856a275e9c7337bd728e78d3441f9dbab48ced44dd73752e9d0454732e2bb7dc" }, "downloads": -1, "filename": "viewstate-0.4.3.tar.gz", "has_sig": false, "md5_digest": "a187fe15b0be000eb1a673b546f31fcb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 5293, "upload_time": "2018-04-12T09:59:58", "url": "https://files.pythonhosted.org/packages/db/94/9eff01728b53fcfde51f7c5b17866d61a1b85fe8b6478e21facab4b42f18/viewstate-0.4.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fa086a165480a69dc700546dad1e38ae", "sha256": "05b74f21d787c48e02ad3ed6bdf7a36c51880905e441a3e8eb39eca61af54915" }, "downloads": -1, "filename": "viewstate-0.4.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fa086a165480a69dc700546dad1e38ae", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 8187, "upload_time": "2018-04-12T09:59:57", "url": "https://files.pythonhosted.org/packages/22/22/c2a301dd3d5618dc528c3b87963a19e8d0e9ad25553c2d1a7fc0700008e4/viewstate-0.4.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a187fe15b0be000eb1a673b546f31fcb", "sha256": "856a275e9c7337bd728e78d3441f9dbab48ced44dd73752e9d0454732e2bb7dc" }, "downloads": -1, "filename": "viewstate-0.4.3.tar.gz", "has_sig": false, "md5_digest": "a187fe15b0be000eb1a673b546f31fcb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 5293, "upload_time": "2018-04-12T09:59:58", "url": "https://files.pythonhosted.org/packages/db/94/9eff01728b53fcfde51f7c5b17866d61a1b85fe8b6478e21facab4b42f18/viewstate-0.4.3.tar.gz" } ] }