From 453774dc91d1fc3a7119223d2dc637c1303f0e82 Mon Sep 17 00:00:00 2001 From: Khabalov Pavel Date: Tue, 30 Apr 2024 14:35:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=81=D0=B2=D0=BE=D0=B5=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tasks/reverse/server/khabalov.c | 51 +++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 tasks/reverse/server/khabalov.c diff --git a/tasks/reverse/server/khabalov.c b/tasks/reverse/server/khabalov.c new file mode 100644 index 0000000..df27d7e --- /dev/null +++ b/tasks/reverse/server/khabalov.c @@ -0,0 +1,51 @@ +#include +#include +#include +#define _GNU_SOURCE +#include + + +unsigned int MakeChecksum(unsigned char *buffer, int len) +{ + unsigned int result; + + result = 0; + for (int i = 0; i < len; i = i + 1) { + result = (result << 3 | result >> 0x1d) ^ buffer[i]; + } + + return result; +} + + +unsigned char *make_message(const unsigned char* s) { + int len = strlen(s); + unsigned char* message = (char*) calloc(1, len + 11); + + message[8] = len + 7; + message[10] = len; + + message[9] = 0x2A; + + memcpy(message + 11, s, len); + + *((unsigned int*)message + 1) = time(0LL); + + *(unsigned int*) message = MakeChecksum(message + 4, len + 7); + + return message; +} + +int main() { + unsigned char message[] = "g1mm3_th3_k3y"; + + size_t len = strlen(message); + + for (int i = 0; i < len; i++) { + message[i] ^= 42; + } + + fwrite(make_message(message), 1, strlen(message) + 11, stdout); + + return 0; +}