1.思路

对于这个东西,我自己想的是现在用tcp来写一版,然后实际情况使用QUIC来做
不要因为换协议而产生畏难思想,协议肯定是给人使用的,肯定不会设计的比tls那种上层使用逻辑更复杂,我们在此之上进行封装而已
来源
为什么会产生这个思路呢 ?
我在学密码学的时候突然想到UNP上面有原始二进制怎么通过socket进行收发通信啊,tls也有这个密码的加密套件啊,然后我就去找tls图解文档,直接发现了tls就定义一些头,然后使用加密套件进行加密,客户端进行解密
这个时候我就想到我是不是也可以写一下自己的加密协议,然后就有了现在的内容
tls属于行业通用协议,我是打算针对性的写产品,以后别人会针对性分析,加强这之间的对抗
自拟协议也越来越多,以后成本也都会加大,这个的目标也不是和tls做对比,主要是为了学习数据是怎么在协议中流动的怎么进行加密的
还有就是tls魔改太重了,自己大魔改一个openSSL又不现实,还是自己写一个轻量化加密协议吧
目标
这个东西我是打算在基本实现数据链路加密收发的情况下收集一些设备环境指纹或者风控值,业务逻辑收集的东西和协议双方都收集
比如安卓上面,写个自己的网络收发库(比如okhttp),从最底下来调用API收集内容,加密使用自己设计和魔改的算法,加强数据逆向成本,加强风控程度
这种是不会写到博客里面,内容太多了,完全可以写一本书出来了(我不会写书,这里就是比喻一下内容很多)
技术选择
- C语言作为基本编程语言,后续可以对接一切语言,万物底层
- 基本的socket编程
- sodium作为基本的密码学加密库
- cmake编译生成静态和动态链接库,并且显示出来demo
- Wireshark抓包分析数据包,掌握底层协议
现在爬虫逆向上已经很成熟了,vmp也可以被大手子trace出来然后手撕,也会被补环境解决,但是我们通过自定义加密协议就可以增加分析成本
- Android 上很多逆向直接 Hook okhttp,导致数据明文泄露
- Web 环境中抓包、抓 JS context 都太轻松
- TLS 在业务层过于透明
- 自定义协议可以随时换加密、混淆方式,让逆向成本飞涨
-
Phase 1:基础加密链路
- C语言
- libsodium
- TCP 通信
- 数据包格式
-
Phase 2:协议扩展
- 加入设备指纹字段
- 序列号 / 时间戳 / 混淆
- Wireshark 分析
-
Phase 3:QUIC 版本
- 迁移至 QUIC
- 自定义加密后的 payload
-
Phase 4:SDK 化 & 实战化
- Java(Android) SDK 这个我可能会实现一些
- Go SDK 这个也会看看,如果复杂就让好心人实现
- Rust / C# … (可选) 这个纯让好心人实现
完成目标
- 彻底理解网络安全的本质
- 在逆向、风控、工程方面都提升
- 摆脱第三方库的黑盒限制
- 做出可以跨平台、跨语言的底层能力
- 为未来的逆向 / 风控业务积累经验
- 从“写代码的人”成长为“写协议的人”
预计篇幅是35篇内容,慢慢写(这篇不算)