
IrfanView Jpeg_LS.dll 분석과 WinAFL 하네스 작성
Process Monitor, IDA, WinDbg를 이용해 IrfanView의 Jpeg_LS.dll 플러그인 호출 흐름과 ReadJPEG_LS_W 인자를 분석하고, WinAFL 퍼징용 하네스를 작성한 기록입니다.
개요
이 글은 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);
댓글