● Notice //GitHub (@shehzade) is temporarily suspended pending an automated false-positive review. All tools are hosted on this Code Mirror and available on request (contact); GitHub links will return once reinstated.
PUBLIC MIRRORGo v1.0

Multi-protocol network egress assessment and DLP verification framework featuring automated L4 sweeps, corporate proxy traversal, and covert protocol smuggling across 20+ channels.

$ git clone https://shehzade.io/repos/contraband.git Copy
Source ZIP (1.93 MB)
Code 174 Commits 1
contraband / pkg / client / evasion / compression.go
← Back to directory
106 lines · 2.4 KB
Raw
1package evasion
2
3import (
4 "bytes"
5 "compress/gzip"
6 "compress/zlib"
7 "fmt"
8 "io"
9
10 "github.com/klauspost/compress/zstd"
11)
12
13func Compress(data []byte, method CompressionMethod, level int) ([]byte, error) {
14 switch method {
15 case CompressNone, "":
16 return data, nil
17 case CompressZlib:
18 var buf bytes.Buffer
19 if level < zlib.DefaultCompression || level > zlib.BestCompression {
20 level = zlib.DefaultCompression
21 }
22 w, err := zlib.NewWriterLevel(&buf, level)
23 if err != nil {
24 return nil, err
25 }
26 if _, err := w.Write(data); err != nil {
27 return nil, err
28 }
29 if err := w.Close(); err != nil {
30 return nil, err
31 }
32 return buf.Bytes(), nil
33 case CompressGzip:
34 var buf bytes.Buffer
35 if level < gzip.DefaultCompression || level > gzip.BestCompression {
36 level = gzip.DefaultCompression
37 }
38 w, err := gzip.NewWriterLevel(&buf, level)
39 if err != nil {
40 return nil, err
41 }
42 if _, err := w.Write(data); err != nil {
43 return nil, err
44 }
45 if err := w.Close(); err != nil {
46 return nil, err
47 }
48 return buf.Bytes(), nil
49 case CompressZstd:
50 var buf bytes.Buffer
51 enc, err := zstd.NewWriter(&buf)
52 if err != nil {
53 return nil, err
54 }
55 if _, err := enc.Write(data); err != nil {
56 _ = enc.Close()
57 return nil, err
58 }
59 if err := enc.Close(); err != nil {
60 return nil, err
61 }
62 return buf.Bytes(), nil
63 default:
64 return nil, fmt.Errorf("unsupported compression method: %s", method)
65 }
66}
67
68func Decompress(data []byte, method CompressionMethod) ([]byte, error) {
69 switch method {
70 case CompressNone, "":
71 return data, nil
72 case CompressZlib:
73 r, err := zlib.NewReader(bytes.NewReader(data))
74 if err != nil {
75 return nil, err
76 }
77 defer r.Close()
78 return io.ReadAll(r)
79 case CompressGzip:
80 r, err := gzip.NewReader(bytes.NewReader(data))
81 if err != nil {
82 return nil, err
83 }
84 defer r.Close()
85 return io.ReadAll(r)
86 case CompressZstd:
87 dec, err := zstd.NewReader(bytes.NewReader(data))
88 if err != nil {
89 return nil, err
90 }
91 defer dec.Close()
92 return io.ReadAll(dec)
93 default:
94 return nil, fmt.Errorf("unsupported decompression method: %s", method)
95 }
96}
97
98// CompressBytes compresses data using the specified compression method.
99func CompressBytes(data []byte, method CompressionMethod) ([]byte, error) {
100 return Compress(data, method, 0)
101}
102
103// DecompressBytes decompresses data using the specified compression method.
104func DecompressBytes(data []byte, method CompressionMethod) ([]byte, error) {
105 return Decompress(data, method)
106}