Home/Blog/Software Protection
Software ProtectionJuly 17, 202612 min read

Server-Side String Decryption in C++: Using qpapel::FetchString() to Eliminate Hardcoded Secrets

Learn how to fetch public and protected server-side strings dynamically using qpapel::FetchString(), 12-digit access IDs, and SDK memory management with qpapel::FreeString().

1. Eliminating Plaintext Strings in C++#

Hardcoding sensitive strings inside C++ executables allows reverse engineers to extract them using IDA Pro or strings. With qPapel Server-Side Strings, secrets are stored encrypted on PapelShip servers and fetched into RAM using a 12-digit Access ID. The API signature is:

cpp
char* FetchString(QPCTX c, const char* stringId, const char* licenseKey);
  • stringId: 12-digit access ID from your dashboard (e.g. 123456789012).
  • licenseKey: Required for protected strings, or "" for public strings.

2. C++ Usage: Public vs. Protected Strings#

cpp
#include <iostream>
#include "qPapelLib.h"

#pragma comment(lib, "qPapelLib.lib")
#pragma comment(lib, "libsodium.lib")

void FetchConfiguration(QPCTX ctx, const std::string& userKey) {
    // Public string (no key required)
    char* welcome = qpapel::FetchString(ctx, "123456789012", "");
    if (welcome) {
        std::cout << "[Public]: " << welcome << std::endl;
        qpapel::FreeString(welcome);
    }

    // Protected string (key required)
    char* secret = qpapel::FetchString(ctx, "987654321098", userKey.c_str());
    if (secret) {
        std::cout << "[Protected]: " << secret << std::endl;
        qpapel::FreeString(secret);
    } else {
        char* err = qpapel::GetLastStatus(ctx);
        std::cerr << "[Error]: " << (err ? err : "Access Denied") << std::endl;
        if (err) qpapel::FreeString(err);
    }
}

> Warning: The returned char* buffer is dynamically allocated by the SDK. You must call qpapel::FreeString(value) when done to prevent memory leaks.


3. Use Cases#

  • Feature Flags: Fetch "true" or "false" strings to enable/disable features server-side without releasing new builds.
  • API Endpoints: Store backend URLs encrypted so they never appear in disk-resident binaries.
  • Dynamic Config: Push JSON configuration to clients at runtime.

Explore Server-Side Strings.

PapelShip C++ & C# Software Protection

Protect Your C++ / C# Executables & Automate Sales

Launch your storefront, enforce HWID key activation, and accept non-custodial crypto checkout with PapelShip.

Tags:#FetchString#Server-Side Strings#C++#qPapelLib#Security