18

我正在从事由一家特殊银行提供给我们公司的销售点项目。银行提供了一个通过 USB 端口与 POS 交互的 DLL。我添加了用 .NET C# 语言编写的 DLL,所以没有存在互操作性问题。DLL中有一个方法被调用DebitAndShareTheAmount。这个方法有两个主要参数P1,P2

P1是明文中的P2金额,是应该从P1明文中再次减去的金额。因此,如果我打电话DebitAndShare(1000,10);//它实际上会在银行贷记我的帐户 1000-10=990$,而商店使用我的应用程序 10$。

问题是任何具有 C# 编程基础知识和访问该 SHOP 计算机的人都可以安装 Visual Studio 并使用该 DLL 并调用 DebitAndShare 方法,剩下的你就知道了。实际上我们的应用程序将充当服务提供者,并且可以在全国各地的特殊商店,商店的所有者将通过在我们的应用程序中向客户提供服务并收取他们的金额(10 美元)来获得报酬。我将与 POS 开发人员就我刚才提到的安全问题开会。

我浏览了 MCTS 书,在书的安全部分,我发现如果银行 DLLPublisherIdentityPermission(SecurityAction.InheritanceDemand, CertFile=@"SomeCert.cer")在 DebitAndShare 方法之前使用属性并将此方法标记为受保护,那么我们可以拥有一级安全性,对吗?你有什么建议。我也认为如果银行可以给我们加密算法的方法,那也足够了。

4

4 回答 4

1

您要做的是阻止您的应用程序被破解,这类似于我之前遇到的许可问题,我没有从社区得到任何好的解决方案,但只有一些好的建议,这里的重点是无论如何你努力尝试,只要你在你的用户可以访问的机器上执行代码,它总是容易受到影响,不管代码混淆,即使加密有时也无法保护你的应用免受具有足够技能的坚定破解者的攻击,并且从搞砸你的应用程序的盈利能力来看,会有很多确定的(唯一的是他们需要知道它可以做到,他们会找到一个有技能的人)。

我在这里可能听起来像一个悲观主义者,但这是铁的事实。

在我看来,最好的方法是将更可能被破解的代码部分移动到中央服务器,并将这些方法公开为 web-services 调用。我知道即使这也不是完全安全的,请记住最近的 Apple 应用商店黑客攻击。确保您已遵循所有最佳实践并希望您能在其他人之前发现您的系统中的漏洞

于 2012-08-11T08:13:46.220 回答
0

您可以拥有它,以便该函数接受您的密码之类的内容,以便该函数调用银行数据库以检查您的密码是否正确。这样至少如果有人获得访问权限,他们必须先禁用 pin 参数。

您也可以遵循 Gabe 方法,让系统将帐户映射到设备并使其只能从已注册的设备访问该功能。此外,也许这样做是为了使源代码不存储在银行计算机上,而是存储在银行保险库/保险箱中的存储设备上。然后这个人实际上必须抢劫银行才能得到它。作为双重措施,加密/设置设备密码,以便只有解密算法(在银行系统上,强盗不太可能返回)或已知密码才能提取源代码。

如果这不起作用,我没有更明智的想法(除非将源保持在回收站中或将源锁定在核掩体中算明智的)。

于 2012-08-06T12:47:28.040 回答
0

正如评论所表明的那样,您将遇到一个严重的问题来确保这一点。但是,我想到了一些至少会有所帮助的方法。

  1. 走堆栈。在您的调用站点中,查看当前堆栈,然后往回走。如果你看到任何不是你期望的东西,那就失败。这不是万无一失的,但它会阻止不熟练和/或无法查看您的源代码的人。

  2. 使用 SecureString 和外部机密。这要求您有某种方法可以从某个地方获得安全值。一旦你有了它,你就可以加密/签署数据以确保它不被篡改(通过证书或其他机制)。调试器(a la WinDBG)仍然能够破坏它,但不太容易。

  3. 用 C++ 重建你的代码。机器代码更难找到,但这仍然不会阻止了解 Windows 内部结构的人。

与其试图通过保护你的应用程序来清空海洋,你可以采取一些措施,然后像银行那样做。寻找没有意义的模式。如果特定 POS 通常生成 100 左右的值,当您看到大订单或小订单时,请将其标记以供审核。交易量突然增加?一样。

除了技术解决方案之外,您最好的选择(恕我直言)是确保商店部分陷入欺诈行为。在线上的钱使人们对谁可以访问计算机更加小心。

埃里克

于 2012-07-04T01:42:30.083 回答
-2

我们应该使用延迟签名。银行授权人在设备中部署正确签名的dll。银行用他们的私钥签名。

通过此的所有呼叫都是真实的,所有其他呼叫都是黑客请求。

于 2012-07-06T10:49:48.397 回答