首页
社区
课程
招聘
43
[原创]C# .net内存特征码搜索和内存修改
发表于: 2025-1-19 14:30 5025

[原创]C# .net内存特征码搜索和内存修改

2025-1-19 14:30
5025

.net的内存特征码搜索

功能:
1、内存特征码搜索(支持跨进程,堆栈搜索,半码F?、全码??,编写自己的搜索的工具)
2、程序集dll、C/C++模块的获取基址和映像大小
3、内存修改(可以带??,如:5F ?? 6E 7D ?? 8A)

部分实现代码:
获取程序集模块的基址

public static ulong Get_Assembly_Module_BaseAddress(string assemblyName)
{
    try
    {
        if (string.IsNullOrEmpty(assemblyName)) return 0;
        return (ulong)Marshal.GetHINSTANCE(
            AppDomain.CurrentDomain.GetAssemblies()
            .SelectMany(m => m.GetModules()
            .Where(n => n.Name.Contains(assemblyName)))
            .FirstOrDefault());
    }
    catch { return 0; }
}

获取模块的映像大小,.net和C/C++的通用

public static ulong Get_Moule_SizeOfImage(ulong baseAddress)
{
    try
    {
        IMAGE_DOS_HEADER dosHeader = (IMAGE_DOS_HEADER)Marshal.PtrToStructure((IntPtr)baseAddress, typeof(IMAGE_DOS_HEADER));
        IMAGE_NT_HEADERS ntHeader = (IMAGE_NT_HEADERS)Marshal.PtrToStructure((IntPtr)(baseAddress + (ulong)dosHeader.e_lfanew),
                typeof(IMAGE_NT_HEADERS));
        return (ulong)ntHeader.OptionalHeader.SizeOfImage;
    }
    catch { return 0; }
}

获取C/C++模块的基址

public static ulong Get_C_Module_BaseAddress(string cModuleName)
{
    try
    {
        if (string.IsNullOrEmpty(cModuleName)) return 0;
        return (ulong)Process.GetCurrentProcess()
            .Modules.Cast<ProcessModule>()
            .Where(m => m.ModuleName.Contains(cModuleName))
            .ToArray().FirstOrDefault().BaseAddress;
    }
    catch { return 0; }
}

获取C/C++模块的映像大小

public static ulong Get_C_Module_SizeOfImage(string cModuleName)
{
    try
    {
        if (string.IsNullOrEmpty(cModuleName)) return 0;
        return (ulong)Process.GetCurrentProcess()
            .Modules.Cast<ProcessModule>()
            .Where(m => m.ModuleName.Contains(cModuleName))
            .ToArray().FirstOrDefault().ModuleMemorySize;
    }
    catch { return 0; }
}

修改内存数据

public static bool WriteMemoryData(ulong baseAddress, string data)
{
    try
    {
        if (string.IsNullOrEmpty(data)) return false;
        data = data.Replace(" ", "");
        if ((data.Length & 1) != 0) return false;    // 不能为单数
        uint len = (uint)data.Length / 2;            // 计算特征码长度
        uint oldProtect;
        if (VirtualProtect((IntPtr)baseAddress, len, PAGE_EXECUTE_READWRITE, out oldProtect))
        {
            for (uint i = 0; i < len; i++)
            {
                string tempStr = data.Substring((int)i * 2, 2);
                if (tempStr != "??")
                    Marshal.WriteByte((IntPtr)(baseAddress + i), Convert.ToByte(tempStr, 16));
            }
            VirtualProtect((IntPtr)baseAddress, len, oldProtect, out oldProtect);
            return true;
        }
    }
    catch { return false; }
    return false;
}

调用:

private static void Main(string[] args)
{
    // System.dll是.NET Framework的核心程序集,ntdll.dll是Windows系统的核心模块
    var systemAssembly = PatchPattern.Get_Assembly_Module_BaseAddress("System.dll");
    Console.WriteLine("System基址:0x" + systemAssembly.ToString("X"));
    Console.WriteLine("System大小:0x" + PatchPattern.Get_Moule_SizeOfImage(systemAssembly).ToString("X"));
    Console.WriteLine("ntdll基址:0x" + PatchPattern.Get_C_Module_BaseAddress("ntdll.dll").ToString("X"));
    Console.WriteLine("ntdll大小:0x" + PatchPattern.Get_C_Module_SizeOfImage("ntdll.dll").ToString("X"));

    // Hello World! 的特征码为 48 00 65 00 6C 00 6C 00 6F 00 20 00 57 00 6F 00 72 00 6C 00 64 00 21 00
    string testStr = "Hello World!";
    string patternStr = "48 00 65 00 6C 00 6C ?? 6F 00 20 00 ?7 00 6F ?? 72 00 6C 00 64 00 21 00";

    IntPtr hProcess = Process.GetCurrentProcess().Handle;
    // 获取主模块基址和大小
    ulong baseAddress = (ulong)Process.GetCurrentProcess().MainModule.BaseAddress;
    ulong size = (ulong)Process.GetCurrentProcess().MainModule.ModuleMemorySize;
    Console.WriteLine("模块基址:0x" + baseAddress.ToString("X") + "----模块大小:0x" + size.ToString("X"));

    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();
    // 遍历内存,搜索特征码
    // 注意:搜索前确保程序集或者dll已加载
    List<ulong> result = PatchPattern.SundayPatternFind(hProcess, baseAddress, baseAddress + size, patternStr, 0);
    stopwatch.Stop();
    Console.WriteLine("搜索用时: " + stopwatch.ElapsedMilliseconds + " 毫秒");
    Console.WriteLine("搜索到特征码:" + result.Count + "个");
    result.ForEach(x => Console.WriteLine("特征码地址:0x" + x.ToString("X")));

    // 你好,世界!的unicode编码为 60 4F 7D 59 0C FF 16 4E 4C 75 01 FF
    Encoding.Unicode.GetBytes("你好,世界!").ToList().ForEach(x => Console.Write(x.ToString("X2") + " "));
    Console.WriteLine();
    // 修改搜索到的内存数据
    if (result.Count > 0)
        // 将特征码替换为你好,世界!的unicode编码,并添加截断0000字节
        if (PatchPattern.WriteMemoryData(result[0], "60 4F 7D 59 0C FF 16 4E 4C 75 01 FF" + "0000"))
        {
            Console.WriteLine("修改内存数据成功");
            Console.WriteLine("修改为:" + Marshal.PtrToStringAuto((IntPtr)result[0]));
        }
        else Console.WriteLine("修改内存数据失败");

    Console.ReadKey();
}



[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

最后于 2025-1-28 20:02 被wtujoxk编辑 ,原因:
收藏
点赞 43
支持
分享
赞赏记录
参与人
雪币
留言
时间
顽劣
你的帖子非常有用,感谢分享!
2025-1-28 16:17
hahayzl
感谢你分享这么好的资源!
2025-1-28 01:23
秋雨02
感谢你的积极参与,期待更多精彩内容!
2025-1-27 12:28
qiusuper
+1
为你点赞!
2025-1-26 23:01
沉迷于
你的分享对大家帮助很大,非常感谢!
2025-1-26 04:26
mb_astiqllx
感谢你的积极参与,期待更多精彩内容!
2025-1-26 02:21
ThanatosKer
你的分享对大家帮助很大,非常感谢!
2025-1-26 00:55
52niu
你的帖子非常有用,感谢分享!
2025-1-25 13:16
qj111111
为你点赞!
2025-1-25 11:26
mb_yfioexda
+1
期待更多优质内容的分享,论坛有你更精彩!
2025-1-24 22:18
小菜鸟一
感谢你的贡献,论坛因你而更加精彩!
2025-1-24 19:15
九月心情
感谢你分享这么好的资源!
2025-1-24 16:02
pxhb
你的分享对大家帮助很大,非常感谢!
2025-1-24 11:24
zhangbaida
你的分享对大家帮助很大,非常感谢!
2025-1-23 21:16
Arash
感谢你的贡献,论坛因你而更加精彩!
2025-1-23 20:43
wowocock
感谢你的贡献,论坛因你而更加精彩!
2025-1-23 18:14
mb_rzebdfxg
谢谢你的细致分析,受益匪浅!
2025-1-23 17:26
wangkaicj
谢谢你的细致分析,受益匪浅!
2025-1-23 09:37
北门观雪
+1
谢谢你的细致分析,受益匪浅!
2025-1-22 22:59
李刚ctt
感谢你分享这么好的资源!
2025-1-22 16:01
ifyou
你的分享对大家帮助很大,非常感谢!
2025-1-22 15:30
mb_pxzbasup
谢谢你的细致分析,受益匪浅!
2025-1-22 15:05
Hell02W0rld
非常支持你的观点!
2025-1-22 14:12
恒大
你的帖子非常有用,感谢分享!
2025-1-22 08:35
vcdemon
感谢你的贡献,论坛因你而更加精彩!
2025-1-22 08:27
低调的大头
你的帖子非常有用,感谢分享!
2025-1-22 08:21
mb_hxwknbal
感谢你的贡献,论坛因你而更加精彩!
2025-1-22 07:57
我的小拇指啊
为你点赞!
2025-1-22 03:44
china
+1
感谢你的积极参与,期待更多精彩内容!
2025-1-21 23:56
hwfdvd
感谢你分享这么好的资源!
2025-1-21 22:01
文西哥
感谢你的贡献,论坛因你而更加精彩!
2025-1-21 19:36
mb_bzlxewmx
感谢你的积极参与,期待更多精彩内容!
2025-1-21 19:15
mb_xmlhgmst
非常支持你的观点!
2025-1-21 19:12
热咖啡
+10
你的分享对大家帮助很大,非常感谢!
2025-1-21 19:11
DawnDawnDawn
你的分享对大家帮助很大,非常感谢!
2025-1-21 17:23
mb_jqbnqjff
这个讨论对我很有帮助,谢谢!
2025-1-21 16:45
lovezeng
你的分享对大家帮助很大,非常感谢!
2025-1-21 15:16
mb_esiymxcr
感谢你的积极参与,期待更多精彩内容!
2025-1-21 14:25
不吃早饭
谢谢你的细致分析,受益匪浅!
2025-1-21 11:48
球叔叔
非常支持你的观点!
2025-1-21 09:11
jiqigouer
感谢你的贡献,论坛因你而更加精彩!
2025-1-21 07:11
chinarenjf
+1
感谢你分享这么好的资源!
2025-1-20 17:30
huangyalei
谢谢你的细致分析,受益匪浅!
2025-1-19 20:59
最新回复 (47)
雪    币: 205
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
x学习学习
2025-1-21 11:26
0
雪    币: 287
活跃值: (1554)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习学习
2025-1-21 12:00
0
雪    币: 3056
活跃值: (4264)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

谢谢你的细致分析,受益匪浅!
2025-1-21 12:28
0
雪    币: 8948
活跃值: (5508)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
学习学习 
2025-1-21 13:33
0
雪    币: 175
活跃值: (2816)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习学习!!!
2025-1-21 15:11
0
雪    币: 2471
活跃值: (7964)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
全网普发
2025-1-21 15:22
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
学习一下
2025-1-21 16:28
0
雪    币: 290
活跃值: (885)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习一下
2025-1-21 16:34
0
雪    币: 149
活跃值: (261)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
看看学习
2025-1-21 17:04
0
雪    币: 89
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
学习
2025-1-21 18:29
0
雪    币: 49
活跃值: (671)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习学习 
2025-1-21 19:25
0
雪    币: 9372
活跃值: (5654)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs
13
感谢楼主分享,收藏备用
2025-1-21 19:42
0
雪    币: 8045
活跃值: (4086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习学习 
2025-1-21 19:53
0
雪    币: 105
活跃值: (4935)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
6666
2025-1-21 22:24
0
雪    币: 3332
活跃值: (3263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习学习
2025-1-21 23:37
0
雪    币: 10740
活跃值: (4901)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
感谢楼主分享,收藏备用
2025-1-22 06:10
0
雪    币: 3095
活跃值: (2550)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
學習學習
2025-1-22 08:20
0
雪    币: 221
活跃值: (2481)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
学习学习
2025-1-22 08:26
0
雪    币: 20
活跃值: (84)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习学习
2025-1-22 08:39
0
雪    币: 342
活跃值: (2573)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
学习学习
2025-1-22 09:25
0
雪    币: 156
活跃值: (444)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
22
2025-1-22 11:11
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
学习学习
2025-1-22 11:59
0
雪    币: 9103
活跃值: (4175)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
学习一下,谢谢分享
2025-1-22 13:05
0
雪    币: 0
活跃值: (2476)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
1
2025-1-22 14:13
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册