PDF Reader 퍼징 도전기(2) - DLL분석

728x90

타겟 Reader = ezPDF Reader, 무료

 

DLL 단순 유추

단순히 dll의 이름만 보고 유추했을때의 기능

ezPDF2HWP -> PDF파일을 HWP파일로 변환

ezPDFConvertDll -> DLL을 변환?

ezPDFConvertModule -> 모듈 변환 관련 DLL

ezPDFEditorExt32/64 -> 에디터 관련 DLL

JpgDll -> jpg다루는 dll?

PDF2HTML/Office -> PDF를 HTML과 오피스 형식으로 변환하는 DLL?

DLL 분석

Export 부분을 중점으로 해서 함수를 분석하였다.

ezPDFConvertDLL에서는 파일에 데이터를 쓰는?듯한 이름을 가진 함수를 발견

ezPDF2HWP.dll에서 export 부분을 찾았을 때 pdf를 hwp로 변경하는 부분이다.

pdf2hwpW, pdf2hwpA함수

이 pdf2hwpW를 보면 아래와 같은 부분이 존재한다.

위 사진을 보면 fopen, fclose, stgCreateDocfile을 봤을때 파일을 열거나 닫는 부분 쪽에서 취약점이 터질것이라고 판단하였다.

 

Harness 작성

harness를 작성하기 전, 자주 쓰이는 함수에 대해서 설명하고자 한다.

 

__declspec 키워드를 사용하여 DLL에서 데이터, 함수, 클래스 또는 클래스 멤버 함수를 내보낼 수 있다.

DLL (동적 라이브러리)에 구현한 함수를 외부로 노출시키려면 __declspec( dllexport ) 키워드를 사용해야하며 __declspec( dllexport ) 키워드가 붙지 않은 함수는 외부에서 호출할 수 없게된다.

__declspec(dllexport) void __cdecl Function1(void);

StgCreateDocfile

HRESULT StgCreateDocfile(
  [in]  const WCHAR *pwcsName,
  [in]  DWORD       grfMode,
  [in]  DWORD       reserved,
  [out] IStorage    **ppstgOpen
);

reserved -> 

ppstgOpen ->

grfMode -> 

pwcsName -> 

 

SetDllDirectory

BOOL SetDllDirectoryA(
  [in, optional] LPCSTR lpPathName
);

lpPathName -> The directory to be added to the search path(디렉터리를 탐색 경로에 포함)

 

728x90