Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实现';携带';字节并在c#中运行它?_C#_Reflection_Encryption_Io_Byte - Fatal编程技术网

实现';携带';字节并在c#中运行它?

实现';携带';字节并在c#中运行它?,c#,reflection,encryption,io,byte,C#,Reflection,Encryption,Io,Byte,我需要我的程序是安全的,因为它的内容包括个人信息,如IP(私人IRC聊天,如果你必须知道)。我的计划是读取程序的字节,然后创建一个对称加密算法(如AES)来加密字节数组,为了提高安全性,我添加了其他一些小东西,例如调试和模拟器。然后,我将使用codedom创建“携带”这些加密字节的存根。我知道有两种方法可以“携带”代码: 将加密字节附加到存根,以便它解密、写入和运行。(称为下降) 将它添加到存根的资源中,这样它就可以解密并加载它,这样它就可以在内存中运行它 我可以有4种方法,添加到资源,然后解密

我需要我的程序是安全的,因为它的内容包括个人信息,如IP(私人IRC聊天,如果你必须知道)。我的计划是读取程序的字节,然后创建一个对称加密算法(如AES)来加密字节数组,为了提高安全性,我添加了其他一些小东西,例如调试和模拟器。然后,我将使用codedom创建“携带”这些加密字节的存根。我知道有两种方法可以“携带”代码:

  • 将加密字节附加到存根,以便它解密、写入和运行。(称为下降)
  • 将它添加到存根的资源中,这样它就可以解密并加载它,这样它就可以在内存中运行它 我可以有4种方法,添加到资源,然后解密、写入并运行,或者添加,然后解密、加载并在内存中运行。我也可以在代码中做一些模糊处理,但我怀疑这会有多大区别

    方法2似乎被人滥用,被反病毒软件检测到,每次调试时都被反病毒软件阻止,这真的很烦人。当程序所做的一切都是为了保护自己不被诸如红门反射器之类的程序轻易拆卸时,对于用户来说,这只是一个误报。 包括数据库信息,例如SQL登录方法,如果分解,仍将进行分析:


    还有更多的方法吗

    那么
    SecureString
    呢?这似乎可以处理在程序中隐藏信息的问题,而不需要太多麻烦。如果在执行过程中内存被转储,则数据将被加密。

    无法执行您描述的操作。摆脱它。


    另一种方法是使用Web服务,用户必须对其进行身份验证,然后通过安全通道(例如SSL/TLS)发送敏感信息

    第二种方法可能是

  • 加密信息
  • 将敏感信息的加密版本嵌入可执行文件
  • 在运行时要求用户提供对称密钥(例如,他必须输入数据的“密码”)
  • 使用对称密钥解密信息
  • 使用信息

  • 这里最大的缺点是,如果对称密钥(例如密码)以任何方式被盗,攻击者就可以获得所有加密信息。

    您不能在可执行文件中包含敏感信息,因为它可以随时进行反向工程。没有办法保护您的可执行文件不受反向工程的影响。一个私有IP地址?在你解密代码后,任何人都能看到像TcpMon这样的工具在使用它吗?仔细的威胁分析听起来是正确的。@Hans:在上下文中,我相信IP=“知识产权”而不是“互联网协议地址”。但我可能错了。这取决于“私人IRC聊天”是指“机密聊天记录”还是“建立新聊天的连接信息”非常相关:一旦将信息传输到您不拥有的计算机上,您无法控制(通过技术手段)信息的变化。句号。@K_X:我没说这是非法的,我说这是无效的。这也是一个糟糕的想法,因为它添加了bug,但实际上什么都没有完成。如果你说的是在线游戏(而不是仅仅进行在线许可证检查),我的说法不适用,因为服务器代码和数据从未传输到其他计算机(即,所属实体的服务器场之外)。他如何/在何处存储在运行时将转换为
    安全字符串的字符串?
    ?啊,这样我就可以将其用于IP和个人信息,还可以使用对称密码来实现更高的安全性,这是个好主意。这可能会使它变得更难。这不可能使某人无法(甚至不切实际地)获取这些信息。我认为数据可以通过其他方式加密,但如果在程序运行时未加密,这将没有任何好处。也许我误解了他的问题,所以我用用户的密码来加密数据。因此,我可以使用非对称加密,这对少量数据很有用。如果你想使用非对称加密,你必须将私钥存储在某个地方,而可执行文件不是这样做的正确位置。不,不,不,我知道这一点。我将使用公钥加密数据,然后用户将使用他们可以在线获得的私钥。然后,用户必须对提供私钥的在线服务进行身份验证。那么在线服务可以自己提供所有的数据,那又有什么意义呢?