이하 명세서 전체에서 동일 참조 부호는 특별한 사정이 없는 한 동일 구성요소를 지칭한다. 이하에서 사용되는 '부'가 부가된 용어는, 소프트웨어 또는 하드웨어로 구현될 수 있으며, 실시예에 따라 하나의 '부'가 하나의 물리적 또는 논리적 부품으로 구현되거나, 복수의 '부'가 하나의 물리적 또는 논리적 부품으로 구현되거나, 하나의 '부'가 복수의 물리적 또는 논리적 부품들로 구현되는 것도 가능하다.
명세서 전체에서 어떤 부분이 다른 부분과 연결되어 있다고 할 때, 이는 어떤 부분과 다른 부분에 따라서 물리적 연결을 의미할 수도 있고, 또는 전기적으로 연결된 것을 의미할 수도 있다. 또한, 어떤 부분이 다른 부분을 포함한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 부분 이외의 또 다른 부분을 제외하는 것이 아니며, 설계자의 선택에 따라서 또 다른 부분을 더 포함할 수 있음을 의미한다. 한편, 단수의 표현은 문맥상 명백하게 예외가 있지 않는 한, 복수의 표현을 포함할 수 있다.
이하, 도 1 내지 도 5를 참조하여 역난독화 장치의 일 실시예에 대해 설명한다.
도 1은 역난독화 장치를 설명하기 위한 전체 블록도이다.
도 1을 참조하면, 역난독화 장치(70)는 원래의 프로그램(1, 이하 원 프로그램)을 난독화하여 획득된 난독화된 프로그램(2)을 역난독화 할 수 있는 장치를 의미한다. 여기서, 원 프로그램(1) 및/또는 난독화된 프로그램(2)은 프로그램 코드를 포함할 수 있으며, 필요에 따라 데이터 등도 포함할 수 있다. 원 프로그램(1) 및/또는 난독화된 프로그램(2)은 적어도 하나의 컴퓨터 파일 형태로 구현될 수 있으며, 컴퓨터 파일은 소정의 형식(포맷)으로 저장된 것일 수 있다. 여기서 포맷은 포터블 실행(PE, Portable Executable) 포맷을 포함할 수 있으나, 이에 한정되는 것은 아니다.
역난독화 장치(70)는 프로세서(80) 및 메모리 장치(90)를 포함하는 정보 처리 장치일 수 있다. 정보 처리 장치는 각종 연산 및/또는 제어 등을 수행할 수 있는 전자 장치 등을 포함할 수 있다. 예를 들어, 정보 처리 장치는 데스크톱 컴퓨터, 랩톱 컴퓨터, 서버용 컴퓨터, 스마트 폰, 태블릿 피씨, 스마트 시계, 휴대용 게임기, 인공지능 음향 재생 장치, 내비게이션 장치, 두부 장착형 디스플레이(HMD, Head Mounted Display) 장치, 디지털 텔레비전, 셋톱 박스, 차량, 가전 기기 또는 개인용 디지털 보조기(PDA, Personal Digital Assistant) 등과 같이 정보 처리가 가능한 장치 중 적어도 하나를 포함할 수 있다.
프로세서(80)는 역난독화 장치(70)의 전반적인 또는 일부의 동작에 필요한 연산, 처리, 제어 및/또는 프로그램의 해석 동작 등을 수행할 수 있다. 예를 들어, 프로세서(80)는 난독화된 프로그램(2)을 분석하고, 필요에 따라 분석 결과를 기반으로 원 프로그램(1)에 대응되는 역난독화된 프로그램(이하, 결과 프로그램)을 획득할 수도 있다. 여기서, 결과 프로그램은 원 프로그램(1)과 동일하거나 또는 극히 유사한 프로그램을 포함할 수 있다.
프로세서(80)는 미리 임베디드된 프로그램을 구동시키거나 및/또는 메모리 장치(90)에 저장된 프로그램을 구동시켜 소정의 동작을 수행할 수 있다. 여기서, 메모리 장치(90)에 저장된 프로그램은 설계자로부터 직접 저장된 것일 수도 있고, 또는 유무선 통신 네트워크를 통해 접속 가능한 전자 소프트웨어 유통망을 통하여 획득된 것일 수도 있다.
프로세서(80)는 중앙 처리 장치(CPU, Central Processing Unit), 마이크로 컨트롤러 유닛(MCU, Micro Controller Unit), 마이컴(Micom, Micro Processor), 애플리케이션 프로세서(AP, Application Processor), 전자 제어 유닛(ECU, Electronic Controlling Unit) 및/또는 각종 연산 처리 및 제어 신호의 생성이 가능한 다른 전자 장치 등을 이용하여 구현 가능하다. 실시예에 따라, 프로세서(80)는 하나의 물리적 장치를 이용하여 구현될 수도 있고, 또는 둘 이상의 물리적 장치를 이용하여 구현될 수도 있다.
일 실시예에 의하면, 프로세서(80)는 역난독화부(100)를 포함할 수 있다. 역난독화부(100)는 난독화된 프로그램(2)을 분석하고, 필요에 따라 분석 결과에 따른 결과 프로그램을 생성함으로써 난독화된 프로그램(2)에 대한 역난독화를 수행한다. 역난독화부(100)는 사용자의 조작에 따라 수동으로 및/또는 미리 정의된 설정에 따라 자동으로 난독화된 프로그램(2)에 대한 역난독화 동작의 수행을 개시할 수 있다. 실시예에 따라서, 역난독화부(100)는 소프트웨어적으로 구현된 것일 수도 있고 또는 하드웨어적으로 구현된 것일 수도 있다. 또한, 상술한 역난독화부(100), 분석부(110), 복원부(160) 등은 역난독화 장치(70)의 소정 기능, 예컨대 프로세서(80)의 동작을 수행하는 기능 블럭으로 이해될 수 있으므로, 역난독화 장치(70)는 분석부(110)와 복원부(160)을 포함하는 역난독화부(100)를 포함하는 것으로 이해될 수도 있다.
일 실시예에 의하면, 역난독화부(100)는 적어도 하나의 프로그램의 형태로 구현될 수 있다. 이 경우, 역난독화부(100)는 동적 이진 계측 툴(DBI tool, Dynamic Binary Instrumentation tool)을 기반으로 제작 및 구현된 것일 수도 있다. 동적 이진 계측 툴은 핀 툴(Pin Tool)이나 또는 밸그라인드(Valgrind) 등을 포함할 수 있다. 핀 툴은 윈도우나 리눅스에서 런타임 이진 계측(Runtime Binary Instrumentation)을 수행할 수 있는 다수의 응용 프로그래밍 인터페이스(API, Application Programming Interface)(들)로 구성된 소프트웨어 툴을 의미한다. 핀 툴은 사용자가 원하는 추가 코드(예를 들어, 계수, 메모리 기록 또는 지시 수집 등)를 프로그램에 삽입함으로써, 역난독화 장치(70)가 프로그램(예를 들어, 난독화된 프로그램(2))의 동작을 분석할 수 있도록 한다. 핀 툴은 저스트 인 타임 컴파일(JIT compilation, Just-In-Time compilation)을 제공할 수 있어 다른 툴에 비해 상대적으로 효율적으로 동작하는 특징을 가지고 있다.
일 실시예에 의하면, 역난독화부(100)는 분석부(110) 및/또는 복원부(160)를 포함할 수 있다. 분석부(110)는 난독화된 프로그램(2)의 분석을 수행할 수 있다. 복원부(160)는 난독화된 프로그램(2)에 대응하는 결과 프로그램을 생성하여 원 프로그램(1)을 복원할 수 있다. 이 경우, 복원부(160)는 분석부(110)의 분석 결과를 기반으로 결과 프로그램을 생성할 수도 있다. 분석부(110) 및 복원부(160)는 소프트웨어적으로 구분된 것일 수도 있고 또는 하드웨어적으로 구분된 것일 수도 있다. 후자의 경우, 분석부(110) 및 복원부(160) 각각은 서로 상이한 물리적 장치(소정의 반도체 칩 등)을 이용하여 구현된 것일 수 있다. 실시예에 따라서 분석부(110) 및 복원부(160) 중 어느 하나는 생략되는 것도 가능하다. 분석부(110) 및 복원부(160)에 대한 상세한 설명은 후술한다.
메모리 장치(90)는 프로세서(80)의 동작에 필요한 각종 데이터를 일시적 또는 비일시적으로 저장할 수 있다. 예를 들어, 메모리 장치(90)는 역난독화를 위해 설계된 프로그램을 저장할 수도 있고, 역난독화 대상이 되는 프로그램(즉, 난독화된 프로그램(2))을 저장할 수도 있으며, 또한 역난독화 결과 획득된 프로그램을 저장할 수도 있다. 메모리 장치(90)는 주기억장치 및 보조기억장치 중 적어도 하나를 포함할 수 있다. 주기억장치는 롬(ROM) 및/또는 램(RAM)과 같은 반도체 저장 매체를 이용하여 구현된 것일 수 있다. 보조기억장치는 솔리드 스테이트 드라이브(SSD, Solid State Drive), 플래시 메모리 장치, 하드 디스크(HDD, Hard Disc), SD(Secure Digital) 카드, 자기 드럼, 자기 테이프, 컴팩트 디스크(CD), 디브이디(DVD), 레이저 디스크, 광자기 디스크 및/또는 플로피 디스크 등과 같이 데이터를 영구적 또는 반영구적으로 저장 가능한 적어도 하나의 저장 매체를 이용하여 구현될 수 있다.
프로세서(80)에 의해 역난독화 되거나 및/또는 메모리 장치(90)에 저장되는 난독화된 프로그램(2)은 역난독화 장치(70)와는 상이한 다른 장치(10, 이하 난독화 장치)의 난독화 동작에 의해 획득된 것일 수 있다. 물론, 상황에 따라 역난독화 장치(70)가 난독화를 수행하여 난독화된 프로그램(2)을 생성하는 것도 가능하다. 난독화 장치(10)는 역난독화 장치(70)와 동일하거나 또는 상이한 정보 처리 장치를 포함할 수 있으며, 예컨대 데스크톱 컴퓨터, 랩톱 컴퓨터, 서버용 컴퓨터 또는 스마트폰 등의 장치 등을 포함할 수 있다.
난독화 장치(10)는 원 프로그램(1)으로부터 난독화된 프로그램(2)을 생성하여 획득하는 난독화부(11)를 포함할 수 있다. 난독화부(11)는 하나 또는 둘 이상의 난독화 툴(난독화 애플리케이션이나 난독화 프로그램 등으로 지칭 가능함)을 이용하여 원 프로그램(1)을 난독화하여, 최종적으로 난독화된 프로그램(2)을 획득(또는 생성)할 수 있다. 난독화 툴은 원 프로그램(1)의 전부 또는 일부에 대한 난독화를 수행할 수 있는 프로그램으로, 오직 난독화만을 위해 제작된 프로그램일 수도 있고 또는 난독화 기능을 부분적으로 포함하여 제작된 프로그램일 수도 있다. 난독화 툴은, 더미다(Themida) 툴(이하 더미다)이나, 윈 라이선스(WinLicense) 툴(이하 윈 라이선스)이나, 브이엠프로텍트(VMProtect) 툴(이하 브이엠프로텍트) 등과 같이 상용 난독화 툴을 포함할 수 있다. 난독화부(11)는 프로세서 등을 이용하여 구현 가능하다.
난독화부(11)는 난독화를 수행함에 있어서 적어도 하나의 난독화 옵션(12: 12-1 내지 12-N)을 적용하여 난독화를 수행할 수 있다. 예를 들어, 난독화 툴 중 하나인 더미다는 난독화를 위해 대략 21개의 옵션(12: 12-1 내지 12-N)을 사용자에게 제공한다. 보다 상세하게 예를 들어, 더미다는 안티 디버거(anti debugger), 안티 덤퍼(anti dumper), 안티 패칭(anti patching), 애플리케이션 또는 자원에 대한 압축화, 시큐어 엔진(secure engine) 코드 또는 자원의 압축화, 개선된 응용 프로그램 인터페이스 래핑(Advanced API wrapping) 또는 엔트리 포인트(Entry Point) 난독화 등 이진 코드 수준에서 분석 방지(anti-analysis) 등을 위한 다양한 옵션(12)을 제공한다. 이와 같이 다양한 난독화 옵션(12: 12-1 내지 12-N)의 존재는 난독화 과정에서 적용된 옵션(12: 12-1 내지 12-N)이 무엇인지 여부에 대한 판단을 어렵게 하여, 난독화된 프로그램(2)의 역난독화의 난도를 증가시키고 있다.
역난독화 장치(70)는 난독화 장치(10)에 의해 난독화된 프로그램(2)을 다양한 경로를 통해 획득할 수 있다. 예를 들어, 역난독화 장치(70)는 외장 하드 디스크 장치나 범용 직렬 버스 메모리(USB memory) 장치 등과 같은 적어도 하나의 메모리 매체를 이용하여 난독화된 프로그램(2)을 획득할 수도 있고, 및/또는 유무선 통신 네트워크에 접속하고 외부의 서버 장치(예를 들어, 메일 서버나 전자 소프트웨어 유통망 서버 등)를 경유하거나 또는 난독화 장치(10)로부터 직접 난독화된 프로그램(2)을 수신하여 획득할 수도 있다. 이외에도 역난독화 장치(70)는 프로그램의 전달을 위해 통상 알려진 방법을 통해 난독화된 프로그램(2)을 획득할 수 있다.
이하 난독화된 프로그램(2)에 대해 보다 상세히 설명하도록 하되, 더미다를 난독화 툴로 이용하여 난독화된 프로그램(2)을 예로 들어 설명하도록 한다. 그러나, 후술하는 난독화된 프로그램(2)의 구체적인 내용은 오직 더미다를 이용하여 난독화한 경우에만 한정되는 것은 아니다. 후술하는 내용의 전부 또는 일부는 다른 난독화 툴(예를 들어, 윈 라이선스 및/또는 브이엠프로텍트 애플리케이션 등)을 이용하여 난독화한 프로그램에도 해당될 수도 있다.
난독화 툴(예를 들어, 더미다)은 다수의 옵션을 기반으로 다양한 난독화 및 분석 방지 기법을 제공할 수 있으나, 이들 옵션들은 원칙적으로 원시 코드와 원시 데이터를 훼손하지는 않는다. 또한, 더미다는 본질적으로 패커(packer)이다. 패커는 코드나 데이터를 특정한 키와 배타적 논리합(XOR)을 수행하여 은닉하고, 런타임 시점에서 해당 키와 다시 배타적 논리합을 수행하여 원시 코드 및 원시 데이터를 복원하는 툴 또는 기법을 의미한다. 그러므로, 더미다를 이용하여 난독화된 프로그램(2)이라고 하더라도 런타임에서 원시 코드와 원시 데이터가 그대로 노출되는 시점이 존재할 수밖에 없다. 이를 고려하여 더미다를 기반으로 난독화된 프로그램(2)에 대해 정적 분석(static analysis) 및 동적 분석(dynamic analysis)을 수행하면, 난독화 툴 특유의 내제적 특징이 존재함을 알 수 있다.
예를 들어, 난독화 툴에 의해 프로그램이 난독화될 때 원 프로그램(1) 또는 이에 포함된 코드나 데이터 등은 패킹되고, 실행 시간(런타임) 동안 소정의 루틴(언패킹 루틴)에 따라서 언패킹된다. 이와 같은 원 프로그램(1) 등에 대한 언패킹 루틴은 난독화 툴에 사전에 마련된 것일 수 있다. 통상 난독화 툴은 다섯 또는 여섯 개의 언패킹 루틴을 제공하는데, 이들 언패킹 루틴은 특정 옵션(12:12-1 내지 12-N)의 선택에 따라 추가되기도 하고 또는 제거되기도 한다. 따라서, 언패킹 루틴은 특정 난독화 툴의 내제적 특징이 될 수 있다.
언패킹 루틴 중에서 일부의 루틴은 적용된 옵션(12:12-1 내지 12-N)에 무관하게 동일하거나 유사한 바이트 패턴(byte pattern)을 갖는다. 이와 같은 언패킹 루틴에서 이용되는 바이트 패턴은 난독화 툴 특유의 내제적 특징이 될 수 있으며, 이를 기반으로 난독화 툴의 사용 여부를 판단할 수 있게 된다. 여기서, 바이트 패턴은 정적 분석으로 확인 가능한 것일 수 있다.
또한, 난독화 툴의 내제적 특징은, 후술하는 섹션에 대한 정보(예컨대, 섹션의 개수나 명칭 등)를 포함할 수도 있다. 이는 일부의 섹션은 옵션(12:12-1 내지 12-N)의 선택에 따라서 추가되거나 제거되기도 하기 때문이다.
도 2는 난독화된 프로그램의 실행 시의 제어 흐름을 설명하기 위한 도면이다.
상술한 난독화 툴을 기반으로 난독화된 프로그램(2)에 대해 행동 분석(behavior analysis)을 수행하면, 제어 흐름은 도 2에 도시된 바와 같이 다수의 섹션(21 내지 25)을 기반으로 수행됨을 알 수 있다.
다수의 섹션(21 내지 25)은, 예를 들어, 더미다2 섹션(21), 더미다1 섹션(22), 임포트 주소 테이블(IAT, Import Address Table) 제거 섹션(23), 압축/암호화 데이터 섹션(24) 및 패킹된 코드 섹션(25)을 포함할 수 있다. 도 2에는 5개의 섹션(21 내지 25)이 도시되어 있으나, 상황에 따라서 섹션(21 내지 25)의 개수는 더 많을 수도 있고 또는 더 적을 수도 있다. 예를 들어, 선택된 옵션(12: 12-1 내지 12-N)에 따라서 새로운 섹션이 더 추가되거나 또는 일부의 섹션이 생략될 수도 있다. 보다 구체적으로 예를 들어, 시큐어 엔진 압축화 옵션을 추가적으로 반영하여 난독화가 수행된 경우에는 이에 대응하는 섹션이 더 추가될 수도 있다. 제어 흐름은 더미다2 섹션(21), 더미다1 섹션(22), 임포트 주소 테이블 제거 섹션(23), 압축/암호화 데이터 섹션(24) 및 패킹된 코드 섹션(25) 순으로 진행되며, 기 실행된 섹션(21 내지 25)은 복수 회수로 실행되지는 않는다(도 3b의 규칙 4-1 및 규칙 4-2 참조).
더미다2 섹션(21)은 엔트리 포인트로 동작하며, 더미다1 섹션(22)을 언패킹(unpacking)한다. 더미다2 섹션(21)에서는, 안티 분석 코드가 실행되지 않으므로, 예외 코드가 분석을 지연시키도록 한다.
더미다1 섹션(22)은 패킹된 코드(25) 및 데이터(24)의 언패킹을 수행하며, 또한 분석 방지 코드(26, anti-analysis code)를 실행시킨다. 여기서 분석 방지 코드(26)는 멀티 스레드(multi-thread)를 기반으로 하는 분석 방지 코드일 수 있다. 또한, 더미다1 섹션(22)에 의해 동적 링크 라이브러리(DLL, Dynamic Link Library)도 동적으로 로딩된다. 만약 상술한 자원 압축화 옵션이나 자원 압축화 옵션이 선택된 경우라면, 더미다1 섹션(22)은 데이터 섹션(24)의 압축을 해제하고 복호화를 더 수행한다. 더미다2 섹션(21) 및 더미다1 섹션(22)은 코드 섹션(25)의 언패킹이 완료되면 더이상 이용되지 않는다(도 3b의 규칙 4-2 참조).
데이터 섹션(24)은 원 프로그램(1)에 포함되어 있던 데이터 등을 포함하며, 이때 데이터는 압축 및/또는 암호화되어 데이터 섹션(24)에 마련되어 있을 수 있다. 데이터 섹션(24)은 상술한 더미다1 섹션(22)의 동작에 의해 원 프로그램(1)과 같이 복원된다.
코드 섹션(25)은 원 프로그램(1)의 코드를 포함하는 부분으로, 이 경우 원 프로그램(1)은 패킹되어 코드 섹션(25)에 포함될 수 있다. 코드 섹션(25)은 상술한 더미다1 섹션(22)에 의해 언패킹되어 복원될 수 있다. 이 경우, 복원 결과는 원 프로그램(1)과 동일할 수도 있고 또는 일부 상이할 수도 있다. 패킹된 코드 섹션(25)이 복원되는 경우, 원 프로그램(1)이 예정하고 있는 원래의 기능 또는 동작의 수행이 가능해진다.
임포트 주소 테이블 제거 섹션(23)은 임포트 주소 테이블을 제거하여 난독화된 프로그램(2)의 분석을 어렵게 하도록 설계되어 있다. 그러나, 실질적으로는 동적 링크 라이브러리나 프로그램 내의 함수(예를 들어, 임포트 주소 테이블)는 IAT 제거 섹션(23)에서 완전히 삭제되는 것은 아니며, 정보(예를 들어, 임포트 디렉터리 테이블(IDT, Import Directory Table))만이 삭제된다. 이에 따라 난독화에 의해서도 함수의 실제 주소는 제거되지 않으며, 단지 정보의 부재로 인해 왜곡되어 보일 수는 있다. 따라서, 전체적인 임포트 주소 테이블은 이와 같은 삭제된 정보를 회복시켜 복원될 수 있다.
이와 같이 난독화된 프로그램(2)을 실행하는 경우, 더미다2 섹션(21) 및 더미다1 섹션(22)의 동작에 따라 패킹된 코드 또는 압축/암호화된 데이터는 언패킹되고, 이에 따라 원 프로그램(1)과 동일 또는 유사한 프로그램이 실행될 수 있게 된다.
도 3a 및 도 3b는 난독화 툴의 일례로 더미다의 규칙의 일부를 설명하기 위한 도면으로, 포터블 실행 파일에 대해 더미다를 적용한 경우에서의 발견된 규칙을 도표의 형태로 도시한 것이다.
상술한 분석에 의하면, 난독화 툴의 하나인 더미다는 도 3a 및 도 3b에 도시된 바와 같은 다수의 규칙에 따라서 원 프로그램(1)을 난독화할 수 있다.
예를 들어, 더미다는 원 프로그램(1) 내의 다수의 섹션들을 병합하여 특정한 개수의 섹션으로 재구축하되(규칙 1), 텍스트 섹션(.text), 데이터 섹션(.data) 및 임포트 주소 테이블 섹션을 최상단 섹션에 병합시킨다(규칙 1-1). 한편, 자원 섹션(.rsrc)을 원 위치에 위치시키되, 더미다1 섹션(22)에 일부 자원 값을 이동시킨다(규칙 1-2). 원시 코드, 데이터 및 임포트 주소 테이블의 위치는 변경되지 않는다(규칙 1-3).
또한, 더미다는 압축된 코드, 데이터 및 제거된 임포트 주소 테이블을 특별한 규칙을 갖는 난독화된 프로그램에서 다시 작성하는데(규칙 2), 적용된 옵션에 따라 애플리케이션 및/또는 자원이 암호화되거나 압축되는 경우에는 임포트 주소 테이블의 복원 전에 복호화 또는 압축 해제를 수행하고(규칙 2-1), 애플리케이션 및/또는 자원이 암호화되거나 압축되지 않으면, 오직 임포트 주소 테이블의 복원만을 수행하도록 한다(규칙 2-2). 또한, 만약 복원된 임포트 주소 테이블의 주소가 호출/점프에 의해 참조되면, 모든 참조된 간접 호출/점프(ICJ, Indirect Call & Jump) 명령문을 직접 호출/점프(DCJ, Direct Call & Jump) 명령문으로 변환시킨다(규칙 2-3). 난독화된 프로그램이 언패킹된 코드 섹션으로 점프하게 되면 전체적인 프로세스는 종료되며, 패킹되거나, 암호화되거나, 압축되거나 또는 제거된 모든 대상들은 복원되게 된다(규칙 2-4).
더미다는 응용 프로그램 인터페이스 래핑 옵션이 선택되어 적용되면, 임포트 주소 테이블의 값을 변경시켜 임포트 주소 테이블을 추가적으로 변형하여 훼손시킬 수 있다. 또한, 더미다는 선택된 임의의 회수로 임포트 주소 테이블을 훼손하는 것도 가능하다(규칙 3, 규칙 3-1). 이와 같이 응용 프로그램 인터페이스 래핑 옵션이 적용된 경우, 원래의 응용 프로그램 인터페이스 코드는 난독화되고 동적 할당 메모리 영역에 복제되며(규칙 3-2), 임포트 주소 테이블 값은 복제된 응용 프로그램 인터페이스 코드의 주소로 변경된다(규칙 3-3). 더미다는 이에 대응하는 과정을 런타임 중에 재구성하여 임포트 주소 테이블을 재작성하게 된다.
한편, 도 2를 참조하여 설명한 바와 같이, 더미다에 의해 난독화된 프로그램은 옵션에 무관하게 공통된 제어 흐름 규칙을 갖는다(규칙 4, 규칙 4-1 내지 규칙 4-3).
일 실시예에 의하면, 프로세서(80)의 역난독화부(100)는 난독화된 프로그램(2)에 대한 역난독화를 수행하기 위해, 상술한 난독화 툴(예를 들어, 더미다)에 대한 정적 분석, 동적 분석 및 행동 분석으로부터 도출된 결과를 이용하여 제작 및 구현된 것일 수 있다. 구체적으로, 역난독화부(100)의 분석부(110) 및 복원부(160)는 이들 분석 결과에 따라서 난독화된 프로그램(2)을 분석하고 및/또는 원 프로그램(1)과 동일 또는 유사한 결과 프로그램을 복원하도록 마련된 것일 수 있다.
이하, 역난독화부(100)의 분석부(110) 및 복원부(160)에 대해 보다 상세히 설명하도록 한다.
도 4는 분석부의 일 실시예에 대한 블록도이다.
분석부(110)는 난독화된 프로그램(2)을 분석하여 분석 결과에 따라 원 프로그램(1)에 대한 정보를 추출 및 획득할 수 있으며, 필요에 따라 획득한 적어도 하나의 데이터를 복원부(160)로 전달할 수 있다. 일 실시예에 의하면, 분석부(110)는 난독화된 프로그램(2)을 구동시킨 후 난독화된 프로그램(2)의 구동 과정에서 적어도 하나의 정보를 추출함으로써, 난독화된 프로그램(2)을 분석할 수 있다.
도 4에 도시된 바를 참조하면, 분석부(110)는 난독화 판단부(111), 분석 방지 탐지부(113), 응용 프로그래밍 인터페이스 래핑 처리부(115), 임포트 주소 테이블 탐지부(117), 직접 호출/점프 탐지부(119), 원시 엔트리 포인트 확인부(121) 및 원시 코드 추출부(123)를 포함할 수 있으며, 입력부(131) 및 출력부(132)를 더 포함할 수도 있다. 실시예에 따라서, 이들 요소(111 내지 123, 131, 132) 중 적어도 하나는 생략 가능하며, 및/또는 이들 요소(111 내지 123, 131, 132) 외에 다른 요소가 더 추가되는 것도 가능하다.
입력부(131)는 분석부(110)에 의해 분석될 프로그램을 수신할 수 있다. 여기서 수신되는 프로그램은 난독화된 프로그램(2)을 포함할 수 있다. 입력부(131)는 수신한 프로그램을 난독화 판단부(111)로 전달할 수 있으며, 또한 실시예에 따라 분석 방지 탐지부(113)로 더 전송할 수도 있다.
난독화 판단부(111)는 입력부(131)로부터 전달된 프로그램이 난독화된 프로그램(2)인지 여부를 판단할 수 있다. 또한, 난독화 판단부(111)는 어느 난독화 툴을 이용하여 난독화가 수행되었는지 여부를 판단할 수도 있다. 다시 말해서, 난독화 판단부(111)는 난독화 툴을 식별할 수도 있다. 일 실시예에 의하면, 난독화 판단부(111)는 난독화 툴 특유의 내제적 특징을 이용하여 난독화된 프로그램(2)인지 여부를 판단할 수 있다. 여기서, 난독화 툴 특유의 내제적 특징은, 상술한 바와 같이 언패킹 루틴 또는 이에 포함된 바이트 패턴 등을 포함할 수 있다. 만약 프로그램으로부터 난독화 툴 특유의 내제적 특징이 확인 또는 검출되면, 난독화 판단부(111)는 입력된 프로그램이 난독화된 프로그램(2)이라고 판단할 수 있다. 판단 결과는 분석 방지 탐지부(113)로 전달될 수 있으며, 필요에 따라서 응용 프로그래밍 인터페이스 래핑 처리부(115)로 더 전달될 수도 있다. 반대로 프로그램으로부터 난독화 툴 특유의 내제적 특징이 확인 또는 검출되지 않으면, 난독화 판단부(111)는 입력된 프로그램이 난독화된 프로그램(2)은 아니라고 판단할 수 있다. 이 경우, 역난독화 과정은 종료되며, 필요에 따라 역난독화가 종료되었다는 정보가 메시지 등의 형태로 역난독화 장치(70)의 출력부(미도시)를 통해 사용자에게 제공될 수 있다.
분석 방지 탐지부(113)는 난독화부(11)에 의해 제공되는 분석 방지 옵션을 적용하여 프로그램(2)이 난독화되었는지 여부를 판단할 수 있다. 분석 방지 탐지부(113)는, 예를 들어, 핀 툴을 이용하여 분석 방지 옵션의 적용 여부를 판단할 수 있다. 구체적으로, 핀 툴은 멀티 스레드 프로그램을 추적할 수 있다. 따라서, 도 2에 도시된 바와 같이 더미다1 섹션(22)에 의해 멀티 스레드 기반 분석 방지 코드(26)의 구동이 개시되면, 핀 툴은 이를 감지하고 감지 결과를 획득할 수 있게 된다. 이에 따라, 분석 방지 탐지부(113)는 분석 방지 옵션의 적용 여부를 판단할 수 있게 되고 또한 난독화 여부도 함께 판단할 수 있게 된다.
응용 프로그래밍 인터페이스 래핑 처리부(115)는 응용 프로그래밍 인터페이스 래핑 옵션(API wrapping option)에 관한 처리를 수행할 수 있다. 상술한 바와 같이, 응용 프로그래밍 인터페이스 래핑 옵션이 적용된 경우에는 임포트 주소 테이블이 추가적으로 변형되게 되므로, 응용 프로그래밍 인터페이스 래핑 처리부(115)는 임포트 주소 테이블의 보다 적절한 복원을 위해 응용 프로그래밍 인터페이스 래핑 옵션의 적용 여부를 판단할 수 있다.
일 실시예에 의하면, 인터페이스 래핑 처리부(115)는 식별부(115-1) 및 원주소 획득부(115-2)를 포함할 수 있다.
식별부(115-1)는 난독화된 프로그램(2)이 응용 프로그래밍 인터페이스 래핑 옵션을 이용하여 난독화되었는지 여부를 판단할 수 있다. 예를 들어, 더미다와 같은 난독화 툴의 경우, 원 프로그램(1)이 응용 프로그래밍 인터페이스 래핑 옵션을 적용하여 난독화되면 임포트 주소 테이블 값을 변경하게 된다(규칙 3 참조). 이 때, 응용 프로그래밍 인터페이스 래핑 옵션은 원래의 응용 프로그래밍 인터페이스 코드를 난독화하고, 이를 읽기/쓰기/실행 권한을 이용하여 동적으로 할당된 메모리 공간에 복제한다(규칙 3-2 참조). 응용 프로그래밍 인터페이스 래핑 처리부(115)는 이를 이용하여 인터페이스 래핑 옵션이 적용되었는지 여부를 판단 및 결정할 수 있다. 구체적으로 예를 들어, 응용 프로그래밍 인터페이스 래핑 처리부(115)는 읽기/쓰기/실행 권한을 갖는 소정의 함수(예를 들어, NtAllocateVirtualMemory API)를 감시(모니터링)함으로써 인터페이스 래핑 옵션의 적용 여부를 결정할 수 있다.
만약 식별부(115-1)가 난독화된 프로그램(2)이 응용 프로그래밍 인터페이스 래핑 옵션을 적용하여 난독화되었다고 판단되면, 원주소 획득부(115-2)는 원래의 응용 프로그래밍 인터페이스 주소를 획득할 수 있다. 이 경우, 원주소 획득부(115-2)는 응용 프로그래밍 인터페이스 복제 지시에 포함된 원 주소 및 목적지 주소를 감시함으로써 원래의 응용 프로그래밍 인터페이스 주소를 획득할 수도 있다. 획득된 원래의 응용 프로그래밍 인터페이스 주소는 소정의 로그, 일례로 언래핑 로그(unwrapping log)에 기록될 수 있다. 이와 같이 획득된 응용 프로그래밍 인터페이스 주소는 임포트 주소 테이블 로그(IAT log)의 보완을 위해 이용될 수 있다.
임포트 주소 테이블 탐지부(117)는 임포트 주소 테이블을 탐지하고, 탐지 결과를 기반으로 어디에 임포트 주소 테이블이 존재하는지 결정할 수 있다. 예를 들어, 더미다는 텍스트 섹션(.text), 데이터 섹션(.data) 및 임포트 주소 테이블 섹션을 최상단 섹션에 병합시킨다(규칙 1-1 참조). 따라서, 임포트 주소 테이블 탐지부(117)는 최상단 섹션에 대한 메모리 쓰기를 감시하여 임포트 주소 테이블의 위치를 결정할 수 있다. 결정 결과는 임포트 주소 테이블 로그에 기록될 수 있다. 실시예에 따라서, 임포트 주소 테이블 탐지부(117)는, 식별부(115-1)가 응용 프로그래밍 인터페이스 래핑 옵션이 적용되었다고 판단한 경우에는 원주소 획득부(115-2)가 응용 프로그래밍 인터페이스 주소를 획득한 이후에 임포트 주소 테이블을 탐지하도록 설계될 수도 있다.
직접 호출/점프 탐지부(119)는 직접 호출/점프 명령문의 위치를 확인 및 기록할 수 있다. 또한, 직접 호출/점프 탐지부(119)는 직접 호출/점프 명령문의 간접 주소를 확인 및 기록할 수도 있다. 간접 주소는 직접 호출/점프 명령문을 간접 호출/점프 명령문으로 변환하기 위한 것이다(규칙 2-3 참조). 구체적으로, 더미다의 경우, 패킹된 코드, 데이터 및 제거된 임포트 주소 테이블을 난독화된 프로그램(2)에 특별한 규칙으로 다시 작성하며, 또한 임포트 주소 테이블을 복원한 경우에, 복원된 임포트 주소 테이블이 호출/점프에 의해 참조되면, 모든 참조된 간접 호출/점프 명령문을 직접 호출/점프 명령문으로 변환시키도록 설계되어 있다. 따라서, 이와 같은 직접 호출/점프 명령문을 간접 호출/점프 명령문으로 다시 변환시키기 위해, 직접 호출/점프 탐지부(119)는 직접 호출/점프 명령문의 간접 주소를 더 획득하여 기록할 수 있다. 직접 호출/점프 명령문의 위치 또는 직접 호출/점프 명령문에 대한 간접 주소는 직접 호출/점프 로그에 기록될 수 있다.
원시 엔트리 포인트 확인부(121)는 원시 엔트리 포인트(OEP, Original Entry Point)를 확인하고 기록할 수 있다. 원시 엔트리 포인트의 확인 및 기록을 위해서, 입력부(131)를 통해 입력된 난독화된 프로그램(2)이 실행 중인지 여부를 결정할 수 있다. 더미다는 원래의 코드, 데이터 및 임포트 주소 테이블의 위치를 다른 위치로 옮기지는 않으며(규칙 1-3 참조), 난독화된 프로그램(2)이 언패킹된 코드 섹션(25)으로 점프하는 경우, 원시 엔트리 포인트가 목표 주소로 설정된다(규칙 4-3 참조). 원시 엔트리 포인트 확인부(121)는 이와 같은 점을 이용하여 언패킹된 코드 섹션(25)에서 프로그램(2)의 실행 여부를 확인하고 이를 기반으로 원시 엔트리 포인트를 확인하고 기록하게 된다. 확인된 원시 엔트리 포인트는 원시 엔트리 포인트 로그에 기록될 수 있다.
원시 코드 추출부(123)는 원시 코드 및 원시 데이터 중 적어도 하나를 추출할 수 있으며, 예를 들어 난독화된 프로그램(2)이 언패킹된 코드 섹션(25)으로 점프한 이후에 원시 코드 및 원시 데이터 중 적어도 하나를 추출할 수 있다. 구체적으로, 더미다는 난독화된 프로그램(2)이 언패킹된 코드 섹션(25)으로 점프하면, 모든 프로세스가 완료되도록 설계되어 있으며(규칙 2-4 참조), 이에 따라 패킹되거나, 암호화되거나, 압축되거나 및/또는 제거된 모든 객체는 복원되게 된다. 이에 따라 원시 코드 추출부(123)는 난독화된 프로그램(2)의 원시 코드 및 원시 데이터 중 적어도 하나를 획득할 수 있게 된다.
출력부(132)는 상술한 바에 따라 획득한 정보를 출력할 수 있다. 예를 들어, 출력부(132)는 임포트 주소 테이블 탐지부(117)가 획득한 임포트 주소 테이블에 대한 정보(일례로, 임포트 주소 테이블의 위치를 저장하고 있는 로그), 직접 호출/점프 탐지부(119)가 획득한 직접 호출/점프에 대한 정보(일례로 직접 호출/점프 명령문의 위치 또는 직접 호출/점프 명령문에 대한 간접 주소를 포함하고 있는 로그), 원시 엔트리 포인트 확인부(121)에 의해 확인된 원시 엔트리 포인트에 대한 정보(일례로 원시 엔트리 포인트 로그), 원시 코드 추출부(123)에 의해 추출된 원시 코드 및 원시 코드 추출부(123)에 의해 추출된 원시 데이터 중 적어도 하나를 출력할 수 있다. 필요에 따라서, 출력부(132)는 분석 방지 탐지 결과나 응용 프로그램 인터페이스 래핑 식별 및 처리 결과 등을 더 출력할 수도 있다.
출력부(132)에 의해 출력된 정보는 복원부(160)로 전달될 수 있다. 실시예에 따라서, 출력부(132)는 획득한 정보의 전부 또는 일부를 포괄하여 복원부(160)에 전달할 수도 있고 또는 정보가 획득될 때마다 획득한 정보의 전부 또는 일부를 복원부(160)에 전달할 수도 있다.
도 4에는 상술한 난독화 판단부(111), 분석 방지 탐지부(113), 응용 프로그래밍 인터페이스 래핑 처리부(115), 임포트 주소 테이블 탐지부(117), 직접 호출/점프(DCJ, Direct Call & Jump) 탐지부(119), 원시 엔트리 포인트 확인부(121) 및 원시 코드 추출부(123)가 순차적으로 동작하여 정보를 획득하는 것으로 도시되어 있으나, 이들(111 내지 123)의 동작 및 처리 순서는 도 4에 도시된 바에 한정되는 것은 아니다. 이들(111 내지 123)의 동작 및 처리 순서는 설계자의 판단에 따라 임의적으로 변경될 수도 있다.
도 5는 복원부의 일 실시예에 대한 블록도이다.
복원부(160)는 원 프로그램(1)과 동일 또는 유사한 결과 프로그램을 생성할 수 있다. 이에 따라 원 프로그램(1)이 복원될 수 있다.
실시예에 따라서, 복원부(160)는 분석부(110)로부터 원 프로그램(1)에 대한 정보(들)를 수신하고, 수신한 정보(들)를 기반으로 결과 프로그램을 생성할 수도 있다. 이 경우, 복원부(160)는 분석부(110)의 분석이 종료된 이후에 복원 과정을 수행하여 결과 프로그램을 생성할 수도 있고, 또는 분석부(110)의 분석 과정이 진행되는 동안에 복원 과정을 수행하여 결과 프로그램을 생성할 수도 있다. 후자의 경우, 분석부(110)는 분석에 따라 소정의 정보가 획득되면, 분석의 종료 여부와 무관하게 획득한 정보를 복원부(160)로 전송하고, 복원부(160)는 수신한 정보를 실시간으로 또는 비실시간으로 이용하여 결과 프로그램을 생성 및 복원할 수 있다. 복원부(160)는 입력된 난독화된 프로그램(2)과 원 프로그램(1)에 대한 정보를 기반으로, 원 프로그램(1)에 대응하는 프로그램(즉, 결과 프로그램)을 완전히 재구성할 수 있기 때문에, 복원부(160)에 의해 결과 프로그램은 바로 실행이 가능한 장점이 있다. 또한, 복원부(160)는 사용자(예를 들어, 분석가)의 조작 없이도 자동적으로 결과 프로그램의 생성이 가능하므로, 사용자의 편의가 개선되는 효과도 얻을 수 있다.
도 5에 도시된 바를 참조하면, 복원부(160)는 패치부(161), 압축 처리부(163), 엔트리 포인트 처리부(165), 임포트 디렉터리 테이블 구축부(167, IDT 구축부), 임포트 주소 테이블 구축부(169, IAT 구축부), 간접 호출/점프(ICJ, Indirect Call & Jump) 처리부(171) 및 프로그램 생성부(173)를 포함할 수 있다. 또한, 복원부(160)는 입력부(181) 및 출력부(182)를 더 포함할 수 있다. 실시예에 따라서, 이들 요소(163 내지 173, 181, 182) 중 적어도 하나는 생략 가능하며, 및/또는 이들 요소(163 내지 173, 181, 182) 외에 다른 요소가 더 추가되는 것도 가능하다.
입력부(181)는 난독화된 프로그램(2)을 수신할 수 있고, 및/또는 분석부(110)의 출력부(132)에서 출력되는 정보를 수신할 수 있다. 여기서, 출력부(132)에서 출력되는 정보는 임포트 주소 테이블에 대한 정보, 직접 호출/점프에 대한 정보, 원시 엔트리 포인트에 대한 정보, 원시 코드 및 원시 데이터 중 적어도 하나를 포함할 수 있다.
입력부(181)는 수신한 프로그램 및/또는 정보를 패치부(161), 압축 처리부(163), 엔트리 포인트 처리부(165), 임포트 디렉터리 테이블 구축부(167), 임포트 주소 테이블 구축부(169), 간접 호출/점프 처리부(171) 및 프로그램 생성부(173) 중 적어도 하나로 전달할 수도 있다. 이 경우, 입력부(181)는 수신한 프로그램 및/또는 정보를 각각에 대응하는 요소(163 내지 173)로 전달할 수 있다. 예를 들어, 입력부(181)는 분석부(110)에 의해 추출된 코드 및 데이터를 패치부(161)에 전달할 수도 있고, 엔트리 포인트에 대한 정보를 엔트리 포인트를 처리하는 EP 처리부(165)로 전달할 수도 있다.
패치부(161)는 원시 코드 및/또는 원시 데이터를 패치할 수 있다. 원시 코드 및/또는 원시 데이터는 상술한 분석부(110)의 원시 코드 추출부(123)가 추출한 것일 수 있다. 패치부(161)는 코드 및/또는 데이터의 패치 결과를 압축 처리부(163)나 엔트리 포인트 처리부(165) 등으로 전달할 수 있다.
압축 처리부(163)는 각각의 섹션(예를 들어, 데이터 섹션(24) 또는 코드 섹션(25))의 압축 및 압축 해제와 관련된 처리를 수행할 수 있다. 일 실시예에 의하면, 압축 처리부(163)는 압축 여부 판단부(163-1) 및 압축 해제부(163-2)를 포함할 수 있다.
압축 여부 판단부(163-1)는 난독화된 프로그램(2)이 압축되었는지 여부를 판단할 수 있다. 예를 들어, 난독화된 프로그램(2)이 데이터 섹션(24) 및/또는 코드 섹션(25)을 포함하는 경우, 압축 여부 판단부(163-1)는 이들 섹션(24, 25) 각각 또는 이들 섹션(24, 25) 모두의 원시 섹션(raw section)의 크기를, 대응하는 가상 섹션(virtual section)의 크기와 서로 비교함으로써, 난독화된 프로그램(2)의 압축 여부를 판단할 수도 있다.
압축 해제부(163-2)는 압축 여부 판단부(163-1)의 판단 결과를 기반으로 압축 해제(decompression)를 수행할 수 있다. 예를 들어, 만약 코드 섹션(25) 및/또는 데이터 섹션(24)이 압축되어 있다고 판단되면, 코드 섹션(25)에 대한 정보 및/또는 데이터 섹션(24)에 대한 정보를 수정하여 원 프로그램(1)에 대응하는 결과 프로그램의 정확한 재구축이 가능하게 할 수 있다.
엔트리 포인트 처리부(165)는 분석부(110), 보다 구체적으로는 원시 엔트리 포인트 확인부(121)에 의해 추출된 엔트리 포인트를 패치할 수 있다.
임포트 디렉터리 테이블 구축부(167)는 추출된 임포트 주소 테이블 로그를 이용하여 임포트 디렉터리 테이블을 구축할 수 있다. 더미다는 난독화 시 임포트 디렉터리 테이블도, 임포트 주소 테이블과 동일하게 훼손시키나, 복원 시에는 임포트 디렉터리 테이블을 재작성하지 않는다. 그러나, 더미다는 런타임에서 임포트 주소 테이블을 특정한 위치(예를 들어, 원 프로그램(1)의 임포트 주소 테이블과 동일한 위치)에 재작성하므로, 재작성된 임포트 주소 테이블 및 함수 명칭을 이용하면 임포트 디렉터리 테이블을 복원할 수 있게 된다.
임포트 주소 테이블 구축부(169)는 임포트 주소 테이블을 복원할 수 있다. 일 실시예에 의하면, 주소 테이블 구축부(169)는 임포트 주소 테이블의 복원을 위해 함수의 명칭을 이용할 수 있다. 물론 주소 테이블 구축부(169)는 함수의 서수(ordinal)나 가상 주소를 추출하여 임포트 주소 테이블을 구축하는 것도 가능하나, 핀 툴 등의 도구를 이용하는 경우에는 함수의 서수나 가상 주소의 추출은 함수의 명칭의 추출에 비해 상대적으로 어려울 수 있다.
간접 호출/점프 처리부(171)는 직접 호출/점프 명령문을 수정하여 간접 호출/점프 명령문을 획득할 수 있다. 간접 호출/점프 처리부(171)는 이를 위해서 직접 호출/점프 로그에 기록된 직접 호출/점프 명령문의 간접 주소를 참조할 수도 있다.
프로그램 생성부(173)는 패치부(161), 압축 처리부(163), 엔트리 포인트 처리부(165), 임포트 디렉터리 테이블 구축부(167), 임포트 주소 테이블 구축부(169) 및 간접 호출/점프 처리부(171)의 처리 결과를 기반으로 결과 프로그램을 구축한다. 이에 따라 원 프로그램(1)에 대응하는 프로그램의 복원 및 획득이 가능해 진다.
상술한 분석부(110) 및 복원부(160) 중 적어도 하나는, 동일하게 또는 일부 변형되어, 더미다 이외의 다른 난독화 툴(예를 들어, 윈 라이선스 또는 브이엠프로텍트 등)로 난독화된 프로그램(2)의 역난독화에도 적용될 수 있다.
예를 들어, 윈 라이선스에 의해 난독화된 프로그램(2)은 더미다에 의해 난독화된 프로그램(2)과 그 구조가 본질적으로 동일 또는 유사하므로, 상술한 분석부(110) 및 복원부(160)를 동일하게 또는 이를 일부 변형시켜 윈 라이선스에 의해 난독화된 프로그램(2)으로부터 원 프로그램(1)을 복원할 수 있다.
브이엠프로텍트는 더미다에 비해 상대적으로 적은 옵션을 제공하되, 임포트 보호 옵션(import protect option)을 적용하는 경우 임포트 주소 테이블을 훼손하지 않는다. 또한, 브이엠프로텍트는 더미다1 섹션 및 더미다2 섹션과 유사하게 두 개의 섹션(vmp1 및 vmp0 섹션)을 실행시켜 코드 및 데이터 섹션을 복원하도록 하되, 텍스트 섹션 그 자체를 난독화하지는 않는다. 따라서, 임포트 주소 테이블의 복구 없이도 원 코드와 거의 전적으로 동일한 지점에 복원된다. 이런 점을 고려하면, 상술한 분석부(110) 및 복원부(160)와 동일하거나 또는 일부 변형된 방법을 이용하면, 브이엠프로텍트를 기반으로 난독화된 프로그램(2)으로부터도 원 프로그램(1)을 복원할 수 있다.
이하, 도 6 내지 도 8을 참조하여 역난독화 방법의 여러 실시예에 대해서 설명하도록 한다.
도 6은 역난독화 방법의 일 실시예에 대한 흐름도이다.
도 6에 도시된 바에 의하면, 먼저 원 프로그램이 난독화된다(200). 난독화는 소정의 난독화 툴을 기반으로 수행될 수 있으며, 예를 들어, 더미다, 윈 라이선스 및/또는 브이엠프로텍트를 기반으로 수행될 수 있다. 이에 따라 난독화된 프로그램이 생성된다. 원 프로그램의 난독화는 난독화 장치에 의해 수행될 수 있으며, 난독화 장치는 후술하는 역난독화 장치와 동일한 장치일 수도 있고 또는 서로 상이한 장치일 수도 있다. 난독화 장치가 역난독화 장치와 서로 상이한 경우, 양자는 동종의 장치일 수도 있고 이종의 장치일 수도 있다.
일 실시예에 의하면, 원 프로그램이 난독화되는 경우, 적어도 하나의 난독화 옵션 중 적어도 하나의 옵션이 선택 및 적용될 수 있다. 예를 들어, 안티 디버거 옵션, 안티 덤퍼 옵션, 안티 패칭 옵션, 애플리케이션 또는 자원에 대한 압축화 옵션, 시큐어 엔진 코드 또는 자원의 압축화 옵션, 응용 프로그램 인터페이스 래핑 옵션 또는 엔트리 포인트 난독화 옵션 등 이진 코드 수준에서 분석 방지를 위한 다양한 옵션이 난독화 과정에서 적용 가능하다.
역난독화 장치는 난독화 장치로부터 난독화된 프로그램을 획득할 수 있다(202). 예를 들어, 역난독화 장치는 적어도 하나의 메모리 매체나 유무선 통신 네트워크 등을 통해 난독화된 프로그램을 획득할 수도 있다. 만약 난독화 장치가 역난독화 장치와 동일한 장치라면, 난독화 종료 즉시 역난독화 장치는 난독화된 프로그램을 획득하게 된다.
역난독화 장치는, 사용자의 조작에 따라 수동으로 또는 미리 정의된 설정에 따라 자동으로 난독화된 프로그램의 분석을 개시할 수 있다(210). 난독화된 프로그램의 분석에 따라서 역난독화 장치는 원 프로그램에 대응하는 결과 프로그램의 생성을 위한 각종 정보를 획득할 수 있다. 예를 들어, 역난독화 장치는 분석 결과에 따라 분석 방지 적용 여부에 대한 정보, 응용 프로그래밍 인터페이스 래핑 여부에 대한 정보, 임포트 주소 테이블, 직접 호출 및 점프 명령문, 원시 엔트리 포인트, 원시 코드 및 원시 데이터 중 적어도 하나를 획득할 수 있다. 실시예에 따라서, 난독화된 프로그램의 분석 과정(210)은 생략될 수도 있다.
역난독화 장치는 난독화 되기 전의 원 프로그램에 대응하는 결과 프로그램을 생성할 수도 있다(230). 이 경우, 역난독화 장치는 난독화된 프로그램의 분석이 종료되거나(즉, 단계 210의 종료 이후) 또는 난독화된 프로그램이 분석되는 동안(즉, 단계 210과 더불어)에 결과 프로그램을 생성할 수 있다. 역난독화 장치는, 결과 프로그램의 생성을 위해 분석 과정(210)에서 획득된 적어도 하나의 정보를 이용할 수도 있다. 실시예에 따라서, 결과 프로그램의 생성 과정(230)은 생략되는 것도 가능하다.
이하 난독화된 프로그램의 분석 과정(210)의 일 실시예에 대해 보다 상세히 설명한다.
도 7은 난독화된 프로그램의 분석 방법의 일 실시예에 대한 흐름도이다.
도 7에 도시된 바에 의하면, 난독화된 프로그램의 분석을 위해 먼저 입력된 프로그램이 난독화된 프로그램인지 여부가 판단될 수 있다(211). 또한, 필요에 따라, 난독화를 위해 어떤 프로그램이 이용되었는지 여부도 판단될 수 있다. 일 실시예에 의하면, 난독화된 프로그램인지 여부의 판단은 상술한 난독화 툴의 내제적 특징을 이용하여 수행 가능하다. 난독화 툴의 내제적 특징은, 예를 들어, 언패킹 루틴이나 바이트 패턴 등을 포함할 수 있다.
만약 프로그램이 난독화되지 않았다고 판단되면(211의 NO), 프로그램의 분석 과정(210)은 종료되고, 복원 과정(230)도 수행되지 않는다.
반대로 만약 프로그램이 난독화되었다고 판단되면(211의 YES), 원 프로그램의 난독화 과정(200)에서 분석 방지 옵션의 적용 여부가 순차적으로 판단될 수 있다(212). 예를 들어, 분석 방지 옵션의 적용 여부는 멀티 스레드 프로그램의 추적이 가능한 핀 툴을 이용하여 판단될 수 있다.
또한, 응용 프로그래밍 인터페이스 래핑 옵션의 적용 여부도 판단될 수 있다(213). 예를 들어, 인터페이스 래핑 옵션의 적용 여부는, 읽기, 쓰기 및 실행 권한을 갖는 소정의 함수를 감시함으로써 수행될 수도 있다.
만약 응용 프로그램 인터페이스 래핑 옵션이 적용되었다면(213의 YES), 이에 응하여 원래의 응용 프로그래밍 인터페이스 주소가 획득될 수 있다(214). 이 경우, 응용 프로그래밍 인터페이스 복제 지시에 포함된 원 주소 및 목적지 주소를 감시함으로써 원래의 응용 프로그래밍 인터페이스 주소가 획득될 수 있다. 획득된 응용 프로그래밍 인터페이스 주소는 언래핑 로그 등에 기록될 수 있다. 이와 반대로 응용 프로그램 인터페이스 래핑 옵션이 적용되지 않았다면(213의 아니오), 응용 프로그래밍 인터페이스 주소의 획득 과정은 수행되지 않을 수 있다.
또한, 임포트 주소 테이블 탐지되고, 이에 따라 임포트 주소 테이블이 존재하는 위치가 결정될 수 있다(215). 더미다의 경우 텍스트 섹션, 데이터 섹션 및 임포트 주소 테이블 섹션을 최상단 섹션에 병합하므로 최상단 섹션에 데이터 기록 여부를 감시하면 임포트 주소 테이블의 위치를 알 수 있게 된다. 응용 프로그래밍 인터페이스 주소가 획득된 경우(214)에는 임포트 주소 테이블은 응용 프로그래밍 인터페이스 주소를 이용하여 보완될 수도 있다.
또한, 직접 호출/점프 명령문을 탐지하여 직접 호출/점프 명령문의 위치가 확인 및 기록될 수도 있다(216). 이 경우, 직접 호출/점프 명령문의 간접 주소도 마찬가지로 확인 및 기록될 수도 있으며, 이는 직접 호출/점프 명령문을 간접 호출/점프 명령문으로 다시 변환하기 위해서 수행될 수 있다. 직접 호출/점프 명령문의 위치 또는 직접 호출/점프 명령문에 대한 간접 주소는, 예를 들어 직접 호출/점프 로그에 기록될 수도 있다.
한편, 원시 엔트리 포인트가 확인될 수 있다(217). 더미다의 경우, 원래의 코드, 데이터 및 임포트 주소 테이블의 위치는 다른 위치로 옮겨지지 않고 또한 난독화된 프로그램은 원시 엔트리 포인트가 목표 주소로 설정하여 언패킹된 코드 섹션으로 이동하므로, 먼저 난독화된 프로그램의 실행 여부를 판단하고 순차적으로 원시 엔트리 포인트가 확인될 수 있다. 확인된 원시 엔트리 포인트는, 일례로 원시 엔트리 포인트 로그에 기록될 수 있다.
또한, 원시 코드 및/또는 원시 데이터가 추출될 수 있다(218). 난독화된 프로그램이 언패킹된 코드 섹션으로 점프 이동하여 난독화된 모든 객체는 복원되므로, 이를 이용하여 원시 코드 및/또는 원시 데이터를 추출할 수 있다.
추출된 임포트 주소 테이블에 대한 정보, 직접 호출/점프에 대한 정보, 원시 엔트리 포인트에 대한 정보, 원시 코드 및/또는 원시 데이터 등에 대한 정보가 출력된다(219). 출력된 정보는 복원 과정(220)을 위해 이용될 수 있다. 정보의 출력(219)은 상술한 동작(211 내지 218)이 모두 종료된 이후에 수행될 수도 있다. 또한, 정보의 출력(219)은 상술한 동작(211 내지 218)이 수행되는 도중에 수행되는 것도 가능하다. 이 경우, 정보의 출력(219)은 상술한 동작(212 내지 218) 중 적어도 하나가 수행되어 정보가 획득되면 즉시 또는 일정 시간 이내에 수행될 수도 있다.
상술한 동작들(211 내지 219)은 동시에 또는 이시에 수행될 수도 있으며, 이시에 수행되는 경우에는 순차적으로 수행될 수도 있다. 또한, 상술한 동작들(211 내지 219) 중에서 난독화 여부 판단(211)을 제외한 나머지 동작들(212 내지 219)은 상술한 바와 설계자의 선택에 따라서 상술한 바와 상이한 순서로 처리될 수 있다. 예를 들어, 직접 호출 및 점프를 탐지하는 동작(216)은 임포트 주소 테이블 탐지 동작(215) 이전에 수행될 수도 있고 또는 원시 엔트리 포인트 확인 동작(217) 이후에 수행될 수도 있다. 설계자의 선택에 따라서 동작(212 내지 219)의 일부는 생략되는 것도 가능하다. 또한, 분석 방지 옵션 적용 여부 판단 동작(212) 등은 생략될 수도 있다.
이하 결과 프로그램의 생성 과정, 즉 원 프로그램의 복원 과정(230)의 일 실시예에 대해 보다 상세히 설명하도록 한다.
도 8은 결과 프로그램의 복원 방법의 일 실시예에 대한 흐름도이다.
도 8에 도시된 바에 의하면, 원시 코드가 패치되고 필요에 따라 원시 데이터도 함께 패치될 수 있다(231). 원시 코드 및 원시 데이터는 난독화된 프로그램의 분석 동작(210)에 따라 획득된 것일 수 있다.
난독화된 프로그램이 압축되었는지 여부가 판단될 수 있다(232). 압축 여부의 판단은 데이터 섹션 및/또는 코드 섹션의 원시 섹션의 크기와 대응하는 가상 섹션의 크기의 상호 비교를 통해 수행될 수도 있다.
만약 난독화된 프로그램이 압축된 상태라면(232의 YES), 압축 해제가 수행될 수 있으며, 예를 들어 코드 섹션 및/또는 데이터 섹션에 대한 압축 해제가 수행될 수 있다(233). 만약 난독화된 프로그램이 압축된 상태가 아니라면(232의 NO), 압축 해제 동작(233)은 수행되지 않을 수 있다.
또한, 엔트리 포인트 패치가 수행될 수 있다(234). 엔트리 포인트는 상술한 원시 엔트리 포인트 확인 동작(217)에 의해 획득된 것일 수 있다.
임포트 디렉터리 테이블의 구축 동작이 수행될 수 있다(235). 임포트 디렉터리 테이블의 구축은 임포트 주소 테이블 로그를 이용하여 수행될 수 있으며, 특히 재작성된 임포트 주소 테이블 및 함수 명칭을 이용하여 수행될 수 있다.
임포트 주소 테이블의 복원 역시 수행될 수 있다(236). 이때, 함수의 명칭, 함수의 서수나 가상 주소 등을 통해서 임포트 주소 테이블은 복원될 수 있다.
간접 호출/점프 명령문이 획득할 수도 있으며(237), 간접 호출/점프 명령문은 직접 호출/점프 명령문을 수정하여 획득될 수 있다. 이를 위해서 직접 호출/점프 명령문의 간접 주소가 참조되는 것도 가능하다.
상술한 동작(231 내지 237)의 결과를 기반으로 결과 프로그램이 생성될 수 있다(238). 결과 프로그램은 원 프로그램과 동일하거나 또는 유사하게 생성될 수 있다. 상술한 동작들(231 내지 238)에 따르면, 원 프로그램의 포맷이 입력된 난독화된 프로그램 및 원본 정보를 이용하여 완전히 재구성되기 때문에, 생성된 결과 프로그램은 바로 실행이 가능하게 된다.
상술한 실시예에 따른 역난독화 방법, 분석 방법 및 복원 방법은 컴퓨터 장치에 의해 구동될 수 있는 프로그램의 형태로 구현될 수 있다. 여기서 프로그램은 프로그램 명령, 데이터 파일 및 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 프로그램은 기계어 코드나 고급 언어 코드를 이용하여 설계 및 제작된 것일 수 있다. 프로그램은 상술한 역난독화 방법, 분석 방법 및 복원 방법을 구현하기 위하여 특별히 설계된 것일 수도 있고, 컴퓨터 소프트웨어 분야에서 통상의 기술자에게 기 공지되어 사용 가능한 각종 함수나 정의를 이용하여 구현된 것일 수도 있다. 여기서, 컴퓨터 장치는 프로그램의 기능을 실현 가능하게 하는 프로세서나 메모리 등을 포함하여 구현된 것일 수 있으며, 필요에 따라 통신 장치를 더 포함할 수도 있다.
상술한 역난독화 방법, 분석 방법 및 복원 방법을 구현하기 위한 프로그램은 컴퓨터에 의해 판독 가능한 기록 매체에 기록될 수 있다. 컴퓨터에 의해 판독 가능한 기록 매체는 자기 테이프, 자기 디스크 저장 매체(하드 디스크 플로피 디스크 등), 광 기록 매체(콤팩트 디스크(CD), 디브이디(DVD) 또는 블루레이 디스크 등), 자기-광 기록 매체(플롭티컬 디스크 등) 및 반도체 저장 장치(롬, 램 또는 플래시 메모리 등) 등과 같이 컴퓨터 등의 호출에 따라 실행되는 특정 프로그램을 저장 가능한 다양한 종류의 하드웨어 장치를 포함할 수 있다.
이상, 역난독화 장치 및 역난독화 방법의 여러 실시예에 대해 설명하였으나, 장치 및 방법은 오직 상술한 실시예에 한정되는 것은 아니다. 해당 기술 분야에서 통상의 지식을 가진 자가 상술한 실시예를 기초로 수정 및 변형하여 구현 가능한 장치나 방법 역시 상술한 역난독화 장치 또는 역난독화 방법의 일례가 될 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성 요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나 다른 구성 요소 또는 균등물에 의하여 대치되거나 또는 치환되더라도 상술한 역난독화 장치 또는 역난독화 방법의 일 실시예가 될 수 있다.