Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Kami Boleh Mengelirukan Rentetan yang Terbenam dalam Binari Boleh Laksana dengan Berkesan?

Bagaimanakah Kami Boleh Mengelirukan Rentetan yang Terbenam dalam Binari Boleh Laksana dengan Berkesan?

Mary-Kate Olsen
Lepaskan: 2024-12-01 18:27:15
asal
577 orang telah melayarinya

How Can We Effectively Obfuscate Strings Embedded in Executable Binaries?

Mengelirukan Rentetan dalam Kod Binari

Pernyataan Masalah

Mengeburkan rentetan yang dibenamkan dalam binari boleh laku adalah berharga untuk melindungi maklumat sensitif seperti kunci capaian yang disulitkan daripada tanpa kebenaran. Walau bagaimanapun, kaedah mudah seperti menyimpan rentetan dalam tatasusunan aksara boleh mendedahkan kandungannya dengan mudah semasa analisis.

Penyelesaian

Untuk menyembunyikan rentetan secara berkesan dalam binari yang disusun, pendekatan yang lebih canggih boleh digunakan. Pertimbangkan contoh berikut:

#include "HideString.h"

DEFINE_HIDDEN_STRING(EncryptionKey, 0x7f, ('M')('y')(' ')('s')('t')('r')('o')('n')('g')(' ')('e')('n')('c')('r')('y')('p')('t')('i')('o')('n')(' ')('k')('e')('y'))
DEFINE_HIDDEN_STRING(EncryptionKey2, 0x27, ('T')('e')('s')('t'))

int main()
{
    std::cout << GetEncryptionKey() << std::endl;
    std::cout << GetEncryptionKey2() << std::endl;

    return 0;
}
Salin selepas log masuk

Kod ini menggabungkan makro tersuai, "DEFINE_HIDDEN_STRING," untuk menyulitkan rentetan yang diberikan. Makro mengekod setiap aksara menggunakan kunci unik yang diperoleh daripada nilai benih yang disediakan (cth., "Kunci penyulitan kuat saya" -> 0x7f). Algoritma penyulitan berdasarkan benih digunakan pada jujukan aksara, menjadikan data yang terhasil kelihatan rawak dan sukar untuk dikenal pasti dalam binari yang disusun.

#define CRYPT_MACRO(r, d, i, elem) (elem ^ (d - i))
Salin selepas log masuk
#define DEFINE_HIDDEN_STRING(NAME, SEED, SEQ) \
static const char* BOOST_PP_CAT(Get, NAME)() \
{ \
    static char data[] = { \
        BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_FOR_EACH_I(CRYPT_MACRO, SEED, SEQ)), \
        '' \
    }; \
    static bool isEncrypted = true; \
    if (isEncrypted) \
    { \
        for (unsigned i = 0; i < (sizeof(data) / sizeof(data[0])) - 1; ++i) \
        { \
            data[i] = CRYPT_MACRO(_, SEED, i, data[i]); \
        } \
        isEncrypted = false; \
    } \
    return data; \
}
Salin selepas log masuk

Pendekatan ini secara berkesan mengaburkan rentetan terbenam dalam kod binari, menjadikannya sukar untuk diekstrak tanpa pengetahuan tentang kunci penyulitan dan algoritma. Ia mencapai keseimbangan antara keselamatan dan kemudahan penggunaan, menawarkan kaedah yang mudah untuk melindungi maklumat sensitif.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengelirukan Rentetan yang Terbenam dalam Binari Boleh Laksana dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan