난독화란 소스 코드의 일부를 의도적으로 실제 목적을 숨기기 위해 인간이 이해하기 어려운 코드로 변환하는 행위이지만 기능은 변경되지 않고 컴퓨터에서 완벽하게 실행될 수 있도록 하는 것입니다.
부인 성명 한국어 실력이 부적하여 이 글이 구글 번역기를 주로 활용했기 때문에 부정확한 문법과 어휘가 있을수 있습니다. 이 점 양해 부탁드리며, 추후에 다시 검토하여 수정하도록 하겠습니다.
예시
다음은 C 코드 부분을 난독화하는 방법에 대한 단계별 가이드입니다. 전후의 변화는 서로에 비해 상당히 파격적이다.
난독화 전 코드
hello.c
int main(void)
{
time_t t;
struct tm* tm;
t = time(NULL); /* 현재 시간을 초 단위로 가져옵니다. */
tm = localtime(&t); /* 타임스탬프를 세분화된 시간으로 변환 */
switch(tm->tm_hour) /* 시간 값에서 작업 선택 */
{
case 4: case 5: case 6: case 7:
case 8: case 9: case 10: case 11:
printf("Good morning!\n");
break;
case 12: case 13: case 14:
printf("Good day!\n");
break;
case 15: case 16: case 17:
printf("Good afternoon!\n");
break;
case 18: case 19: case 20: case 21:
printf("Good evening!\n");
break;
default:
printf("Good night!\n");
break;
}
return 0;
}
난독화 후 코드
hello.c
#include <time.h>
char* w = "AAAA########+++///9999AA Good %s!\n\0morning\0day\0afternoon\0evening\0night";
int main(){time_t t=time(0); return printf(w+25, w + w[ localtime(&t)->tm_hour ]);}
오라인 난독화기
난독화기는 JavaScript 및 Python용으로 온라인에서도 사용할 수 있습니다. 더 유사한 서비스를 찾으려면 관련 키워드를 Google에 검색하세요.
단점
- 난독화로 인해 읽기 또는 리버스 엔지니어링이 어려워지지만 불가능하지는 않습니다.
- 올바르게 취급하지 않을 경우 성능 저하의 원인이 될 수 있습니다.
- 개발자에게 빌드 및 디버깅의 복잡성을 소개합니다.
참고
University of Florida. Obfuscated C Code. Retrieved 2024, March 25 from https://www.cise.ufl.edu/~manuel/obfuscate/obfuscate.html