"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 실행 가능한 바이너리에 포함된 문자열을 어떻게 효과적으로 난독화할 수 있습니까?

실행 가능한 바이너리에 포함된 문자열을 어떻게 효과적으로 난독화할 수 있습니까?

2024년 12월 22일에 게시됨
검색:702

How Can We Effectively Obfuscate Strings Embedded in Executable Binaries?

바이너리 코드의 문자열 난독화

문제 설명

실행 가능한 바이너리에 포함된 문자열 난독화는 암호화 키와 같은 민감한 정보를 무단 액세스로부터 보호하는 데 유용합니다. 그러나 문자열을 문자 배열에 저장하는 것과 같은 간단한 방법을 사용하면 분석 중에 해당 내용을 쉽게 드러낼 수 있습니다.

해결책

컴파일된 바이너리에서 문자열을 효과적으로 숨기려면 보다 정교한 접근 방식을 사용할 수 있습니다. 다음 예를 고려하십시오.

#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 

이 코드는 지정된 문자열을 암호화하기 위해 사용자 정의 매크로 "DEFINE_HIDDEN_STRING"을 통합합니다. 매크로는 제공된 시드 값에서 파생된 고유 키를 사용하여 각 문자를 인코딩합니다(예: "내 강력한 암호화 키" -> 0x7f). 시드를 기반으로 한 암호화 알고리즘이 문자 시퀀스에 적용되어 결과 데이터가 무작위로 나타나고 컴파일된 바이너리에서 식별하기 어렵게 만듭니다.

#define CRYPT_MACRO(r, d, i, elem) (elem ^ (d - i))
#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)), \
        '\0' \
    }; \
    static bool isEncrypted = true; \
    if (isEncrypted) \
    { \
        for (unsigned i = 0; i 

이 접근 방식은 바이너리 코드 내에 포함된 문자열을 효과적으로 난독화하여 암호화 키와 알고리즘에 대한 지식 없이는 추출하기 어렵게 만듭니다. 보안과 사용 편의성 사이의 균형을 유지하여 민감한 정보를 보호할 수 있는 편리한 방법을 제공합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3