저번 주까지는 MiniC에 난독화할 수 있는 코드를 메소드 형식으로 작성하여 적용하도록 했는데, 이번 주에는 Obfuscator라는 클래스로 따로 빼서 작성하였다. 이후의 코드는 이 클래스에 작성한 뒤, prettyprinter의 각 부분에 적용하는 방식으로 작성할 것 같다. 이렇게 코드의 수정과 적용이 편리하도록 했는데, 다음 시간에는 이것을 더 발전시켜서 prettyprinter이전에(또는 prettyprinter를 시작하자 마자) 난독화를 실행해 난독화 한 후 이 코드를 prettyprint하도록 하고 싶다. 더 나아가서는 if문을 인식하면 바로 모든 if문에 대해서 어떠한 난독화를 적용한다던가, parameter를 인식해서 그것을 이용해 여러가지 난독화를 진행한다던가 하는 부분도 해 보고 싶은데 이 부분은 지금처럼 exit을 이용하기만 해도 될 것 같긴 하다.
- 난독화 시 코드의 효율은 어떻게 되는걸까? 첫 번째 게시글 (https://yarncha.github.io/01/)에 글을 쓰면서도 생각했던 점인데, 해당 글에 들었던 예시와 같이 for문을 반복하여 테스트 케이스를 많이 생성할 경우에는 난독화 하기도 어렵겠지만 코드를 이용할 때에도 실행 시간도 늘어나고 코드의 효율이 좋지 않을 것 같았다. 결국 이렇게 되면 난독화 하려다가 코드까지 망친다는 느낌이 들었다.
=> 여쭤보니, 관리자 권한에 접근하는 부분이라던가 중요한 키를 가지고 있는 부분과 같이 주로 보안이 중요한 부분에 대하여 일부를 난독화하는 방법을 사용하는 것 같다.
- x*x>0과 같이 일반적인 부분은 역공학 도구에서 어떻게 알아내는 걸까? 저번 주에 작성했던 부분 중 para*para>0와 같은 부분이 난독화에 있어서는 스테레오타입과 같은 부분이라 쉽게 난독화 해제가 가능할 것이라고 말씀해 주셨다. 이번 주에 이 부분을 어떻게 알아내기 쉽지 않도록 변경해야 할 까 고민하면서 역공학 코드에서는 어떤 식으로 이런 일반적인 부분을 넘어가도 된다고 알아내서 난독화 해제하는지에 대한 궁금증이 생겼다. 어떻게 해제하는지를 알게 된다면 어떻게 난독화해야 할 지도 감이 잡힐 것 같았다.
=> 코드가 너무 간단한 게 이유일 수도 있을 것 같다!