cty
cty
通过用wireshark比较分析流量,我发现firefox的ClientHello是这么一个逻辑,如果ClientHello的大小小于517, 那么会被加上padding使得大小刚好为517。但是在部分情况下,ClientHello会带有一个叫做 ``` Extension: pre_shared_key (len=272) ``` 的extension, 由于这个extension非常的长,往往会使得ClientHello的大小变成650左右,这个时候firefox就不会再去加padding, 而且这个clientHello的具体大小会受到sni长度的影响。 经过我的测试,如果Firefox发的clientHello请求的大小刚好为517, 那么CCS后面的数据包的大小会刚好落在 650 -750 字节这个区间内,这个时候你的if statement就会起效判断为trojan. 如果FF发的ClientHello请求的大小为650左右,CCS 后面的数据往往会超过800字节,导致判断失效。这是我说成功率只有10%-20%的原因。 ``` Frame 370: 725 bytes on wire (5800 bits), 725 bytes captured...
嗯,我现在只找到了一个问题。FF下upCount我建议再抓取一段800 - 850字节,用来适配附带pre_shared_key的情况。另外pre_shared_key出现的时候,downCount往往都在230多一点,还没查清楚具体为什么。工作忙,周末有空再接着测。
> Any update? 有的,一直拖着没发出来(懒)。根本原因是我在trojan的header这里没做缓存,导致整个trojan握手的header分了好几次发送,所以tls-in-tls的client hello总是在 第一次ssc之后才发出去,而不是之前,所以总是会检测失败。