亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c#如何實現(xiàn)程序加密隱藏

 更新時間:2023年08月15日 14:29:10   作者:tokengo  
LiteDB是一個輕量級的嵌入式數(shù)據(jù)庫,它是用C#編寫的,適用于.NET平臺,這篇文章主要介紹了如何通過LiteDB將自己的程序進行加密,感興趣的可以了解下

LiteDB

LiteDB是一個輕量級的嵌入式數(shù)據(jù)庫,它是用C#編寫的,適用于.NET平臺。它的設計目標是提供一個簡單易用的數(shù)據(jù)庫解決方案,可以在各種應用程序中使用。

LiteDB使用單個文件作為數(shù)據(jù)庫存儲,這個文件可以在磁盤上或內存中。它支持文檔存儲模型,類似于NoSQL數(shù)據(jù)庫,每個文檔都是一個JSON格式的對象。這意味著你可以存儲和檢索任意類型的數(shù)據(jù),而不需要預定義模式。

LiteDB提供了一組簡單的API來執(zhí)行各種數(shù)據(jù)庫操作,包括插入、更新、刪除和查詢。它還支持事務,可以確保數(shù)據(jù)的一致性和完整性。

LiteDB還提供了一些高級功能,如索引、全文搜索和文件存儲。索引可以加快查詢的速度,全文搜索可以在文本數(shù)據(jù)中進行關鍵字搜索,文件存儲可以將文件直接存儲在數(shù)據(jù)庫中。

LiteDB的優(yōu)點包括易于使用、輕量級、快速和可嵌入性。它的代碼庫非常小,可以很容易地集成到你的應用程序中。此外,它還具有跨平臺的能力,可以在Windows、Linux和Mac等操作系統(tǒng)上運行。

總之,LiteDB是一個簡單易用的嵌入式數(shù)據(jù)庫,適用于各種應用程序。它提供了一組簡單的API來執(zhí)行數(shù)據(jù)庫操作,并支持一些高級功能。如果你需要一個輕量級的數(shù)據(jù)庫解決方案,可以考慮使用LiteDB。

加密封裝

創(chuàng)建LiteDB.Service的WebApi項目。

右鍵發(fā)布:

創(chuàng)建控制臺LiteDB.Launch項目。

EntryPointDiscoverer.cs 用于尋找執(zhí)行方法。

internal class EntryPointDiscoverer
{
    public static MethodInfo FindStaticEntryMethod(Assembly assembly, string? entryPointFullTypeName = null)
    {
        var candidates = new List<MethodInfo>();
        if (!string.IsNullOrWhiteSpace(entryPointFullTypeName))
        {
            var typeInfo = assembly.GetType(entryPointFullTypeName, false, false)?.GetTypeInfo();
            if (typeInfo == null)
            {
                throw new InvalidProgramException($"Could not find '{entryPointFullTypeName}' specified for Main method. See <StartupObject> project property.");
            }
            FindMainMethodCandidates(typeInfo, candidates);
        }
        else
        {
            foreach (var type in assembly
                         .DefinedTypes
                         .Where(t => t.IsClass)
                         .Where(t => t.GetCustomAttribute<CompilerGeneratedAttribute>() is null))
            {
                FindMainMethodCandidates(type, candidates);
            }
        }
        string MainMethodFullName()
        {
            return string.IsNullOrWhiteSpace(entryPointFullTypeName) ? "Main" : $"{entryPointFullTypeName}.Main";
        }
        if (candidates.Count > 1)
        {
            throw new AmbiguousMatchException(
                $"Ambiguous entry point. Found multiple static functions named '{MainMethodFullName()}'. Could not identify which method is the main entry point for this function.");
        }
        if (candidates.Count == 0)
        {
            throw new InvalidProgramException(
                $"Could not find a static entry point '{MainMethodFullName()}'.");
        }
        return candidates[0];
    }
    private static void FindMainMethodCandidates(TypeInfo type, List<MethodInfo> candidates)
    {
        foreach (var method in type
                     .GetMethods(BindingFlags.Static |
                                 BindingFlags.Public |
                                 BindingFlags.NonPublic)
                     .Where(m =>
                         string.Equals("Main", m.Name, StringComparison.OrdinalIgnoreCase)))
        {
            if (method.ReturnType == typeof(void)
                || method.ReturnType == typeof(int)
                || method.ReturnType == typeof(Task)
                || method.ReturnType == typeof(Task<int>))
            {
                candidates.Add(method);
            }
        }
    }
}

然后打開Program.cs文件,請注意修改SaveDb的參數(shù)為自己項目打包的地址

// 用于打包指定程序。
SaveDb(@"E:\Project\LiteDB-Application\LiteDB.Service\bin\Release\net7.0\publish");
// 打開db
var db = new LiteDatabase("Launch.db");
// 打開表。
var files = db.GetCollection<FileAssembly>("files");
// 接管未找到的程序集處理
AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) =>
{
    try
    {
        var name = eventArgs.Name.Split(",")[0];
        if (!name.EndsWith(".dll"))
        {
            name += ".dll";
        }
        var file = files.FindOne(x => x.Name == name);
        return file != null ? Assembly.Load(file.Bytes) : default;
    }
    catch (Exception)
    {
        return default;
    }
};
// 啟動程序。
StartServer("LiteDB.Service", new string[] { });
Console.ReadKey();
void StartServer(string assemblyName, string[] args)
{
    var value = files!.FindOne(x => x.Name == assemblyName + ".dll");
    var assembly = Assembly.Load(value!.Bytes);
    var entryPoint = EntryPointDiscoverer.FindStaticEntryMethod(assembly);
    try
    {
        var parameters = entryPoint.GetParameters();
        if (parameters.Length != 0)
        {
            var parameterValues = parameters.Select(p =>
                    p.ParameterType.IsValueType ? Activator.CreateInstance(p.ParameterType) : null)
                .ToArray();
            entryPoint.Invoke(null, parameterValues);
        }
        else
        {
            entryPoint.Invoke(null, null);
        }
    }
    catch (Exception e)
    {
    }
}
// 掃描指定目錄下所有文件和子目錄,保存到LiteDB數(shù)據(jù)庫中。
void SaveDb(string path)
{
    var files = ScanDirectory(path);
    using var db = new LiteDatabase("Launch.db");
    var col = db.GetCollection<FileAssembly>("files");
    col.InsertBulk(files);
}
// 實現(xiàn)一個方法,掃描指定目錄下所有文件和子目錄,返回一個集合。
List<FileAssembly> ScanDirectory(string path)
{
    var files = new List<FileAssembly>();
    var dir = new DirectoryInfo(path);
    var fileInfos = dir.GetFiles("*", SearchOption.AllDirectories);
    foreach (var fileInfo in fileInfos)
    {
        var file = new FileAssembly
        {
            Name = fileInfo.Name,
            Bytes = File.ReadAllBytes(fileInfo.FullName)
        };
        files.Add(file);
    }
    return files;
}
class FileAssembly
{
    /// <summary>
    /// 文件名
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// 文件的內容
    /// </summary>
    public byte[] Bytes { get; set; }
}

點擊LiteDB.Launch項目文件,添加LiteDB依賴,并且修改SDK為Microsoft.NET.Sdk.Web

<Project Sdk="Microsoft.NET.Sdk.Web">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net7.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
      <PackageReference Include="LiteDB" Version="5.0.17" />
    </ItemGroup>
</Project>

在啟動項目的時候先將LiteDB.Service發(fā)布一下。然后修改SaveDb參數(shù)為發(fā)布的目錄(會自動掃描所有文件打包到LiteDB的文件中。)

然后啟動項目;

當我們啟動了LiteDB.Launch以后在StartServer方法里面就會打開創(chuàng)建的LiteDB文件中搜索到指定的啟動程序集。

然后在AppDomain.CurrentDomain.AssemblyResolve中會將啟動程序集缺少的程序集加載到域中。

AppDomain.CurrentDomain.AssemblyResolve會在未找到依賴的時候觸發(fā)的一個事件。

在存儲到LiteDB的時候可以對于存儲的內容進行加密,然后在AppDomain.CurrentDomain.AssemblyResolve觸發(fā)的時候將讀取LiteDB的文件的內容的時候進行解密。

到此這篇關于c#如何實現(xiàn)程序加密隱藏的文章就介紹到這了,更多相關c#程序加密隱藏內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • VsCode使用EmmyLua插件調試Unity工程Lua代碼的詳細步驟

    VsCode使用EmmyLua插件調試Unity工程Lua代碼的詳細步驟

    這篇文章主要介紹了VsCode使用EmmyLua插件調試Unity工程Lua代碼,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • c#版json數(shù)據(jù)解析示例分享

    c#版json數(shù)據(jù)解析示例分享

    JSON(全稱為JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。它是基于JavaScript語法標準的一個子集。 JSON采用完全獨立于語言的文本格式,可以很容易在各種網絡、平臺和程序之間傳輸。JSON的語法很簡單,易于人閱讀和編寫,同時也易于機器解析和生成
    2014-03-03
  • C#函數(shù)式編程中的緩存技術詳解

    C#函數(shù)式編程中的緩存技術詳解

    這篇文章主要介紹了C#函數(shù)式編程中的緩存技術詳解,本文我們將分成兩部分來講解,第一部分為預計算,第二部分則為緩存,需要的朋友可以參考下
    2015-01-01
  • c#一個定時重啟的小程序實現(xiàn)代碼

    c#一個定時重啟的小程序實現(xiàn)代碼

    今天有個朋友找我問有沒有一些能像Windows一樣計劃任務重啟的軟件,我也不清楚。他它說能讓我做一個給他它么?我考慮了一下,他的服務器都是有安裝.NET框架的,那可以用.NET來使下~~!
    2008-09-09
  • 深入IComparable與IComparer的排序實例詳解

    深入IComparable與IComparer的排序實例詳解

    本篇文章是對IComparable與IComparer的排序實例進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 字符串陣列String[]轉換為整型陣列Int[]的實例

    字符串陣列String[]轉換為整型陣列Int[]的實例

    下面小編就為大家分享一篇字符串陣列String[]轉換為整型陣列Int[]的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 淺談C#手機號換成111XXXX1111 這種顯示的解決思路

    淺談C#手機號換成111XXXX1111 這種顯示的解決思路

    下面小編就為大家?guī)硪黄獪\談C#手機號換成111XXXX1111 這種顯示的解決思路。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 關于C#繼承的簡單應用代碼分析

    關于C#繼承的簡單應用代碼分析

    在本篇文章里小編給大家整理了一篇關于C#繼承的簡單應用代碼分析內容,有興趣的朋友們可以學習下。
    2021-05-05
  • C#實現(xiàn)搶紅包算法的示例代碼

    C#實現(xiàn)搶紅包算法的示例代碼

    很多商家都會使用紅包進行促銷,那么你知道紅包算法是怎么實現(xiàn)的嗎,本文主要介紹了C#實現(xiàn)搶紅包算法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C# Path類---文件路徑解讀

    C# Path類---文件路徑解讀

    這篇文章主要介紹了C# Path類---文件路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評論