从Windows应用商店下载的应用程序安装在此位置:
C:\Program Files\WindowsApps
如果您查看此文件夹,您可以访问每个应用程序的.exe,并使用reflector对其进行反编译。
目前,我的Windows RT应用程序通过SSL向WCF服务发送密码,以确保只有使用我的应用程序的人才能访问我的数据库(通过该服务)。
如果我的代码可以被任何人读取,我如何确保只有使用我的Windows 8应用程序的人才能访问该服务?
谢谢!
发布于 2012-09-27 04:39:01
在非常普遍的意义上,这是不可能的。如果你创建了放在客户计算机上的任何东西,最终你会偶然遇到一个人,他将设法破译你的代码,并了解如何调用你的服务。你可能会把它弄得乱七八糟,但它仍然必须是处理器可执行的,所以处理器必须理解它。如果是这样,那么任何了解汇编的人都可能理解它。你可以巧妙地混淆它,这样从无关紧要的垃圾中清理代码将非常耗时,但在某些时候,还是会有人阅读它。
常见的防御之一是试图检测谁*实际上正在试图使用您的服务。这就是为什么所有的“门户”都要求你“注册”。这样,应用程序的身份被边缘化,提供登录、密码、PGP密钥等的用户将被检查和验证他/她是否被允许实际运行您的服务。
此外,在操作系统/框架层,有几种方法可以选择性地向客户提供“许可证”,然后在您的应用程序中,您可以使用许可证中的密钥/散列在您的服务中进行身份验证。这可以部分地从用户身上消除记住密码等的负担,或者它可以提供额外的认证因素,或者它可以仅仅是允许或不允许运行应用程序的是-否标志。尽管如此,它不会保护您的代码不被读取。许可证只是帮助验证软件副本是否合法,以及是否属于该特定用户/计算机。
您只能有选择地针对“反射”(或dotpeeking,或ildasming,或...)采取行动。这些工具真的让反编译变得很容易(尽管最初的反射器现在是付费软件)。因此,最简单的形式是使用混淆器,它会使反编译变得不可能或更难-这会减少一些潜在的代码阅读器,你可以假设scriptkiddies已经消失了。您可以忽略混淆器,并且可以用原生代码(C++,而不是C++/cli)编写服务连接器。这将使代码完全不可反射和不可转换,这将切断另一个很大比例的人,但仍然会留下一些人(我和其他数千人,但这远远少于数百万人)。
虽然这不能给你一个明确的答案,但我想告诉你,你只能得到一些“硬度”,但你不能让它完全不被阅读。这就是为什么你应该专注于以这种方式访问服务,这样在街上向陌生人展示你的代码不会损害你的安全。
现在来谈谈你的问题:核心问题似乎不在于你的应用程序使用了一些秘密算法,而在于你已经在其中硬编码了密码。你看,使用这种方法,他们根本不需要阅读你的代码。他们只需要监听你的应用程序通过套接字发送的数据。
另一个问题是,每个人都使用相同的关键词组。
硬编码的魔术字符串可能是某种验证,但绝不是身份验证。如果你希望应用程序是免注册的,那么在第一次运行时让注册保持静默和自动吗?当然,您只需跳过问题:任何人都可以阅读代码并学习如何自动注册,然后他们将创建一个克隆。但是,再说一次,就像我说过的:你永远不会知道谁在另一边。它是你的应用程序,还是它的理想克隆?或者它可能是一个克隆,它使用你自己的hacked a-bit库来连接你?如果它看起来像一只鸭子,叫起来像一只鸭子,那它就是一只鸭子。
https://stackoverflow.com/questions/12609754
复制相似问题