Adversarial C2 Protocol Implemented in Zig
0
fork

Configure Feed

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

Cleanup and use random mac

+10 -17
+10 -17
src/Client.zig
··· 1 1 const base64Enc = std.base64.Base64Encoder.init(std.base64.standard_alphabet_chars, '='); 2 2 const base64Dec = std.base64.Base64Decoder.init(std.base64.standard_alphabet_chars, '='); 3 3 4 - const native_endian = @import("builtin").cpu.arch.endian(); 5 - 6 4 rand: Random, 7 5 writer: *std.Io.Writer, 8 6 ··· 33 31 fn broadcastInitialInterestMessage(self: *Self, msg_bytes: []u8) !void { 34 32 const writer = self.writer; 35 33 36 - const total_len = ((@bitSizeOf(EthernetHeaders) + @bitSizeOf(IpHeaders) + @bitSizeOf(UdpHeaders)) / 8) + msg_bytes.len; 34 + const total_len = @sizeOf(EthernetHeaders) + @sizeOf(IpHeaders) + @sizeOf(UdpHeaders) + msg_bytes.len; 35 + 36 + // Ensure the writer is in a valid state 37 37 std.debug.assert(writer.buffer.len >= total_len); 38 38 _ = writer.consumeAll(); 39 39 40 40 const ether_headers: EthernetHeaders = .{ 41 41 .dest_mac = .{ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff }, 42 - .src_mac = .{ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee }, 43 - // .src_mac = blk: { 44 - // var output_bytes: [6]u8 = undefined; 45 - // // const r_bytes = try writer.writableArray(6); 46 - // self.rand.bytes(&output_bytes); 47 - // break :blk output_bytes; 48 - // }, 42 + .src_mac = blk: { 43 + var output_bytes: [6]u8 = undefined; 44 + output_bytes[0] = 0xee; 45 + self.rand.bytes(output_bytes[1..]); 46 + break :blk output_bytes; 47 + }, 49 48 .ether_type = 0x0800, 50 49 }; 51 50 52 - // @compileLog((@bitSizeOf(EthernetHeaders) / 8)); 53 51 const ip_headers: IpHeaders = .{ 54 - // .ip_version = 0x4, 55 - // .header_length = 0x5, 56 52 .total_length = @intCast(total_len - 92), 57 53 .ttl = 0x64, 58 54 .protocol = 0x11, ··· 75 71 @memcpy(msg_target_bytes, msg_bytes); 76 72 var msg_target: *align(1) SaprusMessage = try .bytesAsValue(msg_target_bytes); 77 73 try msg_target.networkFromNativeEndian(); 78 - 79 - std.debug.print("bytes: {x}\n", .{writer.buffer[0..writer.end]}); 74 + std.debug.print("{x}\n", .{writer.buffer[0..writer.end]}); 80 75 try writer.flush(); 81 76 } 82 - 83 - // fn broadcastSaprusMessage(msg_bytes: []align(@alignOf(SaprusMessage)) u8) !void {} 84 77 85 78 fn broadcastSaprusMessage(msg_bytes: []u8, udp_port: u16) !void { 86 79 const msg: *align(1) SaprusMessage = try .bytesAsValue(msg_bytes);