私有协议的解密游戏:从秘文到明文

私有协议

现在的互联网,谁不想造一个像Ether、IP、TCP这种网络领域鹤立鸡群的通信协议。
就连很火的QUIC,也是伴随着RFC落地,才正式被人认可是公共的HTTP协议。

所以,大多数人都还是在创造协议时,给自己贴上个“私有协议”的标签。这很常规,并不俗套。

甚至teamviewer这类的商业软件就把自家的teamview协议叫做私有协议。

一个私有协议完成自己的工作,是自己基本的能力。但如果想让它被真正的“用起来”,最起码还需要做这样一份工作,私有协议的解密游戏

为什么这么说呢?因为,一个私有协议在网络中跟着数据包一起传输,它们都必然是“以字节这样的形式”传递的。很显然,这是计算机熟悉的规则,并不是人熟悉的。所以,这项解密游戏必须要有破局者!

如何破局?想必熟悉网络的人都会想到它,就是wireshark!

Wireshark

wireshark是最通用的网络协议分析器,主要用于分析网络上的通信协议,通过解析数据包去细粒度地观察网络发生的事件。

但自定义的私有协议不会被wireshark所支持。这太明显,你也没告诉wireshark,这是个啥东西,但wireshark很聪明,它明白会有这样一个重要的需求,所以wireshark提供了一种插件式的能力,帮助wireshark开发者在wireshark上解析他们想要的私有协议。

这点,wireshark 可太懂了!

如今的wireshark支持C和lua语言去定义“如何将私

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来解答你的问题。 首先,我们定义一个基础加密解密类,以下是该类的代码: ```cpp class Encryption { public: std::string plaintext; std::string ciphertext; std::string decryption_result; virtual void encrypt() {}; virtual void decrypt() {}; }; ``` 这个类有三个成员变量:明文、密文和解密结果,以及两个虚函数 encrypt 和 decrypt。 接下来,我们分别采用公有派生和私有派生派生出异或加密类。以下是公有派生的代码: ```cpp class XOREncryption : public Encryption { public: void encrypt() override { // 异或加密 for (char& c : plaintext) { c ^= 0x5A; } ciphertext = plaintext; } void decrypt() override { // 异或解密 for (char& c : ciphertext) { c ^= 0x5A; } decryption_result = ciphertext; } }; ``` 这个类重载了基类的虚函数 encrypt 和 decrypt,实现了异或加密和解密的操作。 接下来是私有派生的代码: ```cpp class PrivateXOREncryption : Encryption { private: void encrypt() override { // 异或加密 for (char& c : plaintext) { c ^= 0x5A; } ciphertext = plaintext; } void decrypt() override { // 异或解密 for (char& c : ciphertext) { c ^= 0x5A; } decryption_result = ciphertext; } }; ``` 这个类和公有派生的类非常相似,唯一的区别是继承方式改为了私有。这意味着该类的对象无法被当做基类的对象来使用。 现在我们可以通过基类指针调用派生类对象了。以下是示例代码: ```cpp int main() { Encryption* ptr; // 公有派生示例 XOREncryption xor_encryption; xor_encryption.plaintext = "Hello world!"; ptr = &xor_encryption; ptr->encrypt(); std::cout << "明文: " << xor_encryption.plaintext << std::endl; std::cout << "密文: " << xor_encryption.ciphertext << std::endl; ptr->decrypt(); std::cout << "解密结果: " << xor_encryption.decryption_result << std::endl; // 私有派生示例 PrivateXOREncryption private_xor_encryption; private_xor_encryption.plaintext = "Hello world!"; ptr = &private_xor_encryption; ptr->encrypt(); std::cout << "明文: " << private_xor_encryption.plaintext << std::endl; std::cout << "密文: " << private_xor_encryption.ciphertext << std::endl; ptr->decrypt(); std::cout << "解密结果: " << private_xor_encryption.decryption_result << std::endl; return 0; } ``` 输出结果: ``` 明文: Hello world! 密文: 6\x1f\x1c\x1c\x00\x06+\x1c\x17\x1c\x1d 解密结果: Hello world! 明文: Hello world! 密文: 6\x1f\x1c\x1c\x00\x06+\x1c\x17\x1c\x1d 解密结果: Hello world! ``` 以上就是基础加密解密类和异或加密类的实现过程,以及如何通过基类指针调用派生类对象。可以看到,公有派生和私有派生的最大区别在于对象是否能被当做基类对象来使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值