DLL隐藏技巧

DLL隐藏技巧

第一招:将dll隐藏到资源文件中

  1. 先把原有的dll引用删除

  2. 将dll文件加入资源文件中

    image-20230310183646208

  3. 从资源文件中添加dll文件引用。修改当前引用文件的引用属性(是否复制到本地,修改为不复制)

  4. 新建一个帮助类,粘贴以下的代码

点击查看代码
public    class DllLoadHelper
    {
        /// <summary>
        /// 加载资源dll
        /// </summary>
        public static void LoadResourceDll()
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
        }

        /// <summary>
        /// 解析程序集
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="args">参数</param>
        /// <returns>程序集</returns>
        private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            //获取dll名称
            string dllName = args.Name.Contains(",") ? args.Name.Substring(0, args.Name.IndexOf(',')) : args.Name.Replace(".dll", "");
            //dll名称处理
            dllName = dllName.Replace(".", "_");
            if (dllName.EndsWith("_resources")) return null;
            //获取命名空间
            string Namespace = Assembly.GetEntryAssembly().GetTypes()[0].Namespace;
            //加载dll
            System.Resources.ResourceManager rm = new System.Resources.ResourceManager(Namespace + ".Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly());
            byte[] bytes = (byte[])rm.GetObject(dllName);
            //返回程序集
            return Assembly.Load(bytes);
        }
    }
  1. 修改启动程序

在main方法中添加

点击查看代码
            DllLoadHelper.LoadResourceDll();

第二招:fody打包(推荐)

  1. 先安装fody,以下的两个指定的扩展包

image-20230310185817283

  1. 在项目中新建以下文件FodyWeavers.xml

    image-20230310185931600

    代码如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <Weavers>
    	<Costura />
    </Weavers>
    

第三招:将使用gacutil全局程序集缓存工具(目前测试成功,但是由于没有在他人电脑上实验过,存在顾虑)

  1. 参考链接:https://www.likecs.com/show-204138070.html
posted @ 2023-03-10 19:27  聆听微风  阅读(1026)  评论(0编辑  收藏  举报