The warp tunnel is letting people past our firewall!
File link: warp
Run warp
with sudo, use bpftool to dump info:
# https://docs.cilium.io/en/latest/reference-guides/bpf/debug_and_test.html
$ sudo bpftool prog
988: xdp name xdp_prog tag xxxxxxxxxxxxxxxx
loaded_at xxxxxxxxxxxxxxxxxxxxxxxx uid 0
xlated 3264B jited 1922B memlock 4096B map_ids 158,159
btf_id 293
$ sudo bpftool prog dump xlated id 988
int xdp_prog(struct xdp_md * ctx):
; void *data_end = (void *)(long)ctx->data_end;
0: (79) r7 = *(u64 *)(r1 +8)
; void *data = (void *)(long)ctx->data;
1: (79) r1 = *(u64 *)(r1 +0)
; if (data + sizeof(struct ethhdr) > data_end)
2: (bf) r6 = r1
3: (07) r6 += 14
; if (data + sizeof(struct ethhdr) > data_end)
4: (2d) if r6 > r7 goto pc+401
5: (bf) r2 = r1
6: (07) r2 += 34
; if (h_proto != 0x0800)
7: (2d) if r2 > r7 goto pc+398
8: (69) r2 = *(u16 *)(r1 +12)
9: (55) if r2 != 0x8 goto pc+396
; u32 ip_header_len = ip->ihl * 4;
10: (71) r2 = *(u8 *)(r6 +0)
; u32 ip_header_len = ip->ihl * 4;
11: (67) r2 <<= 2
12: (57) r2 &= 60
13: (b7) r3 = 20
; if (ip_header_len < sizeof(struct iphdr))
14: (2d) if r3 > r2 goto pc+391
; if (ip->protocol == IPPROTO_UDP) {
15: (71) r1 = *(u8 *)(r1 +23)
; if (ip->protocol == IPPROTO_UDP) {
16: (15) if r1 == 0x6 goto pc+4
17: (55) if r1 != 0x11 goto pc+388
; struct udphdr *udp = (void *)ip + ip_header_len;
18: (0f) r6 += r2
; payload = (void *)(udp + 1);
19: (07) r6 += 8
; } else if (ip->protocol == IPPROTO_TCP) {
20: (05) goto pc+10
; struct tcphdr *tcp = (void *)ip + ip_header_len;
21: (0f) r6 += r2
; if ((void *)(tcp + 1) > data_end)
22: (bf) r1 = r6
23: (07) r1 += 20
; if ((void *)(tcp + 1) > data_end)
24: (2d) if r1 > r7 goto pc+381
; __u32 tcp_hdr_len = tcp->doff * 4;
25: (69) r1 = *(u16 *)(r6 +12)
; __u32 tcp_hdr_len = tcp->doff * 4;
26: (77) r1 >>= 2
27: (57) r1 &= 60
; if (tcp_hdr_len < sizeof(struct tcphdr))
28: (0f) r6 += r1
29: (b7) r2 = 20
30: (2d) if r2 > r1 goto pc+375
; if (payload + prefix_size > data_end)
31: (bf) r8 = r6
32: (07) r8 += 4
; if (payload + prefix_size > data_end)
33: (2d) if r8 > r7 goto pc+372
; if (__builtin_memcmp(payload, prefix, prefix_size) != 0)
34: (71) r1 = *(u8 *)(r6 +1)
35: (67) r1 <<= 8
36: (71) r2 = *(u8 *)(r6 +0)
37: (4f) r1 |= r2
38: (71) r2 = *(u8 *)(r6 +2)
39: (67) r2 <<= 16
40: (71) r3 = *(u8 *)(r6 +3)
41: (67) r3 <<= 24
42: (4f) r3 |= r2
43: (4f) r3 |= r1
; if (__builtin_memcmp(payload, prefix, prefix_size) != 0)
44: (55) if r3 != 0x70723457 goto pc+361
; struct event *e = bpf_ringbuf_reserve(&rb, sizeof(*e), 0);
45: (18) r1 = map[id:149]
47: (b7) r2 = 33
48: (b7) r3 = 0
49: (85) call bpf_ringbuf_reserve#309632
; if (!e)
50: (15) if r0 == 0x0 goto pc+355
; if (event_data + i >= data_end)
51: (3d) if r8 >= r7 goto pc+156
; e->text[i] = ((char *)event_data)[i];
52: (71) r1 = *(u8 *)(r6 +4)
; e->text[i] = ((char *)event_data)[i];
53: (73) *(u8 *)(r0 +0) = r1
; if (event_data + i >= data_end)
54: (bf) r1 = r6
55: (07) r1 += 5
; if (event_data + i >= data_end)
56: (3d) if r1 >= r7 goto pc+151
; e->text[i] = ((char *)event_data)[i];
57: (71) r1 = *(u8 *)(r6 +5)
; e->text[i] = ((char *)event_data)[i];
58: (73) *(u8 *)(r0 +1) = r1
; if (event_data + i >= data_end)
59: (bf) r1 = r6
60: (07) r1 += 6
; if (event_data + i >= data_end)
61: (3d) if r1 >= r7 goto pc+146
; e->text[i] = ((char *)event_data)[i];
62: (71) r1 = *(u8 *)(r6 +6)
; e->text[i] = ((char *)event_data)[i];
63: (73) *(u8 *)(r0 +2) = r1
; if (event_data + i >= data_end)
64: (bf) r1 = r6
65: (07) r1 += 7
; if (event_data + i >= data_end)
66: (3d) if r1 >= r7 goto pc+141
; e->text[i] = ((char *)event_data)[i];
67: (71) r1 = *(u8 *)(r6 +7)
; e->text[i] = ((char *)event_data)[i];
68: (73) *(u8 *)(r0 +3) = r1
; if (event_data + i >= data_end)
69: (bf) r1 = r6
70: (07) r1 += 8
; if (event_data + i >= data_end)
71: (3d) if r1 >= r7 goto pc+136
; e->text[i] = ((char *)event_data)[i];
72: (71) r1 = *(u8 *)(r6 +8)
; e->text[i] = ((char *)event_data)[i];
73: (73) *(u8 *)(r0 +4) = r1
; if (event_data + i >= data_end)
74: (bf) r1 = r6
75: (07) r1 += 9
; if (event_data + i >= data_end)
76: (3d) if r1 >= r7 goto pc+131
; e->text[i] = ((char *)event_data)[i];
77: (71) r1 = *(u8 *)(r6 +9)
; e->text[i] = ((char *)event_data)[i];
78: (73) *(u8 *)(r0 +5) = r1
; if (event_data + i >= data_end)
79: (bf) r1 = r6
80: (07) r1 += 10
; if (event_data + i >= data_end)
81: (3d) if r1 >= r7 goto pc+126
; e->text[i] = ((char *)event_data)[i];
82: (71) r1 = *(u8 *)(r6 +10)
; e->text[i] = ((char *)event_data)[i];
83: (73) *(u8 *)(r0 +6) = r1
; if (event_data + i >= data_end)
84: (bf) r1 = r6
85: (07) r1 += 11
; if (event_data + i >= data_end)
86: (3d) if r1 >= r7 goto pc+121
; e->text[i] = ((char *)event_data)[i];
87: (71) r1 = *(u8 *)(r6 +11)
; e->text[i] = ((char *)event_data)[i];
88: (73) *(u8 *)(r0 +7) = r1
; if (event_data + i >= data_end)
89: (bf) r1 = r6
90: (07) r1 += 12
; if (event_data + i >= data_end)
91: (3d) if r1 >= r7 goto pc+116
; e->text[i] = ((char *)event_data)[i];
92: (71) r1 = *(u8 *)(r6 +12)
; e->text[i] = ((char *)event_data)[i];
93: (73) *(u8 *)(r0 +8) = r1
; if (event_data + i >= data_end)
94: (bf) r1 = r6
95: (07) r1 += 13
; if (event_data + i >= data_end)
96: (3d) if r1 >= r7 goto pc+111
; e->text[i] = ((char *)event_data)[i];
97: (71) r1 = *(u8 *)(r6 +13)
; e->text[i] = ((char *)event_data)[i];
98: (73) *(u8 *)(r0 +9) = r1
; if (event_data + i >= data_end)
99: (bf) r1 = r6
100: (07) r1 += 14
; if (event_data + i >= data_end)
101: (3d) if r1 >= r7 goto pc+106
; e->text[i] = ((char *)event_data)[i];
102: (71) r1 = *(u8 *)(r6 +14)
; e->text[i] = ((char *)event_data)[i];
103: (73) *(u8 *)(r0 +10) = r1
; if (event_data + i >= data_end)
104: (bf) r1 = r6
105: (07) r1 += 15
; if (event_data + i >= data_end)
106: (3d) if r1 >= r7 goto pc+101
; e->text[i] = ((char *)event_data)[i];
107: (71) r1 = *(u8 *)(r6 +15)
; e->text[i] = ((char *)event_data)[i];
108: (73) *(u8 *)(r0 +11) = r1
; if (event_data + i >= data_end)
109: (bf) r1 = r6
110: (07) r1 += 16
; if (event_data + i >= data_end)
111: (3d) if r1 >= r7 goto pc+96
; e->text[i] = ((char *)event_data)[i];
112: (71) r1 = *(u8 *)(r6 +16)
; e->text[i] = ((char *)event_data)[i];
113: (73) *(u8 *)(r0 +12) = r1
; if (event_data + i >= data_end)
114: (bf) r1 = r6
115: (07) r1 += 17
; if (event_data + i >= data_end)
116: (3d) if r1 >= r7 goto pc+91
; e->text[i] = ((char *)event_data)[i];
117: (71) r1 = *(u8 *)(r6 +17)
; e->text[i] = ((char *)event_data)[i];
118: (73) *(u8 *)(r0 +13) = r1
; if (event_data + i >= data_end)
119: (bf) r1 = r6
120: (07) r1 += 18
; if (event_data + i >= data_end)
121: (3d) if r1 >= r7 goto pc+86
; e->text[i] = ((char *)event_data)[i];
122: (71) r1 = *(u8 *)(r6 +18)
; e->text[i] = ((char *)event_data)[i];
123: (73) *(u8 *)(r0 +14) = r1
; if (event_data + i >= data_end)
124: (bf) r1 = r6
125: (07) r1 += 19
; if (event_data + i >= data_end)
126: (3d) if r1 >= r7 goto pc+81
; e->text[i] = ((char *)event_data)[i];
127: (71) r1 = *(u8 *)(r6 +19)
; e->text[i] = ((char *)event_data)[i];
128: (73) *(u8 *)(r0 +15) = r1
; if (event_data + i >= data_end)
129: (bf) r1 = r6
130: (07) r1 += 20
; if (event_data + i >= data_end)
131: (3d) if r1 >= r7 goto pc+76
; e->text[i] = ((char *)event_data)[i];
132: (71) r1 = *(u8 *)(r6 +20)
; e->text[i] = ((char *)event_data)[i];
133: (73) *(u8 *)(r0 +16) = r1
; if (event_data + i >= data_end)
134: (bf) r1 = r6
135: (07) r1 += 21
; if (event_data + i >= data_end)
136: (3d) if r1 >= r7 goto pc+71
; e->text[i] = ((char *)event_data)[i];
137: (71) r1 = *(u8 *)(r6 +21)
; e->text[i] = ((char *)event_data)[i];
138: (73) *(u8 *)(r0 +17) = r1
; if (event_data + i >= data_end)
139: (bf) r1 = r6
140: (07) r1 += 22
; if (event_data + i >= data_end)
141: (3d) if r1 >= r7 goto pc+66
; e->text[i] = ((char *)event_data)[i];
142: (71) r1 = *(u8 *)(r6 +22)
; e->text[i] = ((char *)event_data)[i];
143: (73) *(u8 *)(r0 +18) = r1
; if (event_data + i >= data_end)
144: (bf) r1 = r6
145: (07) r1 += 23
; if (event_data + i >= data_end)
146: (3d) if r1 >= r7 goto pc+61
; e->text[i] = ((char *)event_data)[i];
147: (71) r1 = *(u8 *)(r6 +23)
; e->text[i] = ((char *)event_data)[i];
148: (73) *(u8 *)(r0 +19) = r1
; if (event_data + i >= data_end)
149: (bf) r1 = r6
150: (07) r1 += 24
; if (event_data + i >= data_end)
151: (3d) if r1 >= r7 goto pc+56
; e->text[i] = ((char *)event_data)[i];
152: (71) r1 = *(u8 *)(r6 +24)
; e->text[i] = ((char *)event_data)[i];
153: (73) *(u8 *)(r0 +20) = r1
; if (event_data + i >= data_end)
154: (bf) r1 = r6
155: (07) r1 += 25
; if (event_data + i >= data_end)
156: (3d) if r1 >= r7 goto pc+51
; e->text[i] = ((char *)event_data)[i];
157: (71) r1 = *(u8 *)(r6 +25)
; e->text[i] = ((char *)event_data)[i];
158: (73) *(u8 *)(r0 +21) = r1
; if (event_data + i >= data_end)
159: (bf) r1 = r6
160: (07) r1 += 26
; if (event_data + i >= data_end)
161: (3d) if r1 >= r7 goto pc+46
; e->text[i] = ((char *)event_data)[i];
162: (71) r1 = *(u8 *)(r6 +26)
; e->text[i] = ((char *)event_data)[i];
163: (73) *(u8 *)(r0 +22) = r1
; if (event_data + i >= data_end)
164: (bf) r1 = r6
165: (07) r1 += 27
; if (event_data + i >= data_end)
166: (3d) if r1 >= r7 goto pc+41
; e->text[i] = ((char *)event_data)[i];
167: (71) r1 = *(u8 *)(r6 +27)
; e->text[i] = ((char *)event_data)[i];
168: (73) *(u8 *)(r0 +23) = r1
; if (event_data + i >= data_end)
169: (bf) r1 = r6
170: (07) r1 += 28
; if (event_data + i >= data_end)
171: (3d) if r1 >= r7 goto pc+36
; e->text[i] = ((char *)event_data)[i];
172: (71) r1 = *(u8 *)(r6 +28)
; e->text[i] = ((char *)event_data)[i];
173: (73) *(u8 *)(r0 +24) = r1
; if (event_data + i >= data_end)
174: (bf) r1 = r6
175: (07) r1 += 29
; if (event_data + i >= data_end)
176: (3d) if r1 >= r7 goto pc+31
; e->text[i] = ((char *)event_data)[i];
177: (71) r1 = *(u8 *)(r6 +29)
; e->text[i] = ((char *)event_data)[i];
178: (73) *(u8 *)(r0 +25) = r1
; if (event_data + i >= data_end)
179: (bf) r1 = r6
180: (07) r1 += 30
; if (event_data + i >= data_end)
181: (3d) if r1 >= r7 goto pc+26
; e->text[i] = ((char *)event_data)[i];
182: (71) r1 = *(u8 *)(r6 +30)
; e->text[i] = ((char *)event_data)[i];
183: (73) *(u8 *)(r0 +26) = r1
; if (event_data + i >= data_end)
184: (bf) r1 = r6
185: (07) r1 += 31
; if (event_data + i >= data_end)
186: (3d) if r1 >= r7 goto pc+21
; e->text[i] = ((char *)event_data)[i];
187: (71) r1 = *(u8 *)(r6 +31)
; e->text[i] = ((char *)event_data)[i];
188: (73) *(u8 *)(r0 +27) = r1
; if (event_data + i >= data_end)
189: (bf) r1 = r6
190: (07) r1 += 32
; if (event_data + i >= data_end)
191: (3d) if r1 >= r7 goto pc+16
; e->text[i] = ((char *)event_data)[i];
192: (71) r1 = *(u8 *)(r6 +32)
; e->text[i] = ((char *)event_data)[i];
193: (73) *(u8 *)(r0 +28) = r1
; if (event_data + i >= data_end)
194: (bf) r1 = r6
195: (07) r1 += 33
; if (event_data + i >= data_end)
196: (3d) if r1 >= r7 goto pc+11
; e->text[i] = ((char *)event_data)[i];
197: (71) r1 = *(u8 *)(r6 +33)
; e->text[i] = ((char *)event_data)[i];
198: (73) *(u8 *)(r0 +29) = r1
; if (event_data + i >= data_end)
199: (bf) r1 = r6
200: (07) r1 += 34
; if (event_data + i >= data_end)
201: (3d) if r1 >= r7 goto pc+6
; e->text[i] = ((char *)event_data)[i];
202: (71) r1 = *(u8 *)(r6 +34)
; e->text[i] = ((char *)event_data)[i];
203: (73) *(u8 *)(r0 +30) = r1
; if (event_data + i >= data_end)
204: (07) r6 += 35
; if (event_data + i >= data_end)
205: (3d) if r6 >= r7 goto pc+2
; e->text[i] = ((char *)event_data)[i];
206: (71) r1 = *(u8 *)(r6 +0)
; e->text[i] = ((char *)event_data)[i];
207: (73) *(u8 *)(r0 +31) = r1
208: (b7) r1 = 0
209: (b7) r2 = 33
210: (05) goto pc+51
211: (0f) r3 += r1
212: (73) *(u8 *)(r3 +0) = r4
; for (int i = 0; i < sizeof(check); i++) {
213: (07) r1 += 1
; for (int i = 0; i < sizeof(check); i++) {
214: (55) if r1 != 0x1e goto pc+47
; if (__builtin_memcmp(e->text, f.text, sizeof(check)) == 0) {
215: (71) r2 = *(u8 *)(r10 -28)
216: (67) r2 <<= 8
217: (71) r1 = *(u8 *)(r10 -29)
218: (4f) r2 |= r1
219: (71) r3 = *(u8 *)(r10 -27)
220: (67) r3 <<= 16
221: (71) r1 = *(u8 *)(r10 -26)
222: (67) r1 <<= 24
223: (4f) r1 |= r3
224: (71) r4 = *(u8 *)(r10 -32)
225: (67) r4 <<= 8
226: (71) r3 = *(u8 *)(r10 -33)
227: (4f) r4 |= r3
228: (71) r5 = *(u8 *)(r10 -31)
229: (67) r5 <<= 16
230: (71) r3 = *(u8 *)(r10 -30)
231: (67) r3 <<= 24
232: (4f) r3 |= r5
233: (4f) r3 |= r4
234: (4f) r1 |= r2
235: (71) r4 = *(u8 *)(r0 +1)
236: (67) r4 <<= 8
237: (71) r2 = *(u8 *)(r0 +0)
238: (4f) r4 |= r2
239: (71) r5 = *(u8 *)(r0 +2)
240: (67) r5 <<= 16
241: (71) r2 = *(u8 *)(r0 +3)
242: (67) r2 <<= 24
243: (4f) r2 |= r5
244: (67) r1 <<= 32
245: (4f) r1 |= r3
246: (4f) r2 |= r4
247: (71) r3 = *(u8 *)(r0 +5)
248: (67) r3 <<= 8
249: (71) r4 = *(u8 *)(r0 +4)
250: (4f) r3 |= r4
251: (71) r4 = *(u8 *)(r0 +6)
252: (67) r4 <<= 16
253: (71) r5 = *(u8 *)(r0 +7)
254: (67) r5 <<= 24
255: (4f) r5 |= r4
256: (4f) r5 |= r3
257: (67) r5 <<= 32
258: (4f) r5 |= r2
259: (1d) if r5 == r1 goto pc+18
260: (b7) r1 = 1
261: (05) goto pc+137
262: (bf) r3 = r10
263: (07) r3 += -33
; f->text[i] = check[i] ^ 0x60;
264: (18) r4 = map[id:148][0]+16
266: (0f) r4 += r1
267: (71) r4 = *(u8 *)(r4 +0)
; f->text[i] = check[i] ^ 0x60;
268: (a7) r4 ^= 96
269: (67) r4 <<= 56
270: (c7) r4 s>>= 56
; if (f->text[i] >= 33 && f->text[i] <= 126) {
271: (6d) if r2 s> r4 goto pc-61
; f->text[i] = 33 + ((f->text[i] + 14) % 94u);
272: (07) r4 += 14
273: (67) r4 <<= 32
274: (77) r4 >>= 32
; f->text[i] = 33 + ((f->text[i] + 14) % 94u);
275: (97) r4 %= 94
; f->text[i] = 33 + ((f->text[i] + 14) % 94u);
276: (07) r4 += 33
277: (05) goto pc-67
; if (__builtin_memcmp(e->text, f.text, sizeof(check)) == 0) {
278: (71) r2 = *(u8 *)(r10 -20)
279: (67) r2 <<= 8
280: (71) r1 = *(u8 *)(r10 -21)
281: (4f) r2 |= r1
282: (71) r3 = *(u8 *)(r10 -19)
283: (67) r3 <<= 16
284: (71) r1 = *(u8 *)(r10 -18)
285: (67) r1 <<= 24
286: (4f) r1 |= r3
287: (71) r4 = *(u8 *)(r10 -24)
288: (67) r4 <<= 8
289: (71) r3 = *(u8 *)(r10 -25)
290: (4f) r4 |= r3
291: (71) r5 = *(u8 *)(r10 -23)
292: (67) r5 <<= 16
293: (71) r3 = *(u8 *)(r10 -22)
294: (67) r3 <<= 24
295: (4f) r3 |= r5
296: (4f) r3 |= r4
297: (4f) r1 |= r2
298: (71) r4 = *(u8 *)(r0 +9)
299: (67) r4 <<= 8
300: (71) r2 = *(u8 *)(r0 +8)
301: (4f) r4 |= r2
302: (71) r5 = *(u8 *)(r0 +10)
303: (67) r5 <<= 16
304: (71) r2 = *(u8 *)(r0 +11)
305: (67) r2 <<= 24
306: (4f) r2 |= r5
307: (67) r1 <<= 32
308: (4f) r1 |= r3
309: (4f) r2 |= r4
310: (71) r3 = *(u8 *)(r0 +13)
311: (67) r3 <<= 8
312: (71) r4 = *(u8 *)(r0 +12)
313: (4f) r3 |= r4
314: (71) r4 = *(u8 *)(r0 +14)
315: (67) r4 <<= 16
316: (71) r5 = *(u8 *)(r0 +15)
317: (67) r5 <<= 24
318: (4f) r5 |= r4
319: (4f) r5 |= r3
320: (67) r5 <<= 32
321: (4f) r5 |= r2
322: (5d) if r5 != r1 goto pc-63
323: (71) r2 = *(u8 *)(r10 -12)
324: (67) r2 <<= 8
325: (71) r1 = *(u8 *)(r10 -13)
326: (4f) r2 |= r1
327: (71) r3 = *(u8 *)(r10 -11)
328: (67) r3 <<= 16
329: (71) r1 = *(u8 *)(r10 -10)
330: (67) r1 <<= 24
331: (4f) r1 |= r3
332: (71) r4 = *(u8 *)(r10 -16)
333: (67) r4 <<= 8
334: (71) r3 = *(u8 *)(r10 -17)
335: (4f) r4 |= r3
336: (71) r5 = *(u8 *)(r10 -15)
337: (67) r5 <<= 16
338: (71) r3 = *(u8 *)(r10 -14)
339: (67) r3 <<= 24
340: (4f) r3 |= r5
341: (4f) r3 |= r4
342: (4f) r1 |= r2
343: (71) r4 = *(u8 *)(r0 +17)
344: (67) r4 <<= 8
345: (71) r2 = *(u8 *)(r0 +16)
346: (4f) r4 |= r2
347: (71) r5 = *(u8 *)(r0 +18)
348: (67) r5 <<= 16
349: (71) r2 = *(u8 *)(r0 +19)
350: (67) r2 <<= 24
351: (4f) r2 |= r5
352: (67) r1 <<= 32
353: (4f) r1 |= r3
354: (4f) r2 |= r4
355: (71) r3 = *(u8 *)(r0 +21)
356: (67) r3 <<= 8
357: (71) r4 = *(u8 *)(r0 +20)
358: (4f) r3 |= r4
359: (71) r4 = *(u8 *)(r0 +22)
360: (67) r4 <<= 16
361: (71) r5 = *(u8 *)(r0 +23)
362: (67) r5 <<= 24
363: (4f) r5 |= r4
364: (4f) r5 |= r3
365: (67) r5 <<= 32
366: (4f) r5 |= r2
367: (5d) if r5 != r1 goto pc-108
368: (71) r2 = *(u8 *)(r10 -8)
369: (67) r2 <<= 8
370: (71) r1 = *(u8 *)(r10 -9)
371: (4f) r2 |= r1
372: (71) r3 = *(u8 *)(r10 -7)
373: (67) r3 <<= 16
374: (71) r1 = *(u8 *)(r10 -6)
375: (67) r1 <<= 24
376: (4f) r1 |= r3
377: (4f) r1 |= r2
378: (71) r2 = *(u8 *)(r0 +25)
379: (67) r2 <<= 8
380: (71) r3 = *(u8 *)(r0 +24)
381: (4f) r2 |= r3
382: (71) r3 = *(u8 *)(r0 +26)
383: (67) r3 <<= 16
384: (71) r4 = *(u8 *)(r0 +27)
385: (67) r4 <<= 24
386: (4f) r4 |= r3
387: (4f) r4 |= r2
388: (5d) if r4 != r1 goto pc-129
389: (71) r2 = *(u8 *)(r10 -4)
390: (67) r2 <<= 8
391: (71) r1 = *(u8 *)(r10 -5)
392: (4f) r2 |= r1
393: (71) r1 = *(u8 *)(r0 +28)
394: (71) r3 = *(u8 *)(r0 +29)
395: (67) r3 <<= 8
396: (4f) r3 |= r1
397: (b7) r1 = 0
398: (5d) if r3 != r2 goto pc-139
399: (b7) r2 = 1
; if (__builtin_memcmp(e->text, f.text, sizeof(check)) == 0) {
400: (15) if r1 == 0x0 goto pc+1
401: (b7) r2 = 0
402: (73) *(u8 *)(r0 +32) = r2
; bpf_ringbuf_submit(e, 0);
403: (bf) r1 = r0
404: (b7) r2 = 0
405: (85) call bpf_ringbuf_submit#311184
; }
406: (b7) r0 = 2
407: (95) exit
$ sudo /sbin/bpftool map dump id 159
key:
00 00 00 00
value:
57 34 72 70 00 00 00 00 00 00 00 00 00 00 00 00
24 26 5f 2c 5f 3f 5f 50 58 21 00 50 11 41 15 50
54 20 55 56 50 58 3f 50 53 23 23 23 23 2e
Found 1 element
We can see there is logic that processes data from the map:
if (__builtin_memcmp(e->text, f.text, sizeof(check)) == 0) {
f->text[i] = check[i] ^ 0x60;
if (f->text[i] >= 33 && f->text[i] <= 126) {
f->text[i] = 33 + ((f->text[i] + 14) % 94u);
bpf_ringbuf_submit(e, 0);
}
}
Solve script in python:
b = bytes.fromhex("""24 26 5f 2c 5f 3f 5f 50 58 21 00 50 11 41 15 50
54 20 55 56 50 58 3f 50 53 23 23 23 23 2e
""")
s = bytes([ch ^ 0x60 for ch in b])
for ch in s:
if ch >= 33 and ch <= 126:
print(chr(33 + (ch + 14) % 94), end="")
else:
print(chr(ch), end="")
Flag: sun{n0n_gp1_BPF_code_g0_brrrr}
.