我正在研究保护我的代码免遭反编译的方法。
这里有几个很好的线程描述了混淆和代码打包作为保护代码的可能方法。然而,它们都不是理想的,当使用字符串方法/属性名称时,混淆不适用于反射。许多人根本不建议使用混淆。
所以我目前决定不接受上述任何一项。However, 我有部分代码需要某种加密,例如,带有IP、登录名和密码的数据库连接字符串存储在代码内部,就像简单的那样const string
,与电子邮件帐户数据相同。
在 ASP.NET 中,有一个选项可以将敏感数据移动到.config
文件并对其进行加密,但这需要服务器密钥,即链接到一台计算机。我没有读太多相关内容,但我认为类似的东西也可用于桌面应用程序。但我需要这个来解决any安装该应用程序的计算机。
是否有方法对此类数据进行编码/保护,使其无法与反编译代码一起读取?
第一个建议是never直接将任何敏感内容存储在代码中。你可以always逆向工程,无论你多么巧妙地试图混淆它。
我读过一些内容,例如将密码分成几部分,将它们放在代码中的不同位置,并在最终使用它们之前通过一系列函数运行它们......尽管这使事情变得更困难,但您仍然可以始终监视应用程序使用调试器,最终您将能够检索秘密信息。
如果我正确地解释了您的场景,那么您所拥有的代码将部署在某些客户端的场所,并且您的代码连接到数据库(我认为数据库也在客户端的监督之下),连接到它需要密码。该密码对该客户端来说是已知的,因此尝试向客户端隐藏它是毫无用处的。你什么do想要的就是限制任何不应该知道该密码的人访问该密码。
通常,您可以通过将敏感信息放入文件夹中的单独文件中来实现此目的,该文件夹应具有非常严格的权限,只有应用程序和少数选定的人员有权访问。然后,应用程序将在运行时需要时访问该信息。
另外,加密单独的文件也是一个问题 - 如果你这样做,那么就会涉及到一个密钥,必须再次以某种方式保护它 - 无限递归正在发生:) 保护对文件的访问通常就足够了,但如果如果您确实需要尽可能安全,那么解决方案是对文件使用基于密码的加密。但这里的想法并不是将密码存储在系统上的另一个位置,而是作为带外信息(例如,在物理保管库中)并在启动应用程序时输入密码。这也有其问题:(重新)启动应用程序需要有人亲自在场,并且您仍然可以从运行应用程序的计算机的 RAM 中检索密码。但这可能是您在没有专用硬件的情况下可以做的最好的事情。
基于密码的加密的另一个好的替代方案是依赖特定于操作系统的“密码库”,例如 Windows 的“密码库”隔离存储 http://msdn.microsoft.com/en-us/library/3ak841sy.aspx,这是完全不加密和将密码保留在带外之间的一种权衡。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)