Ash*_*iya 2 c# security reflection obfuscation assemblies
自从上一周以来,我一直在努力解决这个问题.我混淆了我的应用程序的exe.我们的应用程序是在线Web应用程序的离线工具 客户端将安装此应用程序并连接到Internet,应用程序将下载相关信息并存储在客户端计算机上的xml文件中以供进一步显示.出于安全考虑,我们正在加密这些xml文件.不幸的是,我们在exe内部有一个方法GetCryptXML,它将在客户机上读取加密的settings.xml并在解密后返回它.此setting.xml也包含其他xml的加密密钥.
我面临的问题是,即使在混淆之后,人也可以通过传递混淆的名称来调用GetCryptXML方法.
有什么方法可以解决这个问题吗?
这是我解决问题的想法,但我不确定如何实施.
我的想法:只有通过使用InvokeMember()函数进行反射才能调用我的函数.在可以调用此函数之前,他/她需要使用此函数来加载程序集.
Assembly.LoadFrom("myapplication.exe")
Run Code Online (Sandbox Code Playgroud)
如果myapplication.exe中的代码可以识别哪个应用程序试图加载我,那么我们可以限制它们加载,如果它不是应用程序.我不知道怎么解决.
任何帮助是极大的赞赏.
谢谢.
模糊处理不会改变的.NET的基础或应用程序 - 最终,它是所有使它更难读,并尝试添加案例,反编译工具无法处理......但无论哪种方式的IL仍然存在.如果你给他们的加密文本(XML)和键(发送过来的电线或隐藏的代码),他们可以将其解密.你所做的只是让它变得更难,而不是不可能.
有一两件事你可以做的是强名称程序集,并验证你的类型的来电者是从与特定的强命名程序集StrongNameIdentityPermission属性.需要注意的是KeeperOfTheSoul是正确─完全信任的组件可以在.NET 4.0之前的版本绕过这个(这是我的理解是在4.0这个属性不再使用标识权限,只有成功,如果正确的证据是存在的).
您还可以编写代码来获取调用堆栈System.Diagnostics.StackTrace,并检查调用方法以验证它是否是预期的调用者之一.这意味着执行速度稍慢,代码更多,但您可以控制它.
编辑 有关使用StrongNameIdentityPermission的演练,请参阅此处.这是一篇关于检查堆栈跟踪的文章.再次注意,这些都不是万能的,但是可以添加多了一个关卡给攻击者,如果你认为它是值得你花时间.(请记住,在互联网的那一天,只有一个成功的攻击者才能让任何数量的人谷歌搜索结果)