diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2019-10-14 08:08:25 +0200 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2019-10-14 08:08:25 +0200 |
commit | 1b1c7bfbb3bdfda23602dea887b6462a17715791 (patch) | |
tree | ebe400742b85200f53ad19dd38c83c3f47f059b4 | |
parent | 2e13536e0ba210f82ac24def1038ff73c5058b7b (diff) | |
parent | ec3f5d405ed8feacdfb86c10f9be3b91d010f0a4 (diff) |
Merge branch 'master' of ssh://git.lan:/git/tools
-rw-r--r-- | Makefile | 17 | ||||
-rw-r--r-- | ascii85.c (renamed from scrambler.c) | 0 | ||||
-rw-r--r-- | dummyshell.c | 6 | ||||
-rw-r--r-- | textify.c | 123 |
4 files changed, 138 insertions, 8 deletions
@@ -5,7 +5,7 @@ CFLAGS := -O2 -g -Wall -ffunction-sections -fdata-sections -ffast-math -fomit-fr LDFLAGS := RM := rm -rf -TARGETS := aes asciihexer dummyshell suidcmd scrambler progressbar +TARGETS := aes asciihexer dummyshell suidcmd ascii85 textify progressbar ifneq ($(strip $(MAKE_NCURSES)),) TARGETS += gol @@ -35,7 +35,14 @@ suidcmd: suidcmd.o @echo 'Finished building target: $@' @echo ' ' -scrambler: scrambler.o +ascii85: ascii85.o + @echo 'Building target: $@' + @echo 'Invoking: GCC C Linker' + $(CC) $(LDFLAGS) -o "$@" "$<" -lm + @echo 'Finished building target: $@' + @echo ' ' + +textify: textify.o @echo 'Building target: $@' @echo 'Invoking: GCC C Linker' $(CC) $(LDFLAGS) -o "$@" "$<" -lm @@ -74,9 +81,9 @@ strip: strip -s $(TARGETS) clean: - -$(RM) aes.o asciihexer.o dummyshell.o gol.o suidcmd.o scrambler.o xidle.o xdiff.o - -$(RM) aes.d asciihexer.d dummyshell.d gol.d suidcmd.d scrambler.d xidle.d xdiff.d - -$(RM) aes asciihexer dummyshell gol suidcmd scrambler xidle xdiff + -$(RM) aes.o asciihexer.o dummyshell.o gol.o suidcmd.o ascii85.o textify.o xidle.o xdiff.o + -$(RM) aes.d asciihexer.d dummyshell.d gol.d suidcmd.d scrambler.d textify.d xidle.d xdiff.d + -$(RM) aes asciihexer dummyshell gol suidcmd scrambler textify xidle xdiff -@echo ' ' install: $(TARGETS) diff --git a/dummyshell.c b/dummyshell.c index eb43206..796f7e3 100644 --- a/dummyshell.c +++ b/dummyshell.c @@ -131,7 +131,7 @@ static char readInput(char* buf, size_t* siz, size_t szMax, int key, int flags) #ifdef _HAS_CMD #define NO_ARGS 0b00000001 #define NEED_ARGS 0b00000010 -struct __attribute__((__packed__)) cmd { +struct cmd { char* name; char* path; char* defargs; @@ -264,13 +264,13 @@ static int init_msg(void) return 0; } -struct __attribute__((__packed__)) msgHdr { +struct msgHdr { uint8_t szFrom; uint8_t szMsg; uint64_t timestamp; /* works for x86 and x64 */ }; -struct __attribute__((__packed__)) msg { +struct msg { char* from; char* msg; }; diff --git a/textify.c b/textify.c new file mode 100644 index 0000000..a88de2c --- /dev/null +++ b/textify.c @@ -0,0 +1,123 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> + +#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c" +#define BYTE_TO_BINARY(byte) \ + (byte & 0x80 ? '1' : '0'), \ + (byte & 0x40 ? '1' : '0'), \ + (byte & 0x20 ? '1' : '0'), \ + (byte & 0x10 ? '1' : '0'), \ + (byte & 0x08 ? '1' : '0'), \ + (byte & 0x04 ? '1' : '0'), \ + (byte & 0x02 ? '1' : '0'), \ + (byte & 0x01 ? '1' : '0') + + +void print_binary_hex(uint8_t *bin, size_t siz) +{ + size_t i; + + for (i = 0; i < siz; ++i) { + printf("%8.02X ", bin[i]); + } + printf("\n"); + for (i = 0; i < siz; ++i) { + printf("%8.d ", bin[i]); + } + printf("\n"); + for (i = 0; i < siz; ++i) { + printf(BYTE_TO_BINARY_PATTERN " ", BYTE_TO_BINARY(bin[i])); + } + printf("\n"); +} + +ssize_t textify(uint8_t *bin, size_t siz, char *out, size_t outsiz) +{ + size_t i, j; + + if (!bin || !out) + return -1; + + for (i = 0, j = 0; i < siz && j < outsiz / 3; ++i, j += 3) { + uint8_t tmp0 = 32, tmp1 = 64, tmp2 = 64; + + if (bin[i] < 32) + tmp1 = bin[i] + 32; + else if (bin[i] >= 127) { + if (bin[i] < 190) + tmp1 = bin[i] - 63; + else + tmp2 = bin[i] - 63*2; + } else { + tmp0 = bin[i]; + } + + out[j+0] = tmp0; + out[j+1] = tmp1; + out[j+2] = tmp2; + } + + return j; +} + +ssize_t untextify(uint8_t *text, size_t siz, char *out, size_t outsiz) +{ + size_t i, j; + + if (!text || !out) + return -1; + + for (i = 0, j = 0; i < siz / 3 && j < outsiz; i += 3, ++j) { + if (text[i+1] >= 32 && text[i+1] < 64) { + out[j] = text[i+1] - 32; + } else if (text[i+1] >= 64 && text[i+1] < 96) { + out[j] = text[i+1] + 63; + } else if (text[i+2] >= 96 && text[i+1] < 127) { + out[j] = text[i+2] + 63*2; + } + } + + return j; +} + +int main(int argc, char **argv) +{ + ssize_t ret; + char outbuf[BUFSIZ] = {0}; + char orgbuf[BUFSIZ] = {0}; + + if (argc != 2) { + printf("usage: %s [DATA]\n", argv[0]); + return 1; + } + + print_binary_hex((uint8_t *)argv[1], strnlen(argv[1], BUFSIZ)); + printf("\n"); + + ret = textify((uint8_t *)argv[1], strnlen(argv[1], sizeof outbuf / 3), + outbuf, sizeof outbuf); + if (ret < 0) + { + printf("%s: textify failed\n", argv[0]); + return 1; + } + + print_binary_hex((uint8_t *)outbuf, ret); + outbuf[BUFSIZ-1] = 0; + printf("%s result: '%s'\n\n", argv[0], outbuf); + + ret = untextify((uint8_t *)outbuf, ret, orgbuf, sizeof orgbuf); + if (ret < 0) + { + printf("%s: untextify failed\n", outbuf); + return 1; + } + + print_binary_hex((uint8_t *) orgbuf, ret); + orgbuf[BUFSIZ-1] = 0; + printf("%s result: '%s'\n", argv[0], orgbuf); + + return 0; +} |