如何在wireshark中动态解密数据

how to dynamically decrypt data in wireshark

我在 wireshark 中为我的协议写了一个 lua 解析器:my.lua。问题是我的协议对数据使用 AES 加密,每个会话的加密 AES 密钥都不同。

现在我在my.lua中硬编码了16字节的aes-key,但是每次开始抓包或者加载一些保存的数据包之前,我都需要修改硬编码的值,非常不方便。

wireshark 中有没有允许用户输入的东西?例如,弹出对话框显示:"please input the aes key",在用户输入后,lua 脚本使用它进行解密。

考虑使用首选项 API。创建一个新的首选项就像设置索引一样简单,而读取首选项就是读取索引:

your_proto = Proto("yourproto", "Your Proto")
your_proto.prefs.key = Pref.string("Decryption key", "", "128-bit AES key (in hex)")

function your_proto.dissector(tvb, pinfo, tree)
    local decryption_key = your_proto.prefs.key
    decrypt(tvb, tvb())  -- assume suitable "decrypt" routine
end

然后您可以右键单击协议树,select协议首选项并修改您的设置。有关文档,请参阅 https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Proto.html#lua_class_Pref

(无耻插件:)可以在此处找到将首选项 API 与 luagcrypt 库(用于更快的 AES 解密)一起使用的示例: