xmin. guest@xmin ~ $
~/ $
IrfanView Jpeg_LS.dll 분석과 WinAFL 하네스 작성
[취약점 분석] 2025년 5월 23일

IrfanView Jpeg_LS.dll 분석과 WinAFL 하네스 작성

Process Monitor, IDA, WinDbg를 이용해 IrfanView의 Jpeg_LS.dll 플러그인 호출 흐름과 ReadJPEG_LS_W 인자를 분석하고, WinAFL 퍼징용 하네스를 작성한 기록입니다.

irfanviewjpeg-lsJpeg_LS.dllwinafldynamorioharnessidawindbgfuzzing

개요

이 글은 2025년 5월 23일 전후로 정리했던 IrfanView JpegLS.dll 분석 기록이다.

목표는 단순했다.

IrfanView가 .jls 파일을 열 때 어떤 DLL 함수가 호출되는지 확인하고, 그 함수의 인자를 맞춰 WinAFL에서 돌릴 수 있는 하네스를 작성한다.

분석 대상은 IrfanView 32-bit 환경에서 로드되는 JpegLS.dll 이고, 테스트 입력으로는 작은 JPEG-LS 샘플인 sample.jls 를 사용했다.

사용한 도구는 다음과 같다.

Process Monitor

IDA

WinDbg

Visual Studio

WinAFL

DynamoRIO

Process Monitor로 호출 흐름 보기

먼저 IrfanView에서 sample.jls 를 열면서 Process Monitor로 파일 접근 흐름을 확인했다.

ReadFile 이벤트의 call stack을 보면 IrfanView 본체인 iview32.exe 와 JPEG-LS 플러그인 DLL이 함께 보인다.

여기서 확인한 핵심은 다음 두 가지다.

iview32.exe 내부의 특정 call site에서 플러그인 함수가 호출된다.

.jls 파일 로딩은 JpegLS.dll 의 ReadJPEGLSW export 함수를 통해 진행된다.

이후 분석은 두 갈래로 진행했다.

1. iview32.exe에서 플러그인 함수를 어떻게 호출하는지 확인 JpegLS.dll의 ReadJPEGLSW 함수 인자와 역할 확인

iview32.exe의 플러그인 호출 지점

IDA에서 iview32.exe 의 호출 지점을 따라가면 LoadLibraryW , GetProcAddress , 그리고 함수 포인터 호출 흐름이 나온다.

정리하면 IrfanView는 대략 다음과 같은 방식으로 플러그인을 호출한다.

LibraryW = LoadLibraryW(LibFileName); ProcAddress = GetProcAddress(LibraryW, ProcName);