Introduction

CodeJam은 한국 저작권위원회에서 프로그램 저작권 관리와 코드 난독화 등을 제공하는 사이트이다.

사이트주소: http://www.codejam.or.kr/


프로그램 저작권 관리는 저작자를 식별할 수 있는 워터마크(watermark)정보를 자동으로 생성하여 이를 프로그램 소스코드에 삽입하고 향후 삽입된 저작자 정보를 자동으로 추출하여 검증해 주는 서비스이다. 본 서비스의 목적은 소프트웨어 소스코드의 유출 및 도용 시에도 삽입된 저작자 식별 정보를 검증하여 저작권 침해 사실을 용이하게 입증함으로써 저작권자 권리 구제의 실효성을 확보하여 소프트웨어 지적재산권 관련 분쟁의 위험을 최소화 하는 것이다.



프로그램 코드 난독화는 특정 난독화 알고리즘(Layout, Data, Control Obfuscation)을 적용하여 소스코드를 분석하기 어렵게 변환해주는 시스템이다. 본 시스템의 목적은 상세설계에 준하는 설계구조와 주석문, 프로그램 처리방식, 기능 배치, 구성 등의 설계아이디어 또는 해당하는 알고리즘이나 성능 및 최적화를 위한 구현 노하우 등이 내포되어 있는 SW 소스코드의 원천기술 유출을 방지하는 것이다.



Method

CodeJam의 저작권 워터마크, 난독화등의 코드 변환은 모두 사이트에서 이루어진다.


먼저 로그인을 하고,



서비스 이용으로 들어가 코드 변환을 한다.



ActiveX가 아닌 Java로 구현되어 있다.



자바 설치가 완료되면 다음과 같은 화면이 나타난다. 

변환하기 위한 소스 폴더 선택과 보호강도를 지정하고, 난독화 실행을 클릭하면 난독화가 수행된다.



난독화 결과 화면



Conclude

코드 난독화 결과물이 보호강도를 가장 높게 하더라도 전문적인 난독화 서비스보다는 높지 않다.

하지만 저작권 관리, 난독화등 코드변환을 사이트에서 쉽게 무료로 변환 가능하므로 유용하게 사용할 수 있을것으로 보인다.


난독화된 c코드

#include <stdio.h>

#define MABANG_SIZE 5 

int MABANG[MABANG_SIZE][MABANG_SIZE]; void init_MABANG(); void move_MABANG(int &row, int &col, int count); void process_MABANG(); void print_MABANG(); void main() { init_MABANG(); process_MABANG(); print_MABANG(); } void init_MABANG() { for(int Rc2hTbzn2xMmQYcV=0; Rc2hTbzn2xMmQYcV<MABANG_SIZE; Rc2hTbzn2xMmQYcV++) { if(0<MABANG_SIZE){ MABANG[Rc2hTbzn2xMmQYcV][0] = 0; }if(1<MABANG_SIZE){ MABANG[Rc2hTbzn2xMmQYcV][1] = 0; }for(int fNbUnAITfcUEkNDz=2; fNbUnAITfcUEkNDz<MABANG_SIZE; fNbUnAITfcUEkNDz++) { MABANG[Rc2hTbzn2xMmQYcV][fNbUnAITfcUEkNDz] = 0; } } } void move_MABANG(int &row, int &col, int count) { MABANG[row][col] = count; row -= 1; col += 1; if(row < 0 && col > MABANG_SIZE-1) { row += 2; col -= 1; } else if(row < 0) { row = MABANG_SIZE-1; } else if(col > MABANG_SIZE-1) { col = 0; } else if(MABANG[row][col] != 0) { row += 2; col -= 1; } else { } } void process_MABANG() { int CBbtF1gJvMzPdA7c = 0; int R7R5hHlcgu6tTD6p = MABANG_SIZE/2; for(int Vz1JrpWh_SwYjvMZ=1; Vz1JrpWh_SwYjvMZ<=MABANG_SIZE*MABANG_SIZE; Vz1JrpWh_SwYjvMZ++) { move_MABANG(CBbtF1gJvMzPdA7c, R7R5hHlcgu6tTD6p, Vz1JrpWh_SwYjvMZ); } } void print_MABANG() { for(int lHXsEid3LaTqU3oN=0; lHXsEid3LaTqU3oN<MABANG_SIZE; lHXsEid3LaTqU3oN++) { if(0<MABANG_SIZE){ printf("%4d", MABANG[lHXsEid3LaTqU3oN][0]); }if(1<MABANG_SIZE){ printf("%4d", MABANG[lHXsEid3LaTqU3oN][1]); }for(int dSdb3Zlsgje_bG59=2; dSdb3Zlsgje_bG59<MABANG_SIZE; dSdb3Zlsgje_bG59++) { printf("%4d", MABANG[lHXsEid3LaTqU3oN][dSdb3Zlsgje_bG59]); } printf("\n"); } 

}


'정보이야기 > 보안정보' 카테고리의 다른 글

샌드박스(Sandbox) 개념  (5) 2012.05.29
리버스 엔지니어링 툴 정리  (1) 2012.05.24