[난독화]난독화기의 Listener 구조 변경(?)

1 minute read

난독화기의 Listener 구조 변경

지난 미팅의 결과로, 난독화 기법마다 다른 리스너로 동작하게끔 구조를 바꾸기로 하였다. 이번 포스팅은 해당 내용의 구현을 이야기하려고 한다.

image

Translate.java 먼저 입력으로 들어온 오리지널 코드에 대하여 리스너를 여러 회 동작시킬 수 있도록 main을 구성하였다. 기존에는 리스너가 한 번만 실행되었는데, 입력된 옵션의 수 만큼 리스너가 동작되도록 하였다.

image

일단 난독화된 코드를 단계별로 보기 편하게끔 매번 resultN.c 파일을 만든다. 다음 난독화할 때 앞서 만든 resultN.c 파일을 읽어서 리스너를 호출하게 하여, 누적되어 난독화되도록 구성하였다. 생성되는 결과물에 번호를 사용하기 위해서 기존의 MiniCPrintListener의 생성자에 count 파라미터를 추가하였다. 몇 번째로 생성되는 난독화 결과물인지 나타내기 위해서 사용하는 int 값이다.

image

그리고 난독화 기법마다 리스너를 다르게 생성하기 위해서 parent Listener를 작성하였다. 이 리스너는 기존의 MiniCPrintListener와 같다. MiniCPrintListener에서 난독화기법이 적용된 코드만 제거하였다. 입력으로 들어온 코드를 그대로 출력하기만 하는 리스너이다.


위에서 작성한 디폴트 리스너를 이용하여 여러 난독화기법 리스너로 확장하였다. 확장하는 방법에 대한 예시로, expr + expr 과 같은 연산에 MBA expression을 사용하는 난독화 기법에 대하여 리스너를 살펴보자.

image

위의 코드는 디폴트리스너의 exitExpr() 일부이다. expr + expr 과 같은 문법에 대하여 난독화를 적용하고자 하는데, 다른 난독화 리스너로 확장하기용이하도록 함수를 추가하였다. applyObfus_binary()가 그것이다.

image

applyObfus_binary()의 코드를 보면 (디폴트 리스너에서는) 그냥 그대로 출력한다.

image

그리고 MBA난독화 리스너 클래스를 새로 생성하여 디폴트 리스너를 상속받도록 하였다. 앞서 보았던 applyObfus_binary()함수가 난독화된 코드를 반환하도록 함수를 작성하여 오버라이드한다. 이 때 기존에 사용하던 Obfuscator 클래스에 작성된 함수를 사용하였다.


위와 같은 방법으로 난독화기를 확장하였다. 후에 다른 난독화기법 리스너를 추가하려고 한다면 위에서 이야기 한 방법과 같이 하면 될 것 같다.