diff target-utils/tf-breakin/mkembed.c @ 357:22c6e39e1789

target-utils/tf-breakin: build embeddable form of the payload
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Thu, 15 May 2014 09:49:30 +0000
parents
children 7166c8311b0d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/target-utils/tf-breakin/mkembed.c	Thu May 15 09:49:30 2014 +0000
@@ -0,0 +1,75 @@
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define	PAYLOAD_SIZE	112
+u_char payload_buf[PAYLOAD_SIZE];
+
+read_binary(filename)
+	char *filename;
+{
+	int fd;
+	struct stat st;
+
+	fd = open(filename, O_RDONLY);
+	if (fd < 0) {
+		perror(filename);
+		exit(1);
+	}
+	fstat(fd, &st);
+	if (!S_ISREG(st.st_mode)) {
+		fprintf(stderr, "error: %s is not a regular file\n", filename);
+		exit(1);
+	}
+	if (st.st_size != PAYLOAD_SIZE) {
+		fprintf(stderr, "error: %s size mismatch\n", filename);
+		exit(1);
+	}
+	if (read(fd, payload_buf, PAYLOAD_SIZE) != PAYLOAD_SIZE) {
+		perror("read error");
+		exit(1);
+	}
+	close(fd);
+}
+
+write_output(filename)
+	char *filename;
+{
+	FILE *of;
+	int i, j, idx;
+
+	of = fopen(filename, "w");
+	if (!of) {
+		perror(filename);
+		exit(1);
+	}
+	fprintf(of, "u_char payload[%d] = {\n", PAYLOAD_SIZE);
+	idx = 0;
+	for (i = 0; i < 14; i++) {
+		for (j = 0; j < 8; j++) {
+			if (j)
+				putc(' ', of);
+			else
+				putc('\t', of);
+			fprintf(of, "0x%02X,", payload_buf[idx++]);
+		}
+		putc('\n', of);
+	}
+	fputs("};\n", of);
+	fclose(of);
+}
+
+main(argc, argv)
+	char **argv;
+{
+	if (argc != 3) {
+		fprintf(stderr, "usage: %s payload.bin output.c\n", argv[0]);
+		exit(1);
+	}
+	read_binary(argv[1]);
+	write_output(argv[2]);
+	exit(0);
+}