从Windows应用商店下载的应用安装在以下位置:
C:\Program Files\WindowsApps
如果查看此文件夹,您可以访问每个应用程序的.exe并使用反射器对其进行反编译。
目前,我的Windows RT应用程序通过SSL将密码发送到WCF服务,以确保只有使用我的应用程序的人才能访问我的数据库(通过该服务)。
如果我的代码可以被任何人阅读,我怎样才能确保只有使用我的Windows 8应用程序的人才能访问该服务?
谢谢!
答案 0 :(得分:6)
从一般意义上讲,这是不可能的。如果您创建了任何放置在客户计算机上的内容,最终您将偶然发现能够破译您的代码并了解如何调用您的服务的人。您可能会将其混淆为疯狂级别,但处理器仍然必须可执行,因此处理器必须了解它。如果确实如此,那么知道装配的任何人都可以理解它。您可能会巧妙地对其进行模糊处理,以便从不重要的垃圾中清除代码非常耗时,但在某些时候某人会阅读它。
常见防御之一是尝试检测 * *实际上是否正在尝试使用您的服务。这就是所有“门户网站”要求您“注册”的原因。这样,应用程序标识被边缘化,并且检查并验证提供登录,密码,PGP密钥等的用户是否允许他/她实际运行您的服务。
此外,在OS /框架层上,有几种方法可以有选择地向客户提供“许可证”,然后在您的应用程序中,您可以使用许可证中的密钥/哈希值在您的服务中进行身份验证。这可以部分地从用户移除重新记录密码等的负担,或者它可以提供额外的认证因素,或者它可以仅仅是允许运行应用程序的是 - 否标志。但是,它不会保护您的代码不被阅读。许可证只是帮助验证软件副本是否合法,是否属于该特定用户/计算机。
您可以选择性地仅针对'反射'(或dotpeeking,或ildasming,或......)。这些工具确实使反编译变得容易(尽管原始反射器现在是付费软件)。因此,最简单的形式是使用混淆器,这将使反编译变得不可能或更难 - 这削减了一定比例的潜在代码阅读器,你可以假设scriptkiddies已经消失。您可以忽略混淆器,也可以用 native 代码(C ++,而不是C ++ / cli)编写服务连接器。这将使代码完全不可反射且不可媲美,这将切断另一大部分人,但仍有一些人将离开(我和成千上万的人,但这远远少于数百万)。
虽然这并没有给你明确的答案,但我想告诉你,你只能获得一些“硬度”,但你不能完全放心阅读。这就是为什么你应该专注于以这种方式访问服务,向街上的陌生人展示你的代码不会危及你的安全。
现在开始解决你的问题:核心问题似乎不在于你的应用程序使用了一些秘密算法,而是你已经对密码进行了硬编码。你看,有这种方法,他们不需要完全阅读你的代码。他们只需要监听您的应用通过套接字发送的数据..
另一个问题是每个人都使用相同的关键词。
硬编码的魔术字符串可能是某种验证,但从不进行身份验证。如果您希望应用程序无需注册,请在首次运行时使注册保持静默和自动状态?当然,你只会反弹这个问题:任何人都可以阅读代码并学习如何自动调整,然后他们将成为克隆..但是,再次,就像我说过:你永远不知道谁在另一边。它是你的应用程序,还是它的理想克隆?或者它可能是一个使用您自己的黑客一点库连接到您的克隆?如果它看起来像一只鸭子,像鸭子一样嘎嘎叫,它就像一只鸭子......