아스키코드표

image
(참고용 아스키 코드 표)

변수 x에 100이라는 값을 정의하고 싶다.
단순히 int x = 100; 이라고 표현하는 것 보다 아스키 문자를 활용하여 int x = 'd'; 이렇게 표현한다면 코드를 읽기가 조금 더 번거로워 진다.
이 점에서 착안하여 C언어 난독화를 구현하려 한다.

image
확인차 C언어로 테스트해본 결과, 십진수32부터 126까지의 값은 아스키 문자 한자리로 표현할수 있고 문자 ‘ ‘ 부터 ‘~’ 까지로 대응 된다.

다음으로는 자바에서 테스트 해보았다.

for(int i=0; i<127; i++){
    char ch = (char)i;
    System.out.println(i+" to char : "+ch);
}

위와 같은 코드를 작성하고 동작한 결과가 아래의 사진이다.
image
사진과 같이, 제어 문자에 해당하는 0~31번 또한 자바에서 문자로 변환하면 표현이 되지만! 난독화 단계에서는 결과 문자를 합쳐 문자열로 만드는 작업이 필요할 것인데, 그 단계에서 NUL이나 ENTER같은 경우를 String으로 처리하는 방법을 고안해내지 못했음으로 32부터 126까지의 숫자를 아스키문자로 변환하기로 한다.
따라서 범위에서 제외된 0에서 31, 그리고 127이상의 숫자는 어떻게 표현할 수 있을까 고민해보았다.

image
표현하고 싶은 값 x가 x<32일 경우에는 단순하게 ' '- (32-x) 로 표현해 보았다.
위와 같이 연산으로 특정 값을 더하고 빼서 표현하는 방법을 사용할 수 있겠다.

image
위 사진은 숫자 12345를 표현한 것이다.
12345 = 1 * 100 * 100 + 20 * 100 + 3 * 100 + 45 로 표현할 수 있고 이를
int a = 'd' * 'd' + 'd' * (' '-12) + 'd' * (' '-29) + '-' 이렇게 문자 사이의 연산을 포함하여 바꾸어 보았다.

12345를 1 * 10000 + 20 * 100 + 3 * 100 + 45 로 생각하느냐 123 * 100 + 45 로 생각하느냐 … 에 따라 다양한 방법으로 표현할 수 있고 이는 난독화를 어떻게 구현하는지에 따라 다양하게 표현 가능할것 같다.

위의 방법들을 난독화 Listener에 구현중이다!