MCPcopy Create free account
hub / github.com/ThePeppy/wechat-api-ipad / MmtlsDecryptData

Method MmtlsDecryptData

Mmtls/MmtlsDecryptData.go:11–103  ·  view source on GitHub ↗
(srcbindata []byte)

Source from the content-addressed store, hash-verified

9)
10
11func (httpclient *HttpClientModel) MmtlsDecryptData(srcbindata []byte) []byte {
12
13 var packetHeader MmtlsPacketHeader
14 recv_data := srcbindata
15 readerHeader := bytes.NewReader(recv_data[:5])
16 mmtlsheader := []byte(string(recv_data[:5]))
17 binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerbyte)
18 binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerversion)
19 binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerpacketLen)
20
21 server_data := recv_data[5 : 5+packetHeader.headerpacketLen]
22 newsendbufferhashs := new(bytes.Buffer)
23 newsendbufferhashs.Write(httpclient.mmtlsClient.Newsendbufferhashs)
24 newsendbufferhashs.Write(server_data)
25 decrypt_serverdata_hash256 := Getsha256(newsendbufferhashs.Bytes())
26
27 var HkdfExpand_handshake = new(bytes.Buffer)
28 HkdfExpand_handshake.Write([]byte{0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e})
29 HkdfExpand_handshake.Write(decrypt_serverdata_hash256)
30
31 HkdfExpand_handshake_key := Cilent.Hkdf_Expand(sha256.New, httpclient.mmtlsClient.Hkdfexpand_pskaccess_key, HkdfExpand_handshake.Bytes(), 28)
32 httpclient.mmtlsClient.Decrptshortmmtlskey = HkdfExpand_handshake_key[:16]
33 httpclient.mmtlsClient.Decrptshortmmtlsiv = HkdfExpand_handshake_key[16:28]
34
35 datapos := 5 + packetHeader.headerpacketLen
36
37 recv_data = recv_data[datapos:len(recv_data)]
38 readerHeader = bytes.NewReader(recv_data[:5])
39 mmtlsheader = []byte(string(recv_data[:5]))
40 binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerbyte)
41 binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerversion)
42 binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerpacketLen)
43
44 serverfinishdata := recv_data[5 : 5+packetHeader.headerpacketLen]
45 serverfinishdata_aad := new(bytes.Buffer)
46 serverfinishdata_aad.Write([]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01})
47 serverfinishdata_aad.Write(mmtlsheader)
48
49 var xorkeyBuffer = bytes.NewReader(httpclient.mmtlsClient.Decrptshortmmtlsiv[8:12])
50 var xorkeyint uint32
51 binary.Read(xorkeyBuffer, binary.BigEndian, &xorkeyint)
52 xorkeyint = xorkeyint ^ uint32(httpclient.mmtlsClient.ServerSeq)
53 buf := new(bytes.Buffer)
54 binary.Write(buf, binary.BigEndian, xorkeyint)
55
56 var decryptmmtlsIv_seq = new(bytes.Buffer)
57 decryptmmtlsIv_seq.Write(httpclient.mmtlsClient.Decrptshortmmtlsiv[:8])
58 decryptmmtlsIv_seq.Write(buf.Bytes())
59
60 decryptserverfinishdata := Cilent.NewAES_GCMDecrypter(httpclient.mmtlsClient.Decrptshortmmtlskey, serverfinishdata, decryptmmtlsIv_seq.Bytes(), serverfinishdata_aad.Bytes())
61 if decryptserverfinishdata != nil {
62 httpclient.mmtlsClient.ServerSeq += 1
63 var HkdfExpand_serverfinish_datakey = new(bytes.Buffer)
64 HkdfExpand_serverfinish_datakey.Write([]byte{0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64})
65 hkdfexpand_shortencryptkey := Cilent.Hkdf_Expand(sha256.New, httpclient.mmtlsClient.Hkdfexpand_pskaccess_key, HkdfExpand_serverfinish_datakey.Bytes(), 32)
66
67 h := hmac.New(sha256.New, hkdfexpand_shortencryptkey)
68 h.Write(decrypt_serverdata_hash256)

Callers 1

MMtlsPostMethod · 0.95

Calls 3

Hkdf_ExpandFunction · 0.92
NewAES_GCMDecrypterFunction · 0.92
Getsha256Function · 0.85

Tested by

no test coverage detected