与tls / ssl一起使用的Wireshark解剖器

时间:2016-12-14 00:36:11

标签: ssl tcp lua wireshark

我有一个协议,它在非标准端口上使用SSL / TLS,并通过它传输非标准数据(而不是http)。我正在尝试制作一个wireshark解剖器(在lua中)来剖析这个协议。

我该怎么做?我可以注册一个在该端口上调用tcp片段的解析器

local dissector_table_tcp = DissectorTable.get("tcp.port")
dissector_table_tcp:add(1234, myprotocol)

我可以让SSL解析器将所有片段解码为SSL

function myprotocol.dissector(tvb, pinfo, root)

    local ssl_dissector = Dissector.get("ssl")
    local ssl_dissected_len = ssl_dissector:call(tvb, pinfo, root)
    pinfo.cols.protocol:set("My Protocol")

此时,如果我在Wireshark中设置了premaster密钥文件(Preferences-> Protocols-> SSL->主密钥文件),我可以看到数据包的解密内容,一切都很好。排序。

但是我想为我的协议创建字段并将它们放在协议树中。我如何获得ssl解剖器生成的解密数据?

更新:

我正试图尽我所能地混淆这一点;没有关于你应该如何做到这一点的教程。有点像Wireshark有一个基于由解剖器填充的字段/变量的编程模型,理论上应该可以查询这些变量以找到解剖器的输出。

为此,我一直在运行SSL解析器,然后查看它声明的字段,但实际上似乎并没有填充它们。当我在SSL解析器之后运行后解剖器时,没有设置任何看似有用的字段,如ssl.segments或ssl.segment.data:

protocol_foo = Proto("foo", "Foo protocol")
port = 4172

g_field_segment = Field.new("ssl.segment")
g_field_segment_data = Field.new("ssl.segment.data")
g_field_segments = Field.new("ssl.segments")
g_field_reassembled_data = Field.new("ssl.reassembled.data")

function protocol_foo.dissector(tvb, pinfo, root)

    print("====== protocol_foo")

    for k,v in pairs({ g_field_segment, g_field_segment_data, g_field_segments, g_field_reassembled_data }) do
        if v() ~= nil then
            print("Field " .. v.name .. " is NOT nil")
        else
            print("Field " .. v.name .. " is nil")
        end
    end

end

-- post-dissector registration
local ssl_dissector = Dissector.get("ssl")
local dissector_table_tcp = DissectorTable.get("tcp.port")
dissector_table_tcp:add(port, ssl_dissector)
register_postdissector(protocol_foo)

当我在我的协议上运行此代码时,这些ssl.segment *变量都没有测试为正;许多变量(比如ssl.handshake。*)变量测试为正(至少用握手pdus),但不包含解密内容的变量。

有没有人有任何想法?

0 个答案:

没有答案