Adversarial C2 Protocol Implemented in Zig
0
fork

Configure Feed

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

+46 -35
+46 -35
src/Client.zig
··· 33 33 fn broadcastInitialInterestMessage(self: *Self, msg_bytes: []align(@alignOf(SaprusMessage)) u8) !void { 34 34 const writer = self.writer; 35 35 36 - const EthernetHeaders = packed struct { 37 - dest_mac: @Vector(6, u8), 36 + // const EthernetHeaders = packed struct { 37 + // dest_mac: @Vector(6, u8), 38 38 39 - src_mac: @Vector(6, u8), 39 + // src_mac: @Vector(6, u8), 40 40 41 - ether_type: u16, 42 - }; 41 + // ether_type: u16, 42 + // }; 43 43 44 44 const IpHeaders = packed struct { 45 - ip_version: u4, 46 - header_length: u4 = 0, 45 + _: u8 = 0x45, 46 + // ip_version: u4, 47 + // header_length: u4 = 0, 47 48 type_of_service: u8 = 0, 48 - total_length: u16, 49 + total_length: u16 = 0x04, 49 50 50 51 identification: u16 = 0, 51 - ethernet_flags: u3 = 0, 52 - fragment_offset: u13 = 0, 52 + __: u16 = 0x0, 53 + // ethernet_flags: u3 = 0, 54 + // fragment_offset: u13 = 0, 53 55 ttl: u8 = 0, 54 56 protocol: u8 = 0, 55 57 ··· 67 69 checksum: @Vector(2, u8) = .{ 0, 0 }, 68 70 }; 69 71 70 - const total_len = (@bitSizeOf(UdpHeaders) / 8) + msg_bytes.len; 72 + // const total_len = ((@bitSizeOf(IpHeaders) + @bitSizeOf(UdpHeaders)) / 8) + msg_bytes.len; 73 + const total_len = 130; 71 74 std.debug.assert(writer.buffer.len >= total_len); 72 75 _ = writer.consumeAll(); 73 76 74 - var ether_headers: EthernetHeaders = .{ 75 - .dest_mac = .{ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff }, 76 - // .src_mac = .{ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee }, 77 - .src_mac = blk: { 78 - var output_bytes: [6]u8 = undefined; 79 - // const r_bytes = try writer.writableArray(6); 80 - self.rand.bytes(&output_bytes); 81 - break :blk output_bytes; 82 - }, 83 - .ether_type = 0x0800, 84 - }; 77 + // var ether_headers: EthernetHeaders = .{ 78 + // .dest_mac = .{ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff }, 79 + // // .src_mac = .{ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee }, 80 + // .src_mac = blk: { 81 + // var output_bytes: [6]u8 = undefined; 82 + // // const r_bytes = try writer.writableArray(6); 83 + // self.rand.bytes(&output_bytes); 84 + // break :blk output_bytes; 85 + // }, 86 + // .ether_type = 0x0800, 87 + // }; 85 88 86 - const ip_headers: IpHeaders = .{ 87 - .ip_version = 0x4, 88 - .header_length = 0x5, 89 - .total_length = @intCast(total_len - 8), // 8 is the ethernet frame length (macs + type) 89 + var ip_headers: IpHeaders = .{ 90 + // .ip_version = 0x4, 91 + // .header_length = 0x5, 92 + // .total_length = 130, //@intCast(total_len - 8), // 8 is the ethernet frame length (macs + type) 93 + .total_length = 0x00, 94 + .ttl = 0x64, 90 95 .protocol = 0x11, 91 - .src_ip = .{ 0, 0, 0, 0 }, 92 - .dest_ip = .{ 0, 0, 0, 0 }, 96 + .src_ip = .{ 0xff, 0x02, 0x03, 0x04 }, 97 + .dest_ip = .{ 0xff, 0xff, 0xff, 0xff }, 93 98 }; 94 99 95 - const udp_headers: UdpHeaders = .{ 96 - .src_port = .{ 0, 0 }, 100 + var udp_headers: UdpHeaders = .{ 101 + .src_port = .{ 0, 0x01 }, 97 102 .dest_port = .{ 0xb8, 0x22 }, 98 103 .length = @intCast(msg_bytes.len), 99 104 }; 100 - _ = ip_headers; 101 - _ = udp_headers; 102 - _ = &ether_headers; 105 + _ = &ip_headers; 106 + _ = &udp_headers; 107 + // _ = &ether_headers; 103 108 104 109 // _ = try writer.write(&@as([@bitSizeOf(UdpHeaders) / 8]u8, @bitCast(headers))); 105 110 106 - std.mem.byteSwapAllFields(EthernetHeaders, &ether_headers); 107 - try writer.writeStruct(ether_headers, native_endian); 111 + // std.mem.byteSwapAllFields(EthernetHeaders, &ether_headers); 112 + // try writer.writeStruct(ether_headers, native_endian); 113 + 114 + std.mem.byteSwapAllFields(IpHeaders, &ip_headers); 115 + try writer.writeStruct(ip_headers, native_endian); 116 + 117 + // std.mem.byteSwapAllFields(UdpHeaders, &udp_headers); 118 + // try writer.writeStruct(udp_headers, native_endian); 108 119 109 120 // // Ensure buffer is large enough 110 121 // std.debug.assert(writer.buffer.len > 38 + msg_bytes.len);