Как проверить, что DLL-файл не подменил функции — пошаговое руководство через Dependency Walker

Как проверить, что DLL-файл не подменил функции — пошаговое руководство через Dependency Walker

Ты работаешь с программой, которая внезапно начала падать, или твоя система ведёт себя странно — например, игра крашится при запуске, а в логах только «не найден символ» или «неверная версия DLL». Ты подозреваешь, что кто-то подменил системный или сторонний DLL-файл. Возможно, это вирус, мод, кряк или даже ошибочный обновление. Тебе нужно проверить, не подменены ли функции внутри DLL. И ты слышал про Dependency Walker — но не знаешь, как им пользоваться, чтобы увидеть именно подмену, а не просто список зависимостей.

Это не теория. Это то, что я делал десятки раз — когда проверял чужие программы на вредоносность, когда отлаживал крякнутые приложения, когда искал причину багов в старом ПО. Dependency Walker — старый, но живой инструмент. Он не идеален, но он работает. И если ты знаешь, на что смотреть, он покажет тебе подмену, даже если ничего не выглядит подозрительно.

Почему DLL подменяют — и почему это опасно

DLL-файлы — это библиотеки с функциями, которые программы используют для работы. Например, kernel32.dll содержит функции для работы с памятью, файлами, процессами. Если кто-то подменит этот файл — он может перехватить вызовы, украсть данные, отключить антивирус, или просто сломать программу.

Подмена может быть:

  • Вредоносной — троян, руткит, шпионское ПО;
  • Непреднамеренной — некорректное обновление, конфликт версий;
  • Целенаправленной — моды для игр, кряки, патчи, которые заменяют функции для обхода лицензий.

Важно: подмена — это не просто «другая версия файла». Это когда имя файла осталось тем же, но его содержимое изменилось. И именно это ты и хочешь обнаружить.

Что делает Dependency Walker — и что он НЕ делает

Dependency Walker (или depends.exe) — это утилита, которая показывает, какие DLL-файлы использует программа, и какие функции из них вызываются. Он не сканирует на вирусы. Он не сравнивает версии файлов. Он не говорит, «это вредоносно». Он показывает структуру вызовов.

Твоя задача — смотреть не на то, что он показывает, а на то, чего нет или что выглядит не так, как должно быть.

Пошаговая проверка: как найти подмену функций

  1. Скачай Dependency Walker
    Сайт Microsoft больше не поддерживает его, но последняя рабочая версия (2.2.6000) доступна в архивах. Ищи по запросу «Dependency Walker 2.2.6000 download». Не скачивай с подозрительных сайтов — файл должен быть подписан как «Microsoft Corporation» и весить около 1,5 МБ. Запускай от имени администратора.
  2. Открой нужный DLL-файл
    Запусти depends.exe. В меню выбери File → Open. Укажи путь к DLL, который ты подозреваешь. Например: C:\Windows\System32\user32.dll или C:\Program Files\MyGame\game.dll. Не открывай .exe — открывай именно .dll, если хочешь проверить именно его содержимое.
  3. Посмотри на список экспортируемых функций
    В левой панели будет дерево зависимостей. Разверни узел Exports. Ты увидишь список всех функций, которые этот DLL предоставляет другим программам. Это — его «публичный интерфейс».
  4. Сравни с эталоном
    Теперь тебе нужно знать, какие функции должны быть в этом DLL. Где взять эталон? Есть два варианта:
    • Сравни с оригиналом на чистой системе (например, виртуальной машине с чистой Windows);
    • Используй базу данных известных DLL — например, dll-files.com или Sysinternals (хотя там не все функции перечислены).

    Если ты не знаешь, что должно быть — ищи по названию DLL + «standard exports». Например: «kernel32.dll standard exports». Ты найдёшь списки, где указаны десятки функций, которые должны быть в нормальном файле.

    Если в твоём DLL пропущены стандартные функции — это тревожный знак. Если есть новые функции с названиями вроде HookNetConnect, GetPasswordFromMemory или SendDataToC2 — это почти наверняка подмена.

  5. Проверь адреса и смещения (RVAs)
    Перейди на вкладку Details в правой панели. Выбери функцию из списка экспортов. Внизу появится информация: Ordinal, Address, Offset.
    Важно: в нормальных DLL адреса экспортируемых функций находятся в определённых диапазонах. Если ты видишь, что функция имеет адрес 0x00000000 — это ошибка. Если адрес выходит за пределы размера файла — это подмена. Если адрес функции совпадает с адресом другой, известной функции — это перехват (хук).
  6. Смотри на импорты внутри DLL
    В левой панели разверни узел Imports. Ты увидишь, какие DLL-файлы сам этот файл использует. Если ты видишь, что user32.dll импортирует функции из evilhook.dll, которого не должно быть в системе — это красный флаг. Если DLL импортирует функции из несуществующих или подозрительных файлов — это означает, что он сам подменён и пытается вызвать вредоносный код.
  7. Сравни с версией оригинала
    Правой кнопкой по DLL → «Properties» → вкладка «Details». Сравни версию файла с эталонной. Например, в Windows 10 kernel32.dll версии 10.0.19041.1 должен иметь размер 1,2 МБ и дату 2020 года. Если у тебя версия 10.0.19041.1, но размер 1,8 МБ — это подозрительно. Даже если версия совпадает — размер и дата могут отличаться. Это первый признак подмены.

Таблица: что смотреть в Dependency Walker при подозрении на подмену

Что проверить Норма Признак подмены Что значит
Экспортируемые функции Список известных, стандартных (например, CreateFileA, LoadLibraryA) Неизвестные функции, с подозрительными именами Файл добавил свои функции — вероятно, для перехвата данных
Отсутствие функций Все стандартные функции присутствуют Нет 3+ ключевых функций (например, VirtualAlloc, WriteProcessMemory) Файл обрезан или заменён на упрощённую версию
Адреса функций (RVAs) В пределах размера файла, не нулевые Адрес = 0x00000000, или выходит за пределы файла Файл повреждён или функции переопределены в памяти
Импорты (внутренние зависимости) Использует только системные DLL (kernel32, user32, ntdll) Импортирует неизвестные DLL, например, hooker.dll, netapi32x.dll Файл загружает вредоносный код из сторонних файлов
Размер и дата файла Совпадает с эталоном для твоей ОС Размер отличается на 10%+, дата не соответствует обновлениям системы Файл заменён — даже если имя и версия совпадают

Что делать, если ты нашёл подмену

Если ты увидел подозрительные функции, неизвестные импорты или аномальные адреса — не паникуй. Действуй по шагам:

  • Не запускай программу, которая использует этот DLL — она может быть уже заражена.
  • Создай копию подозрительного DLL в отдельную папку. Не удаляй его сразу — тебе может понадобиться для анализа.
  • Проверь на VirusTotal. Загрузи DLL на virustotal.com. Если 5+ антивирусов ругаются — это вредоносный файл.
  • Сравни с копией на чистой системе. Если есть доступ к другому компьютеру с той же ОС — скопируй туда DLL и проверь его через Dependency Walker. Совпадают ли функции? Размер? Дата?
  • Восстанови файл. Если это системный DLL — используй sfc /scannow в командной строке от администратора. Если это файл программы — переустанови программу.

Частые ошибки — и почему они ловят даже опытных

Люди делают три ошибки, из-за которых пропускают подмену:

  1. Смотрят только на список зависимостей
    Они думают: «Всё загружается — значит, всё нормально». Но Dependency Walker показывает, что DLL загружается — но не показывает, что внутри неё делает функция. Подмена может быть в реализации, а не в наличии.
  2. Сравнивают только версии
    Вредоносный файл может иметь ту же версию, что и оригинал. Это не редкость. Крякнутые DLL часто «подделывают» версию. Размер и содержимое — важнее.
  3. Игнорируют импорты внутри DLL
    Если DLL импортирует функции из msvcrt.dll — это нормально. Если из evilloader.dll — это тревога. Но многие не смотрят на эту вкладку вообще.

Когда использовать Dependency Walker — а когда нет

Этот инструмент — не панацея. Он не подходит для всех ситуаций.

  • Используй Dependency Walker, если:
    • Ты работаешь с .dll-файлами на Windows XP–10;
    • Ты анализируешь старое ПО, где нет современных инструментов;
    • Ты не можешь запустить анализатор вроде IDA Pro (он дорог и сложен);
    • Тебе нужно быстро проверить экспорты и импорты без глубокого дебага.
  • Не используй Dependency Walker, если:
    • Ты работаешь с 64-битными DLL на Windows 11 — он может не открыть их корректно;
    • Ты хочешь проанализировать код внутри функций — для этого нужен дизассемблер;
    • Ты проверяешь .NET-сборки — там используется другая структура (IL-код).

Если ты работаешь с 64-битными системами — используй API Monitor или Process Monitor от Sysinternals. Они показывают, какие функции реально вызываются в процессе. Dependency Walker — это «статический» анализ. А реальная подмена проявляется в «динамике».

Как лучше сделать — практические рекомендации

Вот что я делаю на практике, когда проверяю DLL на подмену:

  1. Всегда сравниваю с эталоном. Без эталона — анализ бесполезен.
  2. Проверяю размер, дату и хеш (SHA-256) файла. Хеш — самый надёжный способ. Если он не совпадает — файл подменён. Используй PowerShell: Get-FileHash C:\path\to\file.dll.
  3. Если файл системный — запускаю sfc /scannow перед анализом. Он восстановит повреждённые файлы.
  4. Если файл сторонний — проверяю его на VirusTotal до открытия в Dependency Walker.
  5. Не доверяю одному инструменту. Dependency Walker — первый шаг. Потом — Process Monitor, потом — PE-bear или CFF Explorer для анализа структуры PE-файла.

Сценарии: что делать в разных ситуациях

Ситуация 1: Игра крашится, и ты подозреваешь мод.
Ты установил мод, который заменяет game.dll. Теперь игра не запускается. Открой game.dll в Dependency Walker. Сравни экспорты с оригиналом (скачай его с официального сайта). Если появились функции вроде DisableAntiCheat — это мод. Если пропали ключевые функции — мод сломал DLL. Удаляй его.

Ситуация 2: Windows начал тормозить, в логах — ошибки в kernel32.dll.
Открой kernel32.dll в Dependency Walker. Проверь, есть ли все стандартные функции. Если VirtualAlloc отсутствует — это серьёзно. Запусти sfc /scannow. Если не помогло — используй DISM: DISM /Online /Cleanup-Image /RestoreHealth. Если проблема осталась — переустанавливай Windows.

Ситуация 3: Ты анализируешь чужую программу, и она подозрительно работает.
Открой все DLL, которые она использует. Проверь импорты. Если одна из DLL импортирует ws2_32.dll и advapi32.dll — это нормально. Если она импортирует httpclient.dll — это подозрительно. Найди этот файл на диске. Загрузи на VirusTotal. Если он не из известного источника — это вредоносный патч.

Итог: что делать прямо сейчас

Если ты читаешь это — значит, у тебя есть подозрение на подмену DLL. Не жди. Делай так:

  1. Скачай Dependency Walker 2.2.6000 (надёжный источник — архивы Microsoft).
  2. Открой подозрительный DLL-файл.
  3. Проверь список экспортируемых функций — есть ли неизвестные или отсутствуют ли ключевые?
  4. Проверь импорты — нет ли подозрительных DLL в списке зависимостей самого файла?
  5. Сравни размер и дату файла с эталоном.
  6. Загрузи файл на VirusTotal.
  7. Если что-то не так — не запускай программу. Восстанови файл через sfc или переустанови софт.

Dependency Walker — не магия. Это лупа. Он не говорит, «это вирус». Он показывает, что в файле не так. Твоя задача — увидеть несоответствие. И если ты увидел — ты уже на шаг ближе к решению.

Информация в этой статье носит ознакомительный характер. Подозрения на подмену системных файлов могут указывать на серьёзные угрозы безопасности. При подтверждении аномалий рекомендуется обратиться к специалисту по информационной безопасности или использовать профессиональные средства анализа.

Оцените статью
PEFile — Безопасность и технологии простым языком