飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 435|回复: 5

[原创] .net 劫持 使用特征码一补丁通杀某标签软件所有版本

[复制链接]
  • TA的每日心情
    奋斗
    2024-10-21 16:09
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 前天 12:59 | 显示全部楼层 |阅读模式
    本帖最后由 wtujoxk 于 2025-1-20 18:16 编辑

    通杀软件这里不再分析,软件的注册位置特征码没有变过
    分析过程在这里:https://www.52pojie.cn/thread-851880-1-1.html
    我们使用文章中的方法3修改内存地址,将十六进制16改为17
    这里主要使用.net特征码的形式对程序运行时的内存进行修改,从而达到注册的目的
    使用到的 .net内存特征码搜索和内存修改在这里
    既然使用劫持,肯定要写部分代码
    首先使用Visual Studio新建一个 .net的类库工程,名称随意
    我这里命名为version
    [AppleScript] 纯文本查看 复制代码
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    
    namespace version
    {
        public class Adm
        {
    
        }
    }
    建立好工程以后,做一下基本的引用,将.net内存特征码搜索和内存修改文章里的PatchPattern.dll引入到工程
    在Adm类里继承 AppDomainManager
    [AppleScript] 纯文本查看 复制代码
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    
    namespace version
    {
        public class Adm : AppDomainManager
        {
    
        }
    }
    下面使用构造函数的原理进行编写劫持代码
    [AppleScript] 纯文本查看 复制代码
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    
    namespace version
    {
        public class Adm : AppDomainManager
        {
            public Adm()
            {
                Debug.WriteLine("劫持进入……");
                AppDomain.CurrentDomain.AssemblyLoad += (sender, args) =>
                {
                    if (args.LoadedAssembly.Location.Contains("Chen.dll"))
                    {
                        Debug.WriteLine("Assembly loaded: " + args.LoadedAssembly.Location);
    
                        IntPtr hModule = Process.GetCurrentProcess().Handle;
                        ulong baseAddress = PatchPattern.Get_Assembly_Module_BaseAddress("Chen.dll");
                        ulong sizeOfImage = PatchPattern.Get_Moule_SizeOfImage(baseAddress);
                        string pattern = "16 2A 16 0A 02 28 52";
                        Debug.WriteLine("模块基址:0x" + baseAddress.ToString("X") + "----模块大小:0x" + sizeOfImage.ToString("X"));
    
                        List<ulong> retAddresses = PatchPattern.SundayPatternFind(hModule, baseAddress, baseAddress + sizeOfImage, pattern, 0);
                        retAddresses.ForEach(x => Debug.WriteLine("特征码地址:0x" + x.ToString("X")));
                        // 修改内存数据
                        retAddresses.ForEach(x => PatchPattern.WriteMemoryData(x, "17"));
                    }
                };
            }
        }
    }
    这样dll就编写完成了!如果不想多带一个dll,可以在工程里使用Costura.Fody编译为一个dll文件,Costura.Fody用法自己搜索
    既然有了dll,要怎样才能使程序加载自己编写的dll并执行呢,如果是.net4的版本,只要编写一个后缀为.config的配置文件即可,如我的程序名称为:xxx.exe,那么就在目录里添加一个xxx.exe.config文件,内容为
    [AppleScript] 纯文本查看 复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" />
        </startup>
        <runtime>
            <appDomainManagerType value="version.Adm" />
            <appDomainManagerAssembly value="version" />
        </runtime>
    </configuration>
    
    注意:
    appDomainManagerType value="version.Adm" 里的version为程序集
    appDomainManagerAssembly value="version" 里的version为dll名称
    supportedRuntime version="v4.0"里的版本如果有多个,这个一定要第一个
    如文章中的软件自己就有.config,只需要更改就行,它有两个supportedRuntime,所以要将supportedRuntime version="v4.0"改到第一个
    [AppleScript] 纯文本查看 复制代码
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
        <supportedRuntime version="v2.0.50727"/>    
        <!--requiredRuntime version="v1.0.3705" safemode="true"/-->
      </startup>
    下面就是在runtime里添加两行就行,即
    [AppleScript] 纯文本查看 复制代码
      <runtime>
        <!--解决“此实现不是 Windows 平台 FIPS 验证的加密算法的一部分”-->
        <enforceFIPSPolicy enabled="false"/>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Chen" publicKeyToken="F7677E9EB01F20AD" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-100.0.0.0" newVersion="5.66.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="Chen.DataLayers.Lable" publicKeyToken="F7677E9EB01F20AD" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-100.0.0.0" newVersion="5.66.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
        <appDomainManagerType value="version.Adm" />
        <appDomainManagerAssembly value="version" />
      </runtime>
    .config文件修改完成以后,将生成的version.dll拷贝到程序根目录
    未劫持修改前
    000000.jpg
    劫持修改后
    111111.jpg
    主要是说明.net的优雅劫持和通过特征码定位修改内存数据的方法,这里不提供软件和成品的dll,如果按以上操作一切顺利,应该能达到效果,祝成功……

    评分

    参与人数 4威望 +6 飘云币 +6 收起 理由
    LuckyClover + 1 + 1 PYG有你更精彩!
    wgz001 + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    不破不立 + 2 + 2 感谢发布原创作品,PYG有你更精彩!
    飞天 + 2 + 2 感谢发布原创作品,PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情

    2025-1-14 08:19
  • 签到天数: 325 天

    [LV.8]以坛为家I

    发表于 前天 15:34 | 显示全部楼层
    感谢发布原创作品,
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 前天 16:41 | 显示全部楼层
    原创作品,必须支持!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-14 07:47
  • 签到天数: 1855 天

    [LV.Master]伴坛终老

    发表于 昨天 01:20 | 显示全部楼层
    感谢分享,学习了!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-14 08:31
  • 签到天数: 2449 天

    [LV.Master]伴坛终老

    发表于 昨天 08:30 | 显示全部楼层
    感谢发布原创作品,收藏学习
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表