맨위로

기타2011. 12. 23. 22:07

안티 리버싱 기술  

 

-안티리버싱이 필요한 이유

 안티 리버싱 기술이 특별하게 필요한 경우가 있다 .

그의 예는 복제 방지 기술과 디지털 저작권 관리 기술이다. 리버서가 복제 방지 기술 내부를 살펴보지 못하게 방해하거나 차단하는 것은 효과적인 보호 수단을 만드는데 있어서 상당히 중요한 부분이다.

 

 -기본적인 안티리버싱 방법

*심볼 정보제거 : 리버서를 방해하기 위해서 사용될 수 있는 가장 확실한 방법은 프로그램안의 문자열 정보를 제거 하는 것이다. 바이트 코드 기반으로 컴파일 되지 않은 프로그램의 경우 단순히 프로그램 실행 이미지에서 심볼 정보를 제거 하면된다. 바이트 코드기반 프로그램의 경우는 실행이미지 안에 클래스이름, 클래스 멤버 이름 , 초기화된 전역 객체의 이름 등등 많은 심볼 정보가 포홤된다. 그러므로 이런 정보는 반드시 제거해야만한다. 대부분의 바이트 코드 난독기의 가장 기본적인 특징은 모든 심볼의 이름을 의미 없는 문자열로 바꾸는 것이다.

 

*프로그램 난독화 : 프로그램의 기능은 동일하게 유지 시키면서 가독성을 떨어뜨리기 위해 다양한 방법으로 프로그램 구조의 외형,로직,데이터,조직 등을 변경하는 것이다.

 

*안티 디버깅 코드 삽입 : 다른 안티 리버싱 기법으로는 프로그램 실행 중에 리버서가 프로그램 코드를 하나하나 따라가면서 코드의 자세한 내부 구현 내용을 알아내는 분석방법인 동적 분석을 방해 하는 방법이있다.

이를위해서 프로그램은 디버거가 제대로 동작하지 못하게 프로그램 내부적으로 연산을 수행한다.

 

 -안티 디스어셈블러

프로그램이 리버싱되는 것을 방지 하거나 억제 하기 위한 수단으로 디스어셈블러를 바보로 만드는 것은 특별히 견고한 안티리버싱 방법이 아니다. 그럼에도 불구하고 널리 사용된다 . 원리는 간단하다. 유동적인 길이의 명령을 사용하는 IA-32 프로세서와 같은 프로세서 아키텍처에서는 디스어셈블러가 명령의 시작을 혼동하게 만들어서 결국 잘못된 명령을 처리하게 속이는 것이 가능하다. 이렇게 되면 디스어셈블러는 코드의 나머지 부분을 잘못 해석해서 디스어셈블하게 된다.

 

 -디스어셈블에 대한 일반적인 사항

*선형 스윕 디스어셈블 (linear sweep)

프로그램안에서 순차적으로 디스어셈블하는 방법

*재귀 순회 디스어셈블  (recursive traversal)

프로그램안에서의 코드 흐름을 따라가면서 명령을 분석하므로 프로그램이 어는 특정 주소로 분기하면 해당 주소에 대한 디스어셈블도 수행하는 좀더 지능적인 디스어셈블 방법이다.

 

표 리버싱 툴과 디스어셈블러 아키텍처


 디스어셈블러/디버거 이름

디스어셈블리 방법 

 ollydbg

재귀 순회 

 NuMega SoftICE

 선형 스윕

 Microsoft Windbg

 선형 스윕

 IDA PRO

 재귀 순회

 PEBrowse Professional

 재귀 순회


-코드난독화

위의 소개된 안티 리버싱 기술은 공격자를 성가시게 만드는 플랫폼 의존적인 트릭이다.

진짜 코드 난독화는 기능을 그대로 유지하되 상당히 읽기 힘든 형태로 코드를 변환하는 것이다.

이는 플랫폼에 의존 적이지 않다. 코드 난독화를 위한 변환의 복잡도에 대한 레벨을 potency라고 하며 이는 프로그램안에 포함된 술어의 개수 ,특정 코드 시퀸스의 깊이와 같은 전통적인 소프트웨어 복잡도 측정 방법으로 측정할 수 있다. 프로그램에 로직이나 산술 연산을 추가함으로써 프로그램의 복잡도를 높이는 것이상으로 난독화 변환은 쉽게 원래 상태로 복원이 되어서는 안 된다. 많은 경우 변환 과정에서 무의미한 데이터를 만들어 내는 엉뚱한 명령이 추가된다. 이점 떄문에 역난독기(deobfuscator)을 만드는 것이 가능하다.

 

-역난독기

난독화된 프로그램에 다양한 데이터 흐름 분석 알고리즘을 적용해서 의미 있는 명령을 선별하고 모든 무의미한 명령을 자동으로 제거해서 원래의 코드 구조로 복원시켜 주는 프로그램이다.

 

-난독화툴

 

*strongBit Technology의 EXECryptor : 이툴은 PE 이미지 파일에 대한 다양한 종류의 코드 난독화 코드를 분석하기가 매우 힘들어진다.

*star Technologies 의 복제 방지 제품들 : 강력한 코드 난독화 툴 이상으로서 완전한 하드웨어 기반의 복제 방지 기능을 제공하거나 순수한 소프트웨어 기반의 복제 방지 기능을 제공한다.

 

 -제어흐름변환

제어 흐름 변환은 코드의 가독성을 떨어뜨리는 방향으로 프로그램의 흐름과 순서를 변경하는 것이다.

 

계산 변환 은 프로그램의 제어 흐름 구조를 변경함으로써 코드의 가독성을 떨어뜨리는 것이 목적이며, 프로그램의 원래 기능은 그대로 유지 시키면서 프로그램 코드를 하이레벨 언어로 변환하기 힘든 방향으로 변경한다.

 

집합변환 은 프로그래머가 프로그램 작성 중에 만든 하이 레벨 구조를 파괴해서 프로그램 코드의 하이레벨 구조를 더이상 의미 없게 만들어 버린다.

 

순서변환 은 프로그램의 연산 순서를 최대한 임의적으로 바꿔서 프로그램의 가독성을 떨어뜨리는 것으로 상대적으로 덜 강력한 변환이다.

'기타' 카테고리의 다른 글

안티 리버싱 기술  (0) 2011.12.23
산술 연산 플래그  (0) 2011.12.23
PE 파일 포맷의 디렉토리  (0) 2011.12.23
리버싱 툴  (0) 2011.12.23

Posted by STIH

댓글을 달아 주세요