gospider007 / requests

🚀A next-generation HTTP client for Golang, Support ja3, ja4, http2, tls fingerprint modification
GNU General Public License v3.0
102 stars 19 forks source link

tls的key_share和浏览器的不太一样 #17

Closed tocha688 closed 4 days ago

tocha688 commented 4 days ago

这是chrome浏览器的

{
        "name": "key_share (51)",
        "shared_keys": [
          {
            "TLS_GREASE (0xbaba)": "00"
          },
          {
            "X25519Kyber768 (25497)": "73f710d83862430d2a3bf0800855d28291e398dcef7e91fb119e306e65fd1d7eee464b7e7467eb212de3c29e48179f828760ab5b3127b6bdcfa674a06836fdcc74a01258cc3001afb6ba8c6b204ab2384562a6ba171b9142ceb69116bcc013522ac8ad20a6e488b67a050e7a6236f40bce2f1ba2dbf36c4f281d3dcc58236cc972680039d5754677b97ee3ba9dd357e945bac19175cb94045539b954001636e221bb50b09d21c3a70326b4567ead267cc1eb24f2d3b4f0155df7a89f2c9307f10b4298c094f670cc933849464416ff71902651992bb5a22ec9afcf612c96496ee27c010d1aa87296bf5ef13d8e380a4e1b458d511e60b90cd5781b57b6433b603accd8aeed198c1a49245f615ae3863717605ce4d16be4100293d20d6fa814c257b4bbe857970151114c338534a45e463e641ab1fa385d1a9c9195149bee3159f9d07310a2ab21e2a136673bbe12b47bccb9f9f42ff4e686b392004501432a37ada69968fc5959bac94abb4c91817866f8c758109aa0df58317c81208723cf32784dfe611438a36bec5a9bfdd29ae4d1c9625561cb33377498b6261819571cad9dc8ad0323956cb715b0803de44a598a501bc8980e480c486791780bfb970d2b7c0981b4acd2202663ccd2546cee9046dc64c61d37cb556a2e8732bbb78a0a2e271a6c89b7fa1482815054939225da2a1e9001836cc023f58c7964b7530035861b586b82ac2c4f54732cf866485105d29b8484960d7e7763e448447da3947fc4a534f463e603b15890baaf0817a9c203fa115397987054c630c2631dbdc55cd940ad73f73e71e99fae44164de2ce63c0aaea01399fbbac515003e0022ed6d43b2c5286cdf7013dac11e484172c67c8dc4615e15c82f0da7c247b96b5828a02d73f58e3116e4bb9cdc1900a4a473968591ca658c3d51493f6918983bc9079a632630ead176ace600d281cc921a84a7dc26461ba7d608acccbbccb2c3c1a62f9947f6974fa47a2d65c30fdda0b53a93bb3673ee111317af7a1b61a9802c815e18c11b13822a19a1da36a84c4e90c4491abe7fb2740261e47dc5d1e110133d8a9d87b7146025a5d623c554627d5c38916d0916c28127c26263a885e18b0b1161974892039be89c3bf65caa39b1e019493ad65a52a76cb73b78efc7204eff403c1750be184cf4bc1671421c1a1b885a6e572df2a02295a8b987763613654c4000cd631192556a31a561cce01336de02922890db9714d43538468b70f02b403005c23e9009bf2974748a2cc34a7384e6930f8a210f7b01f7aa68e6c2b086118c325bba2ea811db3670cef88c426e82233952b931b2adbf8376cc7cf65dc81147abc1f536eeeb16a08b2b927076453c6537caa9ad2ccb7981a1e46e0b912295328092bc0814727a2a124a514c009a6b40092c252b37d80845ae97bf6b56ed4456c5392cb938b9f2bec68e3c6a773e0197d2c4088a75701718018908c3bc4610f5513096896e23467796328b0409727dbc764fb1679e48f46587dc36c49ced5223276976b5a29abd5be3b13ab8166c6ba5537cb557e9f969db7a9a76288392e9668749518c6c49dd699a2b6f5085e72ab45823558a3b7d55531c78a66c75a081f642c1f064819c61fb1998df3c852a1da585c40594306a730a82d2ee397d4655817bc856cab396565588b781464af178faba1003a4e6687292ee24f342c588bc73f67f1"
          },
          {
            "X25519 (29)": "c1b5034880107813db2b0e91bbe88bb209bc2abc4d465af48684e8e5ed14323c"
          }
        ]
      }

这是火狐浏览器的

{
        "name": "key_share (51)",
        "shared_keys": [
          {
            "X25519 (29)": "696ab2504a9498d93f4bf9f7109da880ce7554e922b75e02dc31c69500b5eb1f"
          },
          {
            "P-256 (23)": "0411e9c12e3fa54211a59c11748cc196255bc8dc94c3874e5c94b6c250686237f57ab5194e5a05f8bdb0120e05f393891cd7e809b3dbc9bc86076c86d9d0dba230"
          }
        ]
      }

下面是模拟请求的,ja3和h2都是设置的浏览器的

{
        "name": "key_share (51)",
        "shared_keys": [
          {
            "TLS_GREASE (0x0a0a)": "00"
          },
          {
            "X25519 (29)": "8dbab0351b4718dc824477ceff0396dfd7e0ec79b40386bbf12c8e6d54d97c12"
          },
          {
            "P-256 (23)": "041feaa2116438204c2011db150541c8adad8532989dc1ef22253a8bb0c19f1c766a300946c2b8846a2a2b6a57ee81775ccae8337166caf071e79884eca73b3e9a"
          }
        ]
      }

有没有办法设置成一样的字段

tocha688 commented 4 days ago

加了一段修复代码

func ja3_extension[V1 utls.TLSExtension](ja3s ja3.Ja3Spec) (V1, int) {
    for i, k := range ja3s.Extensions {
        // 尝试将k断言为指向V1类型的指针
        if n, isok := k.(V1); isok {
            return n, i
        }
    }
    var zero V1
    return zero, -1
}

// ja3 修补程序
func ja3_repair(p *RestyRequest, ja3s ja3.Ja3Spec) ja3.Ja3Spec {
    if p.IsChrome() {
        //修补 KeyShare
        tks, index := ja3_extension[*utls.KeyShareExtension](ja3s)
        if index != -1 {
            tks.KeyShares = []utls.KeyShare{
                {Group: utls.CurveID(utls.GREASE_PLACEHOLDER), Data: []byte{0}},
                {Group: utls.X25519Kyber768Draft00},
                {Group: utls.CurveP256},
            }
        }
    }
    return ja3s
}