/SecretTalk

加密聊天工具

Primary LanguagePython

SecretTalk

加密聊天工具

借用现有即时通信软件,自动化加解密消息,连服务端都不需要实现,寄生虫式的通讯方式。

现在的进展

密钥协商 用了 cryptography 实现的 ECDH
加解密 用了 cryptographyFernet,已经封装好了 AES 的 CBC 模式加密,只需要提供 key 就好了,超级方便
针对 QQ 用了 pywin32 来模拟交互,一直在调整前置窗口,所以会一闪一闪的,因为模拟交互有点迟钝,特别是剪贴板,所以会有一些 sleep 的操作

消息窗口有长度限制,所以不适合直接发送大消息或大的文件,所以在线的就不考虑文件传输了,放在离线模式中实现

使用方法

pip instal -r requirements.txt
cd secretalk
python main.py

命令功能介绍

  • online
    需要两个人交互操作才能建立会话
    • blink_qq
      和 windows 绑定的一种模式,需要提前打开 QQ 窗口
    • pure_talk_ec_share_key
      使用密钥协商生成会话秘钥,进行消息加解密,需要手动传递消息
    • pure_talk_rsa_share_key
      一方生成会话秘钥,使用 RSA 加密会话秘钥传递,会话秘钥同步后,进行消息加解密,需要手动传递消息
  • offline
    一个人发送加密的内容,另一个人解密即可,不需要建立会话
    • pure_talk 基于 RSA AES 的消息加解密
    • pure_file 基于 RSA AES 的文件加解密

涉及到 RSA 的,都可以防范中间人攻击,但需要提前在可信通道交换公钥。

交换公钥的具体操作:

把 private 文件夹下的 my_public_key 发给小伙伴,让小伙伴放在 friends 文件夹下。  
小伙伴可以根据自己的喜好 my_public_key 文件名,它可以用来标识你的身份。  

raw_blink_qq.py

这是最原始的思路,一个使用模拟点击复制粘贴来和 QQ 交互的脚本,握手之后,就可以发送加密消息了。
已经集成到 online_mode 的 blink_qq 模式,大概操作流程如下:

打开要聊天的窗口,看看自己的昵称和窗口名称(应该是小伙伴的昵称或者是你给小伙伴的备注)。  
在命令行运行脚本,按提示输入信息,等聊天窗口里有了两个以 `pk:` 开头的消息,可能过个五六秒,会话就建立了。  
然后直接回车的话,可以刷新小伙伴发来的消息,输入内容再回车的话,就是给小伙伴发消息了。  

问题

通讯软件的界面都是自己实现的,不好搞到消息文本,所以应该不会有后续了,除非能够找到可以比较轻松的或者说比较正经的获取消息文本的方法。

qTox

有更好的已经实现了的软件 Tox,这个项目放弃了。
https://github.com/qTox/qTox

我可能还会改吧,有想法就会改,现在也可以用。