난독화 도구를 개발하기 위해 사용했던 Grammer가 모든 문법에 대해서 지원하지 않았다. 이 Grammer는 예전 컴파일러 개론 수업 시간에 컴파일러 개발을 위해 간단하게 작성했던 문법이어서 어쩔 수가 없는 부분이었다.
고민 끝에 ANTLR 홈페이지에서 C grammer파일(https://github.com/antlr/grammars-v4/blob/master/c/C.g4)을 활용하기로 하였다.
포인터 이용
개인적으로 C 공부할때 포인터가 너무 헷갈렸다. 이를 이용한 난독화는 어떨까 해서 시도해 본 방법이다.
int adder(int para01, int para02)와 같은 함수가 있고 들어온 둘의 파라미터 값을 더하는 게 목적 이라고 해 보자. 물론 이 함수의 이름이 이렇게 쉽게 “나는 더하는 함수다!” 하고 adder이지는 않을 것이다. 따라서 코드를 악의적으로 이용하고자 하는 사람을 막기 위해서 이 코드의 내용을 읽기 어렵게 만들 것이다.
주소값은 결국 숫자이니까 그 것을 고려해서 주소값을 저장하도록 하는 것인데,
1
2
3
4
5
6
7
8
9
10
11
int adder(int para01, int para02){
//주소값을 각각의 변수에 저장한다.
//(파라미터의 개수에 따라 자동으로 location변수들을 쭉 생성해 주고, 주소값을 저장한다)
int *location01;
int *location02;
location01 = ¶01;
location02 = ¶02;
//연산을 수행할 때 변수의 저장한 값을 가져와서 쓰도록 한다.
return *location01 + *location02;
}
정리하니까 엄청 간단해졌다…..ㅋㅋㅋ
여기서 각 parameter의 주소값을 가지는 변수 location들에 숫자를 더했다가 빼는 등의 연산을 해서 복잡하게 할 수도 있고, 마지막 줄의 return부분의 연산을 관련 난독화 기술로 더 복잡하게 할 수 있을 것 같다.
또, 이 코드를 작성하면서 포인터의 메모리 누수를 이용해 난독화를 할 수도 있지 않을까? 싶은 생각이 들었다. 다음 주에 한번 시도해봐야겠다.
그동안 했던 거랑 다를게 점점 없어지는 것 같다. 어떤 기능을 이용했는지만 다를 뿐? 그래서 다음 주에는 뭔가 다른 시도를 해 보고 싶다. 이런 류의 난독화가 아닌…