程序中的数据安全性问题

如何保证接收到的数据不被篡改呢?

在写程序时,经常让我头疼的一个问题就是数据安全性问题,比如在我们从服务器上接收一段数据,我们要防止该数据被篡改,我们该怎么做呢?

可能我首先想到的就是数据签名,数字签名通过密码学技术来确保数据的完整性和真实性,其核心原来是基于非对称加密来实现的。

非对称加密有一个特点,非对称加密具有两个秘钥,我们称为公钥和私钥,使用一个秘钥进行加密使用相对另外一个秘钥可以完成解密。

在数字签名中,服务器首先会计算数据的哈希值,然后使用私钥对哈希值进行加密,产生数字签名,这一步只有私钥拥有者能够完成此操作。服务器会将数据和数字签名一起发送给客户端。

客户端在接收到数据了以后会使用相同的哈希算法再次计算数据的哈希值,然后对数字签名使用公钥进行解密,将计算得到的哈希值和解密出来的哈希值进行对比,如果哈希值相同,则说明数据没有被篡改。

一切都万事大吉了么?

如果觉得采用上面的方案就可以保证我们接收到的数据不被篡改就大错特错了,我们想要解决接收到的数据被篡改的问题经常在网上查到的解决方案就是上面描述的内容,那我为什么说是大错特错了呢?下面我们以C#编写的程序为例,对其使用dnspy进行一下逆向分析看看

上图是我用dnspy对Release的C#程序逆向分析的结果,我们可以看到逻辑清晰的展示了出来,和源码简直一模一样,不仅如此,还可以对上述逻辑进行修改然后重新编译保存。

所以只需要对我们的程序简单的进行一下逆向分析就可以将我们的验签逻辑完全跳过,不仅如此,我们的代码中将没有任何安全可言。

为我们的程序进行一次安全保护

发现问题才能解决问题,那针对上述问题该如何进行解决呢?

我们可以对我们的程序进行加壳保护,首先我们下载一下 Virbox Protector 工具,然后将我们的程序拖入,选择我们需要的保护选项进行保护,接下来我们看一下上面的程序保护后的结果。

这次我们可以发现已经完全看不出我们的程序逻辑和程序中的数据了,这次我们的程序就可以放心的发布啦,

工具下载地址:https://shell.virbox.com/

滚动至顶部
售前客服
周末值班
电话

电话

13910187371