{ "info": { "author": "Jan Petykiewicz", "author_email": "anewusername@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Other Environment", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Affero General Public License v3", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Topic :: Games/Entertainment", "Topic :: Software Development", "Topic :: Software Development :: Debuggers", "Topic :: Software Development :: Testing", "Topic :: System", "Topic :: Utilities" ], "description": "# mem_edit \n\n**mem_edit** is a multi-platform memory editing library written in Python.\n\n**Homepage:** https://mpxd.net/code/jan/mem_edit\n\n**Capabilities:**\n* Scan all readable memory used by a process.\n * Optionally restrict searches to regions with read + write permissions.\n * Report on address space allocation\n* Read/write using ctypes objects\n * Basic types, e.g. ```ctypes.c_ulong()```\n * Arrays, e.g. ```(ctypes.c_byte * 4)()```\n * Instances of ```ctypes.Structure or ctypes.Union``` and subclasses.\n* Run on Windows and Linux\n\n\n## Installation\n\n**Dependencies:**\n* python 3 (written and tested with 3.7)\n* ctypes\n* typing (for type annotations)\n\n\nInstall with pip, from PyPI (preferred):\n```bash\npip3 install mem_edit\n```\n\nInstall with pip from git repository\n```bash\npip3 install git+https://mpxd.net/code/jan/mem_edit.git@release\n```\n\n\n## Documentation\n\nMost functions and classes are documented inline.\nTo read the inline help,\n```python3\nimport mem_edit\nhelp(mem_edit.Process)\n```\n\n## Examples\n\nIncrement a magic number (unsigned long 1234567890) found in 'magic.exe':\n```python3\n import ctypes\n from mem_edit import Process\n\n magic_number = ctypes.ulong(1234567890)\n\n pid = Process.get_pid_by_name('magic.exe')\n with Process.open_process(pid) as p:\n addrs = p.search_all_memory(magic_number)\n\n # We don't want to edit if there's more than one result...\n assert(len(addrs) == 1)\n\n # We don't actually have to read the value here, but let's do so anyways...\n num_ulong = p.read_memory(addrs[0], ctypes.c_ulong())\n num = num_ulong.value\n\n p.write_memory(addrs[0], ctypes.c_ulong(num + 1))\n```\n\nNarrow down a search after a value changes:\n```python3\n import ctypes\n from mem_edit import Process\n\n initial_value = 40\n final_value = 55\n\n pid = Process.get_pid_by_name('monitor_me.exe')\n with Process.open_process(pid) as p:\n addrs = p.search_all_memory(ctypes.c_int(initial_value))\n\n input('Press enter when value has changed to ' + str(final_value))\n\n filtered_addrs = p.search_addresses(addrs, ctypes.c_int(final_value))\n\n print('Found addresses:')\n for addr in filtered_addrs:\n print(hex(addr))\n```\n\nRead and alter a structure:\n```python3\n import ctypes\n from mem_edit import Process\n\n class MyStruct(ctypes.Structure):\n _fields_ = [\n ('first_member', ctypes.c_ulong),\n ('second_member', ctypes.c_void_p),\n ]\n\n pid = Process.get_pid_by_name('something.exe')\n\n with Process.open_process(pid) as p:\n s = MyStruct()\n s.first_member = 1234567890\n s.second_member = 0x1234\n\n addrs = p.search_all_memory(s)\n print(addrs)\n\n p.write_memory(0xafbfe0, s)\n```\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://mpxd.net/code/jan/mem_edit", "keywords": "memory,edit,editing,ReadProcessMemory,WriteProcessMemory,proc,mem,ptrace,multiplatform,scan,scanner,search,debug,cheat,trainer", "license": "", "maintainer": "", "maintainer_email": "", "name": "mem-edit", "package_url": "https://pypi.org/project/mem-edit/", "platform": "", "project_url": "https://pypi.org/project/mem-edit/", "project_urls": { "Homepage": "https://mpxd.net/code/jan/mem_edit" }, "release_url": "https://pypi.org/project/mem-edit/0.3/", "requires_dist": [ "typing" ], "requires_python": "", "summary": "Multi-platform library for memory editing", "version": "0.3" }, "last_serial": 5910726, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "fc61198ee35751f0cdc37e3a28fcc9c8", "sha256": "26f5f942a2ce24fec38b3a1610fb3a5cfec8dbdfa51b0e4fa07c8fd5febc71ab" }, "downloads": -1, "filename": "mem_edit-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fc61198ee35751f0cdc37e3a28fcc9c8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11283, "upload_time": "2017-06-22T02:35:08", "url": "https://files.pythonhosted.org/packages/37/7c/afa234c28427eea3853489d2f5c01352646bb689bf93d62256dfbcdacb60/mem_edit-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4f74f0e8209553687f0667aebc570df5", "sha256": "30e8bf979805840462a6330bcb2c39c430126f3da1c51a6ec5114febcd620de4" }, "downloads": -1, "filename": "mem_edit-0.1.tar.gz", "has_sig": false, "md5_digest": "4f74f0e8209553687f0667aebc570df5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21585, "upload_time": "2017-06-22T02:35:10", "url": "https://files.pythonhosted.org/packages/25/25/dcb97f2bfc226ed93417b9316fba5aebf7cc6771f19aceb82ece14548e26/mem_edit-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "fe440b47c77b86b55dfa2f9325c59c44", "sha256": "8d133314fab9afb92932f0b629ab462e8e93373208cf9a6b4936e06e7185891d" }, "downloads": -1, "filename": "mem_edit-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "fe440b47c77b86b55dfa2f9325c59c44", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23582, "upload_time": "2019-03-25T04:04:55", "url": "https://files.pythonhosted.org/packages/61/69/0f8938cc560d631d973dbac7554ec7f8b03b9a6b9b91f64e3370ef26f72c/mem_edit-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "657a6860989730e225fc279a2ae2db54", "sha256": "a206a85f7131bd829c7131e206f2df9d4d7201e447570856139137548c3b0f75" }, "downloads": -1, "filename": "mem_edit-0.2.tar.gz", "has_sig": false, "md5_digest": "657a6860989730e225fc279a2ae2db54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22727, "upload_time": "2019-03-25T04:04:57", "url": "https://files.pythonhosted.org/packages/5d/f5/b05ade688d0feec8c470f1efac09417e62a45098bcabb9e80da860f5193f/mem_edit-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "7397411137120df522c379dc77e1851f", "sha256": "c8d31ef91925b7794c669ff8cc6af391d9189d55fd035a642f5ba714e1cd2c6b" }, "downloads": -1, "filename": "mem_edit-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7397411137120df522c379dc77e1851f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23801, "upload_time": "2019-10-01T07:01:30", "url": "https://files.pythonhosted.org/packages/c5/c7/22f3dcdf7dfef45601081990c85ad081ce962f62d0ede17f2f6a257f8965/mem_edit-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74fd80674fbf7555de1ad5f1fc9301f8", "sha256": "7be0c224e1d7af854c826bfc44fee0ccf59a3301a852f0b9a6d1dd860b17414b" }, "downloads": -1, "filename": "mem_edit-0.3.tar.gz", "has_sig": false, "md5_digest": "74fd80674fbf7555de1ad5f1fc9301f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22854, "upload_time": "2019-10-01T07:01:32", "url": "https://files.pythonhosted.org/packages/da/0b/4353dcd00413effc1aba7e225d78b432d21de7265fbb38d7b5e899560909/mem_edit-0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7397411137120df522c379dc77e1851f", "sha256": "c8d31ef91925b7794c669ff8cc6af391d9189d55fd035a642f5ba714e1cd2c6b" }, "downloads": -1, "filename": "mem_edit-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7397411137120df522c379dc77e1851f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23801, "upload_time": "2019-10-01T07:01:30", "url": "https://files.pythonhosted.org/packages/c5/c7/22f3dcdf7dfef45601081990c85ad081ce962f62d0ede17f2f6a257f8965/mem_edit-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74fd80674fbf7555de1ad5f1fc9301f8", "sha256": "7be0c224e1d7af854c826bfc44fee0ccf59a3301a852f0b9a6d1dd860b17414b" }, "downloads": -1, "filename": "mem_edit-0.3.tar.gz", "has_sig": false, "md5_digest": "74fd80674fbf7555de1ad5f1fc9301f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22854, "upload_time": "2019-10-01T07:01:32", "url": "https://files.pythonhosted.org/packages/da/0b/4353dcd00413effc1aba7e225d78b432d21de7265fbb38d7b5e899560909/mem_edit-0.3.tar.gz" } ] }