2024-04-26 06:30 (금)
런타임에서 ActiveX 메소드 주소 알아내기
상태바
런타임에서 ActiveX 메소드 주소 알아내기
  • 길민권
  • 승인 2012.02.06 00:27
이 기사를 공유합니다

ActiveX를 분석하시는 분들을 위한 글
ActiveX는 갈수록 힘을 잃어가고 있지만 보안 컨설팅 수행할 땐 빠질 수 없습니다. ActiveX를 분석하시는 분들을 위한 글입니다.
 
ActiveX의 메소드들은 COM 기반으로 되어 있기 때문에 일반적인 PE 바이너리들처럼 IDA등으로 로드했을 때 메소드 주소가 직관적으로 보이지 않습니다. 대신 COM에서 제공하는 인터페이스를 통해 ActiveX가 보유하고 있는 메소드의 이름이나 인자들의 타입만을 볼 수 있죠.
 
즉, 해당 메소드가 어떤 역할을 하는지 알기 위해서는 메소드의 주소를 알아내는 것이 필요합니다. 그래야 Reversing을 할 수 있기 때문이죠.
 
메소드의 주소를 알아내는 방법은 크게 2가지가 있는데, 동적 리버싱과 정적 리버싱입니다. 정적 리버싱으로 알아내기 위해서는 COM 구조를 잘 알고 있어야 하는데, COM 자체에 관심이 있는 분이 아니라면 동적 리버싱으로 메소드의 주소만 알아내어도 충분합니다. ActiveX 메소드 분석이 목적이신 분들은 동적으로 알아내는 것을 권장합니다. 그게 훨씬 간단하기 때문이죠.
 
동적으로 ActiveX 메소드의 주소를 알고 싶으신 분들은 아래의 문서를 참고하시면 됩니다. 아래의 문서는 windbg로 진행하는 방법을 설명해두었는데, 당연히 ollydbg 등으로도 가능합니다.
 
-dvlabs.tippingpoint.com/blog/2009/06/01
 
문서가 좀 길지만 중요한 부분은 OLEAUT32.DLL의 DispCallFunc() 함수입니다.
 
-msdn.microsoft.com/en-us/library/windows
 
해당 함수를 리버싱해본 결과, 단순합니다. 여러가지 전처리 작업을 수행하지만 핵심은 호출할 함수의 리턴 타입에 따라 필요한 정보들을 세팅하고, 메소드를 호출하는 것입니다.
 
또한, 이 함수에는 call 어셈블리 명령어가 하나 밖에 없어서 식별하기가 무척 용이하죠. 위 tippoingpoint의 링크만 봐도 쉽게 해결 가능하지만 정리 차원에서 블로그를 포스팅합니다. windbg로 수행하는 방법은 위 링크에 잘 나와있으니 ollydbg로 하는 방법에 대해서 설명하겠습니다.
 
1. Ollydbg로 IE 열기
2. [Ctrl + G]를 눌러 OLEAUT32.DispCallFunc 입력하여 해당 함수로 이동

3. “CALL ECX” 인스트럭션 찾은 후 breakpoint 설정 (WIN XP SP3 기준으로, 1개 밖에 없습니다.)

4. 분석하려는 ActiveX를 호출하는 페이지 로딩
5. 최초 breakpoint 시점에서의 ECX는 분석하려는 ActiveX와는 관련이 없기 때문에 Conditional breakpoint를 이용하여 무시 (Shift + F2로 Conditional breakpoint 설정 가능)

(로딩때마다 모듈 주소가 변하여서, 하위 2바이트에 대해서만 조건 검사를 하도록 설정하였음)
6. Continue후 ActiveX 페이지 재로딩, 여기서부터 메소드의 주소를 참고할 수 있음
[글. beistlab 이승진]
■ 보안 사건사고 제보 하기

▷ 이메일 : mkgil@dailysecu.com

▷ 제보 내용 : 보안 관련 어떤 내용이든 제보를 기다립니다!

▷ 광고문의 : jywoo@dailysecu.com

★정보보안 대표 미디어 데일리시큐 / Dailysecu, Korea's leading security media!★