5

从 Windows 应用商店下载的应用程序安装在此位置:

C:\Program Files\WindowsApps

如果你查看这个文件夹,你可以访问每个应用程序的 .exe 并使用反射器来反编译它们。

目前,我的 Windows RT 应用程序通过 SSL 向 WCF 服务发送密码,以确保只有使用我的应用程序的人才能访问我的数据库(通过服务)。

如果任何人都可以阅读我的代码,我如何确保只有使用我的 Windows 8 应用程序的人才能访问该服务?

谢谢!

4

1 回答 1

6

在非常普遍的意义上,这是不可能的。如果您创建任何放置在客户计算机上的东西,最终您会偶然发现有人会设法破译您的代码并了解如何调用您的服务。您可能会将其混淆为疯狂的级别,但它仍然必须由处理器执行,因此处理器必须理解它。如果确实如此,那么任何了解汇编的人都可以理解它。您可能会巧妙地混淆它,以便从不重要的垃圾中清理代码非常耗时,但在某些时候仍然有人会阅读它。

一种常见的防御措施是试图检测*实际上正在尝试使用您的服务。这就是为什么所有“门户”都要求您“注册”的原因。这样,应用程序身份就被边缘化了,提供登录名、密码、PGP 密钥等的用户会被检查并验证他/她是否被允许实际运行您的服务。

此外,在操作系统/框架层,有几种方法可以选择性地向您的客户提供“许可证”,然后在您的应用程序中,您可以使用许可证中的密钥/哈希值在您的服务中进行身份验证。这可能会部分减轻用户记住密码等的负担,或者它可能提供额外的身份验证因素,或者它可能只是一个允许或不运行应用程序的是-否标志。不过,它不会保护您的代码不被阅读。许可证仅有助于验证软件副本是否合法以及是否属于该特定用户/计算机。

您可以选择性地仅针对“反射”(或dotpeeking,或ildasming,或......)采取行动。这些工具确实使反编译变得容易(尽管原来的反射器现在是付费软件)。因此,最简单的形式是使用混淆器,这将使反编译变得不可能或更难——这会减少一些潜在的代码阅读者,你可以假设脚本小子已经消失了。您可以忽略混淆器,并且可以使用本机代码(C++,而不是 C++/cli)编写服务连接器。这将使代码完全不可反射和不可靠,这将切断另一大比例的人,但仍然会留下一些人(我和其他数千人,但这远少于数百万人)。

虽然这并没有给你明确的答案,但我想告诉你,你只能得到一些“硬度”,但你不能让它完全不被阅读。这就是为什么您应该专注于以这种方式访问​​服务,在街上向陌生人展示您的代码不会危及您的安全。

现在开始解决您的问题:核心问题似乎不在于您的应用程序使用了一些秘密算法,而在于您已将密码硬编码在其中。您看,使用这种方法,他们不需要阅读您的代码。他们只需要监听您的应用程序通过套接字发送的数据..

另一个问题是每个人都使用相同的关键词

硬编码的魔术字符串可能是某种验证,但绝不是身份验证。如果您希望应用程序免注册,请在首次运行时使注册静音和自动?当然,你只会解决这个问题:任何人都可以阅读代码并学习如何自动注册,然后他们将进行克隆。但是,就像我说过的那样:你永远不知道谁在另一边。它是您的应用程序,还是它的理想克隆?或者它可能是一个克隆,使用你自己的 hacked-a-bit 库连接到你?如果它长得像鸭子,叫起来像鸭子,那它就是鸭子。

于 2012-09-26T20:39:00.717 回答