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