실행 가능한 바이너리에 포함된 문자열 난독화는 암호화 키와 같은 민감한 정보를 무단 액세스로부터 보호하는 데 유용합니다. 그러나 문자열을 문자 배열에 저장하는 것과 같은 간단한 방법을 사용하면 분석 중에 해당 내용을 쉽게 드러낼 수 있습니다.
컴파일된 바이너리에서 문자열을 효과적으로 숨기려면 보다 정교한 접근 방식을 사용할 수 있습니다. 다음 예를 고려하십시오.
#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