{"id":19384837,"url":"https://github.com/xiaokyo/black_myth_wukong_damage_update","last_synced_at":"2026-01-06T20:44:26.357Z","repository":{"id":257082498,"uuid":"857275394","full_name":"xiaokyo/black_myth_wukong_damage_update","owner":"xiaokyo","description":"rust编写的黑神话1.2倍攻击力轻微修改器","archived":false,"fork":false,"pushed_at":"2024-09-18T01:44:45.000Z","size":14,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T14:55:04.748Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","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/xiaokyo.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":"2024-09-14T08:07:39.000Z","updated_at":"2024-09-18T06:52:15.000Z","dependencies_parsed_at":"2024-11-10T09:33:00.456Z","dependency_job_id":"0573697d-c542-4795-a06a-3653fe3450ff","html_url":"https://github.com/xiaokyo/black_myth_wukong_damage_update","commit_stats":null,"previous_names":["xiaokyo/black_myth_wukong_damage_update"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/xiaokyo/black_myth_wukong_damage_update","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaokyo%2Fblack_myth_wukong_damage_update","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaokyo%2Fblack_myth_wukong_damage_update/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaokyo%2Fblack_myth_wukong_damage_update/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaokyo%2Fblack_myth_wukong_damage_update/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xiaokyo","download_url":"https://codeload.github.com/xiaokyo/black_myth_wukong_damage_update/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaokyo%2Fblack_myth_wukong_damage_update/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274937633,"owners_count":25377313,"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-09-13T02:00:10.085Z","response_time":70,"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":[],"created_at":"2024-11-10T09:32:37.872Z","updated_at":"2026-01-06T20:44:26.310Z","avatar_url":"https://github.com/xiaokyo.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"手残党的我刚通过了一周目， 我觉得里面的怪对纯新手还是有点困难的， 所以我准备利用rust这个做一个单机辅助， 微调一下属性， 不会造成游戏失去乐趣， 且减轻一点游戏难度\n\n# 吐槽\n\n在黑神话出来之前， 我对瓦其实很入迷， 但是瓦中高段位基本都是自瞄透视，于是在黑神话出来后 21号， 入手了黑神话玩到了现在， 本人很痛恨竞技网游开G的人\n\n\n# 声明\n注意， 本人不卖软件， 制作仅作学习使用， 非法用途与本作者无关\n\n单机玩玩觉得卡关了， 可以使用本文章的软件\n\n还有游戏是用来体验的， 开高了也会影响游戏体验， 自己慎重\n\n# **演示**\n运行软件会提示， 并且属性会在面板中展示\n\n![image](https://github.com/user-attachments/assets/bedd0375-7882-423a-bec9-e7f18aaf7896)\n\n\n这个软件只改了提升当前攻击的1.2倍， 所以不会影响太多体验\n\n![image](https://github.com/user-attachments/assets/4f72749a-6129-4083-b491-372a349c1388)\n\n# 如何自己修改并编译.exe文件(需要rust编译环境)\n1. clone本项目\n2. cargo build\n\n目标文件在target目录里\n\n\n\nCargo.toml\n\n```toml\n[package]\nname = \"myth_wukong_memory\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html\n\n[dependencies]\nsysinfo = \"0.31.4\"\nwinapi = { version = \"0.3\", features = [\n  \"handleapi\",\n  \"processthreadsapi\",\n  \"memoryapi\",\n  \"errhandlingapi\",\n  \"minwindef\",\n  \"winnt\",\n  \"libloaderapi\",\n  \"psapi\",\n] }\n\n```\n\nmain.rs\n\n```rs\nextern crate winapi;\n\nuse std::ffi::OsString;\nuse std::os::windows::prelude::OsStringExt;\nuse std::thread;\nuse std::time::Duration;\nuse std::{mem, ptr};\nuse winapi::shared::minwindef::{DWORD, FALSE, HMODULE, LPCVOID, LPVOID};\nuse winapi::um::errhandlingapi::GetLastError;\nuse winapi::um::handleapi::CloseHandle;\nuse winapi::um::memoryapi::{ReadProcessMemory, WriteProcessMemory};\nuse winapi::um::processthreadsapi::OpenProcess;\nuse winapi::um::psapi::{EnumProcessModules, GetModuleFileNameExW};\nuse winapi::um::winnt::{PROCESS_QUERY_INFORMATION, PROCESS_VM_READ, PROCESS_VM_WRITE};\n\nuse sysinfo::{Pid, System};\n\nfn read_process_memory_u64(pid: DWORD, address: LPCVOID) -\u003e Option\u003cu64\u003e {\n    unsafe {\n        // 打开目标进程，获取句柄\n        let process_handle = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, FALSE, pid);\n        if process_handle.is_null() {\n            println!(\"无法打开进程PID: {}\", pid);\n            return None;\n        }\n\n        let mut buffer: u64 = 0_u64; // 用于存储读取到的数据\n        let mut bytes_read = 0;\n\n        // 从指定地址读取内存\n        let success = ReadProcessMemory(\n            process_handle,\n            address,\n            \u0026mut buffer as *mut _ as LPVOID,\n            mem::size_of::\u003cu64\u003e(),\n            \u0026mut bytes_read,\n        );\n\n        if success == FALSE {\n            println!(\"读取内存失败\");\n            CloseHandle(process_handle);\n            return None;\n        }\n\n        CloseHandle(process_handle);\n        Some(buffer)\n    }\n}\n\nfn read_process_memory(pid: DWORD, address: LPCVOID) -\u003e Option\u003cf32\u003e {\n    unsafe {\n        // 打开目标进程，获取句柄\n        let process_handle = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, FALSE, pid);\n        if process_handle.is_null() {\n            println!(\"无法打开进程PID: {}\", pid);\n            return None;\n        }\n\n        let mut buffer: f32 = 0_f32; // 用于存储读取到的数据\n        let mut bytes_read = 0;\n\n        // 从指定地址读取内存\n        let success = ReadProcessMemory(\n            process_handle,\n            address,\n            \u0026mut buffer as *mut _ as LPVOID,\n            mem::size_of::\u003cf32\u003e(),\n            \u0026mut bytes_read,\n        );\n\n        if success == FALSE {\n            println!(\"读取内存失败\");\n            CloseHandle(process_handle);\n            return None;\n        }\n\n        CloseHandle(process_handle);\n        Some(buffer)\n    }\n}\n\nfn write_process_memory(pid: DWORD, address: LPVOID, value: f32) -\u003e bool {\n    unsafe {\n        // 打开目标进程，获取句柄\n        let process_handle = OpenProcess(\n            PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_QUERY_INFORMATION,\n            FALSE,\n            pid,\n        );\n        if process_handle.is_null() {\n            println!(\"无法打开进程PID: {}\", pid);\n            return false;\n        }\n\n        let mut bytes_written = 0;\n\n        // 向指定地址写入内存\n        let success = WriteProcessMemory(\n            process_handle,\n            address,\n            \u0026value as *const _ as LPCVOID,\n            mem::size_of::\u003cf32\u003e(),\n            \u0026mut bytes_written,\n        );\n\n        if success == FALSE {\n            println!(\"写入内存失败 {}\", GetLastError());\n            CloseHandle(process_handle);\n            return false;\n        }\n\n        CloseHandle(process_handle);\n        true\n    }\n}\n\nfn get_module_base_address(pid: DWORD, module_name: \u0026str) -\u003e Option\u003cHMODULE\u003e {\n    unsafe {\n        // 打开目标进程，获取进程句柄\n        let process_handle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);\n        if process_handle.is_null() {\n            println!(\"无法打开进程PID: {}\", pid);\n            return None;\n        }\n\n        // 获取模块基地址\n        let mut modules: [HMODULE; 1024] = [ptr::null_mut(); 1024];\n        let mut needed = 0;\n        let success: i32 = EnumProcessModules(\n            process_handle,\n            modules.as_mut_ptr(),\n            mem::size_of_val(\u0026modules) as u32,\n            \u0026mut needed,\n        );\n\n        if success == FALSE {\n            println!(\"枚举进程模块失败\");\n            CloseHandle(process_handle);\n            return None;\n        }\n\n        // 计算实际模块数量\n        let module_count = needed / mem::size_of::\u003cHMODULE\u003e() as u32;\n\n        // 遍历所有模块\n        for i in 0..module_count {\n            let module_handle = modules[i as usize];\n            let mut module_file_name: [u16; 260] = [0; 260];\n            let length = GetModuleFileNameExW(\n                process_handle,\n                module_handle,\n                module_file_name.as_mut_ptr(),\n                module_file_name.len() as u32,\n            );\n\n            if length == 0 {\n                continue;\n            }\n\n            let file_name = OsString::from_wide(\u0026module_file_name[..length as usize]);\n            let file_name_str = file_name.to_string_lossy();\n            println!(\"模块文件名: {}\", file_name_str);\n            if file_name_str.contains(module_name) {\n                CloseHandle(process_handle);\n                return Some(module_handle);\n            }\n        }\n\n        // println!(\"未找到模块基址\");\n        CloseHandle(process_handle);\n        None\n    }\n}\n\nfn get_pid_by_process_name(process_name: \u0026str) -\u003e Pid {\n    let s = System::new_all();\n    let mut find_pid: Option\u003cPid\u003e = None;\n    for process in s.processes_by_name(process_name.as_ref()) {\n        let pid = process.pid();\n        find_pid = Some(pid);\n        break;\n    }\n\n    find_pid.unwrap()\n}\n\nfn main() {\n    let pid = get_pid_by_process_name(\"b1-Win64-Shipping.exe\");\n    let pid: DWORD = pid.as_u32(); // 目标进程的PID\n    println!(\"PID: {}\", pid);\n    let module_handle = get_module_base_address(pid, \"b1-Win64-Shipping.exe\");\n\n    match module_handle {\n        Some(value) =\u003e {\n            // 基址\n            let base_address = value as u64 + 0x1D909380;\n\n            // 示例偏移量数组 MP offset\n            let mp_offsets: [u64; 7] = [\n                0x298, // 偏移量2\n                0x290, // 偏移量3\n                0x20,  // 偏移量4\n                0xB0,  // 偏移量5\n                0x48,  // 偏移量6\n                0x60,  // 偏移量7\n                0x280, // 偏移量8\n            ];\n\n            let hp_offsets: [u64; 7] = [\n                0x298, // 偏移量2\n                0x290, // 偏移量3\n                0x20,  // 偏移量4\n                0xB0,  // 偏移量5\n                0x48,  // 偏移量6\n                0x60,  // 偏移量7\n                0x27C, // 偏移量8\n            ];\n\n            let damage_offsets: [u64; 7] = [\n                0x298, // 偏移量2\n                0x290, // 偏移量3\n                0x20,  // 偏移量4\n                0xB0,  // 偏移量5\n                0x48,  // 偏移量6\n                0x60,  // 偏移量7\n                0x284, // 偏移量8\n            ];\n\n            let power_offsets: [u64; 7] = [\n                0x298, // 偏移量2\n                0x290, // 偏移量3\n                0x20,  // 偏移量4\n                0xB0,  // 偏移量5\n                0x48,  // 偏移量6\n                0x60,  // 偏移量7\n                0x298, // 偏移量8\n            ];\n\n            // 计算MP动态地址\n            let mut final_mp_address = base_address;\n            let mut final_hp_address = base_address;\n            let mut final_damage_address = base_address;\n            let mut final_power_address = base_address;\n\n            let mut mp_i: usize = 0;\n            let mut hp_i = 0;\n            let mut damage_i = 0;\n            let mut power_i = 0;\n            while mp_i \u003c 7 {\n                // mp 偏移计算\n                if let Some(address_value) =\n                    read_process_memory_u64(pid, final_mp_address as LPCVOID)\n                {\n                    let offset = mp_offsets[mp_i];\n                    final_mp_address = address_value.wrapping_add(offset);\n                }\n\n                if let Some(address_value) =\n                    read_process_memory_u64(pid, final_hp_address as LPCVOID)\n                {\n                    let offset = hp_offsets[hp_i];\n                    final_hp_address = address_value.wrapping_add(offset);\n                }\n\n                if let Some(address_value) =\n                    read_process_memory_u64(pid, final_damage_address as LPCVOID)\n                {\n                    let offset = damage_offsets[damage_i];\n                    final_damage_address = address_value.wrapping_add(offset);\n                }\n\n                if let Some(address_value) =\n                    read_process_memory_u64(pid, final_power_address as LPCVOID)\n                {\n                    let offset = power_offsets[power_i];\n                    final_power_address = address_value.wrapping_add(offset);\n                }\n\n                mp_i += 1;\n                hp_i += 1;\n                damage_i += 1;\n                power_i += 1;\n            }\n\n            let mut new_mp_value: f32 = 0.0;\n            let mut new_hp_value: f32 = 0.0;\n            let mut new_damage_value: f32 = 0.0;\n            let mut new_power_value: f32 = 0.0;\n            let num = 1.2;\n            if let Some(address_value) = read_process_memory(pid, final_mp_address as LPCVOID) {\n                // address_value;\n                println!(\"基地址:0x{:x}, MP: {:?}\", final_mp_address, address_value);\n                new_mp_value = address_value;\n            }\n\n            if let Some(address_value) = read_process_memory(pid, final_hp_address as LPCVOID) {\n                // address_value;\n                println!(\"基地址:0x{:x}, HP: {:?}\", final_hp_address, address_value);\n                new_hp_value = address_value;\n            }\n\n            if let Some(address_value) = read_process_memory(pid, final_damage_address as LPCVOID) {\n                // address_value;\n                println!(\n                    \"基地址:0x{:x}, Damage: {:?}\",\n                    final_damage_address, address_value\n                );\n                new_damage_value = address_value * num;\n            }\n\n            if let Some(address_value) = read_process_memory(pid, final_power_address as LPCVOID) {\n                // address_value;\n                println!(\n                    \"基地址:0x{:x}, Power: {:?}\",\n                    final_power_address, address_value\n                );\n                new_power_value = address_value;\n            }\n\n            println!(\"锁血, 锁蓝, 锁气力都已开启, 并且攻击提升了{}倍, 攻击力再次提升{}倍, 重新启动软件即可, 依次递增\", num, num);\n            loop {\n                write_process_memory(pid, final_mp_address as LPVOID, new_mp_value);\n                write_process_memory(pid, final_hp_address as LPVOID, new_hp_value);\n                write_process_memory(pid, final_damage_address as LPVOID, new_damage_value);\n                write_process_memory(pid, final_power_address as LPVOID, new_power_value);\n\n                // 延迟1秒\n                thread::sleep(Duration::from_micros(500));\n            }\n        }\n        None =\u003e println!(\"模块基地址读取失败\"),\n    }\n}\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiaokyo%2Fblack_myth_wukong_damage_update","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxiaokyo%2Fblack_myth_wukong_damage_update","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiaokyo%2Fblack_myth_wukong_damage_update/lists"}