{"id":18919272,"url":"https://github.com/manulmap/reutl","last_synced_at":"2025-08-31T21:41:35.588Z","repository":{"id":161672014,"uuid":"636319955","full_name":"ManulMap/reutl","owner":"ManulMap","description":"Reverse engineering utilities library written in meta-modern c++","archived":false,"fork":false,"pushed_at":"2023-06-03T18:46:34.000Z","size":78,"stargazers_count":52,"open_issues_count":0,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-20T07:28:52.785Z","etag":null,"topics":["cheats","hooks","ida","pattern-scanner","reverse-engineering","signature-scanner"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ManulMap.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-05-04T15:21:57.000Z","updated_at":"2025-08-03T15:05:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"5709ced1-b7a5-4971-a95e-1cb50f739c95","html_url":"https://github.com/ManulMap/reutl","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ManulMap/reutl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManulMap%2Freutl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManulMap%2Freutl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManulMap%2Freutl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManulMap%2Freutl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ManulMap","download_url":"https://codeload.github.com/ManulMap/reutl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManulMap%2Freutl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273046458,"owners_count":25036179,"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","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cheats","hooks","ida","pattern-scanner","reverse-engineering","signature-scanner"],"created_at":"2024-11-08T10:36:47.972Z","updated_at":"2025-08-31T21:41:35.499Z","avatar_url":"https://github.com/ManulMap.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Reverse engineering utilities library\n\nAimed only for Amd64 Windows.\n\nLibrary requires support for c++23, so you can use:\n\n* Visual Studio 17.6 Preview 6 with /std:c++latest\n* build the latest Microsoft STL from sources and specify it for msvc\n* clang/clang-cl 17.0.0 with Microsoft STL\n* probably should work with mingw 13\n\n## Features\n\n* memory signature scanner\n* safe vmt hooks (replaces the object's vptr with our vmt)\n* hard vmt hooks (replaces original vmt cells)\n* memory address class with convenient methods\n  like dereferencing from relative jmp/call/lea instructions\n  and protection checks: is_executable() is_writable()\n* all hooks and vmts will be destroyed automatically\n  when unloading you library you may inject and then\n  unload your library multiple times without restarting target process\n\n## Todo\n\n* find_pattern_in_module should take modules info from PEB\n  rather than from GetModuleHandle and GetModuleInformation\n* implement benchmarks for signature scanner\n* change scanner searching method from default std searcher to\n  std::boyer_moore_searcher or std::boyer_moore_horspool_searcher\n* Add github CI\n\n## Usage\n\nLibrary interfaces intended for use with monadic functions.\n\n```c++\n    const auto net_chan_vmt =\n        reutl::find_pattern_in_module\u003c\"40 53 56 57 41 56 48 83 EC ?? 45 33 F6 48 8D 71\"\u003e(\n            \"networksystem.dll\")\n            .value_or(std::nullopt)\n            .transform([](const reutl::Addr addr) {\n                return addr\n                    .offset(0x15) //\n                    .deref_instr_rel\u003cstd::int32_t\u003e(7)\n                    .to_ptr();\n            });\n```\n\nThis is how it looks with resharper c++ helpers\n![resharper++.png](resharper++.png)\n\nSee the example library for complete usage demonstration.\n\n### Build\n\n#### Visual Studio\n\nOpen Visual Studio Developer Command Prompt/Powershell cd to library root\nand enter the following commands\n\n```shell\n  mkdir build\n  cd build\n  cmake .. -G \"Visual Studio 17 2022\" -DBUILD_TESTING=OFF\n```\n\nafter that open reult.sln in IDE and build reutl with preferred compiler options\n\n#### Ninja Build\n\n```shell\nmkdir build\ncd build\ncmake .. -G Ninja -DBUILD_TESTING=OFF\ncmake --build .\n\n# build example\ncmake --build . --target nw_hooks\n```\n\nIf you are use CMake in your project consider installing reutl as a git submodule.\n\n```shell\ngit submodule add https://github.com/ManulMap/reutl\n```\n\nThen include it into your library.\n\n```cmake\ncmake_minimum_required(VERSION 3.25)\nset(CMAKE_CXX_STANDARD 23)\nproject(your_project)\n\nadd_library(your_lib SHARED dllmain.cc)\n\nadd_subdirectory(reutl)\ntarget_link_libraries(your_lib reutl)\n```\n\n### Development and testing\n\nIn order to build reutl with testing, you need to install the Catch2\ntesting framework with vcpkg and specify vcpkg toolchain file for cmake\n\nFor Visual Studio IDE use **Open Folder** then open CMakeSettings.json\nand change **CMake toolchain file** option for your build profiles.\n\nFor command line build use -DCMAKE_TOOLCHAIN_FILE option.\n\n```shell\n# build with testing (Catch2 must be installed)\nmkdir build\ncd build\ncmake .. -G Ninja -DBUILD_TESTING=ON -DCMAKE_TOOLCHAIN_FILE=PathToYourVcpkgToolchainFile\\vcpkg.cmake\n\n# run tests\ncd test\nctest --extra-verbose\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanulmap%2Freutl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanulmap%2Freutl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanulmap%2Freutl/lists"}