实现';携带';字节并在c#中运行它?
我需要我的程序是安全的,因为它的内容包括个人信息,如IP(私人IRC聊天,如果你必须知道)。我的计划是读取程序的字节,然后创建一个对称加密算法(如AES)来加密字节数组,为了提高安全性,我添加了其他一些小东西,例如调试和模拟器。然后,我将使用codedom创建“携带”这些加密字节的存根。我知道有两种方法可以“携带”代码:实现';携带';字节并在c#中运行它?,c#,reflection,encryption,io,byte,C#,Reflection,Encryption,Io,Byte,我需要我的程序是安全的,因为它的内容包括个人信息,如IP(私人IRC聊天,如果你必须知道)。我的计划是读取程序的字节,然后创建一个对称加密算法(如AES)来加密字节数组,为了提高安全性,我添加了其他一些小东西,例如调试和模拟器。然后,我将使用codedom创建“携带”这些加密字节的存根。我知道有两种方法可以“携带”代码: 将加密字节附加到存根,以便它解密、写入和运行。(称为下降) 将它添加到存根的资源中,这样它就可以解密并加载它,这样它就可以在内存中运行它 我可以有4种方法,添加到资源,然后解密
还有更多的方法吗 那么
SecureString
呢?这似乎可以处理在程序中隐藏信息的问题,而不需要太多麻烦。如果在执行过程中内存被转储,则数据将被加密。无法执行您描述的操作。摆脱它。
另一种方法是使用Web服务,用户必须对其进行身份验证,然后通过安全通道(例如SSL/TLS)发送敏感信息 第二种方法可能是
这里最大的缺点是,如果对称密钥(例如密码)以任何方式被盗,攻击者就可以获得所有加密信息。您不能在可执行文件中包含敏感信息,因为它可以随时进行反向工程。没有办法保护您的可执行文件不受反向工程的影响。一个私有IP地址?在你解密代码后,任何人都能看到像TcpMon这样的工具在使用它吗?仔细的威胁分析听起来是正确的。@Hans:在上下文中,我相信IP=“知识产权”而不是“互联网协议地址”。但我可能错了。这取决于“私人IRC聊天”是指“机密聊天记录”还是“建立新聊天的连接信息”非常相关:一旦将信息传输到您不拥有的计算机上,您无法控制(通过技术手段)信息的变化。句号。@K_X:我没说这是非法的,我说这是无效的。这也是一个糟糕的想法,因为它添加了bug,但实际上什么都没有完成。如果你说的是在线游戏(而不是仅仅进行在线许可证检查),我的说法不适用,因为服务器代码和数据从未传输到其他计算机(即,所属实体的服务器场之外)。他如何/在何处存储在运行时将转换为
安全字符串的字符串?
?啊,这样我就可以将其用于IP和个人信息,还可以使用对称密码来实现更高的安全性,这是个好主意。这可能会使它变得更难。这不可能使某人无法(甚至不切实际地)获取这些信息。我认为数据可以通过其他方式加密,但如果在程序运行时未加密,这将没有任何好处。也许我误解了他的问题,所以我用用户的密码来加密数据。因此,我可以使用非对称加密,这对少量数据很有用。如果你想使用非对称加密,你必须将私钥存储在某个地方,而可执行文件不是这样做的正确位置。不,不,不,我知道这一点。我将使用公钥加密数据,然后用户将使用他们可以在线获得的私钥。然后,用户必须对提供私钥的在线服务进行身份验证。那么在线服务可以自己提供所有的数据,那又有什么意义呢?