- Как проверить, что DLL-файл не подменил функции — пошаговое руководство через Dependency Walker
- Почему DLL подменяют — и почему это опасно
- Что делает Dependency Walker — и что он НЕ делает
- Пошаговая проверка: как найти подмену функций
- Таблица: что смотреть в Dependency Walker при подозрении на подмену
- Что делать, если ты нашёл подмену
- Частые ошибки — и почему они ловят даже опытных
- Когда использовать Dependency Walker — а когда нет
- Как лучше сделать — практические рекомендации
- Сценарии: что делать в разных ситуациях
- Итог: что делать прямо сейчас
Как проверить, что DLL-файл не подменил функции — пошаговое руководство через Dependency Walker
Ты работаешь с программой, которая внезапно начала падать, или твоя система ведёт себя странно — например, игра крашится при запуске, а в логах только «не найден символ» или «неверная версия DLL». Ты подозреваешь, что кто-то подменил системный или сторонний DLL-файл. Возможно, это вирус, мод, кряк или даже ошибочный обновление. Тебе нужно проверить, не подменены ли функции внутри DLL. И ты слышал про Dependency Walker — но не знаешь, как им пользоваться, чтобы увидеть именно подмену, а не просто список зависимостей.
Это не теория. Это то, что я делал десятки раз — когда проверял чужие программы на вредоносность, когда отлаживал крякнутые приложения, когда искал причину багов в старом ПО. Dependency Walker — старый, но живой инструмент. Он не идеален, но он работает. И если ты знаешь, на что смотреть, он покажет тебе подмену, даже если ничего не выглядит подозрительно.
Почему DLL подменяют — и почему это опасно
DLL-файлы — это библиотеки с функциями, которые программы используют для работы. Например, kernel32.dll содержит функции для работы с памятью, файлами, процессами. Если кто-то подменит этот файл — он может перехватить вызовы, украсть данные, отключить антивирус, или просто сломать программу.
Подмена может быть:
- Вредоносной — троян, руткит, шпионское ПО;
- Непреднамеренной — некорректное обновление, конфликт версий;
- Целенаправленной — моды для игр, кряки, патчи, которые заменяют функции для обхода лицензий.
Важно: подмена — это не просто «другая версия файла». Это когда имя файла осталось тем же, но его содержимое изменилось. И именно это ты и хочешь обнаружить.
Что делает Dependency Walker — и что он НЕ делает
Dependency Walker (или depends.exe) — это утилита, которая показывает, какие DLL-файлы использует программа, и какие функции из них вызываются. Он не сканирует на вирусы. Он не сравнивает версии файлов. Он не говорит, «это вредоносно». Он показывает структуру вызовов.
Твоя задача — смотреть не на то, что он показывает, а на то, чего нет или что выглядит не так, как должно быть.
Пошаговая проверка: как найти подмену функций
- Скачай Dependency Walker
Сайт Microsoft больше не поддерживает его, но последняя рабочая версия (2.2.6000) доступна в архивах. Ищи по запросу «Dependency Walker 2.2.6000 download». Не скачивай с подозрительных сайтов — файл должен быть подписан как «Microsoft Corporation» и весить около 1,5 МБ. Запускай от имени администратора. - Открой нужный DLL-файл
Запустиdepends.exe. В меню выбери File → Open. Укажи путь к DLL, который ты подозреваешь. Например:C:\Windows\System32\user32.dllилиC:\Program Files\MyGame\game.dll. Не открывай .exe — открывай именно .dll, если хочешь проверить именно его содержимое. - Посмотри на список экспортируемых функций
В левой панели будет дерево зависимостей. Разверни узел Exports. Ты увидишь список всех функций, которые этот DLL предоставляет другим программам. Это — его «публичный интерфейс». - Сравни с эталоном
Теперь тебе нужно знать, какие функции должны быть в этом DLL. Где взять эталон? Есть два варианта:- Сравни с оригиналом на чистой системе (например, виртуальной машине с чистой Windows);
- Используй базу данных известных DLL — например, dll-files.com или Sysinternals (хотя там не все функции перечислены).
Если ты не знаешь, что должно быть — ищи по названию DLL + «standard exports». Например: «kernel32.dll standard exports». Ты найдёшь списки, где указаны десятки функций, которые должны быть в нормальном файле.
Если в твоём DLL пропущены стандартные функции — это тревожный знак. Если есть новые функции с названиями вроде
HookNetConnect,GetPasswordFromMemoryилиSendDataToC2— это почти наверняка подмена. - Проверь адреса и смещения (RVAs)
Перейди на вкладку Details в правой панели. Выбери функцию из списка экспортов. Внизу появится информация: Ordinal, Address, Offset.
Важно: в нормальных DLL адреса экспортируемых функций находятся в определённых диапазонах. Если ты видишь, что функция имеет адрес0x00000000— это ошибка. Если адрес выходит за пределы размера файла — это подмена. Если адрес функции совпадает с адресом другой, известной функции — это перехват (хук). - Смотри на импорты внутри DLL
В левой панели разверни узел Imports. Ты увидишь, какие DLL-файлы сам этот файл использует. Если ты видишь, чтоuser32.dllимпортирует функции изevilhook.dll, которого не должно быть в системе — это красный флаг. Если DLL импортирует функции из несуществующих или подозрительных файлов — это означает, что он сам подменён и пытается вызвать вредоносный код. - Сравни с версией оригинала
Правой кнопкой по DLL → «Properties» → вкладка «Details». Сравни версию файла с эталонной. Например, в Windows 10kernel32.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в командной строке от администратора. Если это файл программы — переустанови программу.
Частые ошибки — и почему они ловят даже опытных
Люди делают три ошибки, из-за которых пропускают подмену:
- Смотрят только на список зависимостей
Они думают: «Всё загружается — значит, всё нормально». Но Dependency Walker показывает, что DLL загружается — но не показывает, что внутри неё делает функция. Подмена может быть в реализации, а не в наличии. - Сравнивают только версии
Вредоносный файл может иметь ту же версию, что и оригинал. Это не редкость. Крякнутые DLL часто «подделывают» версию. Размер и содержимое — важнее. - Игнорируют импорты внутри 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 на подмену:
- Всегда сравниваю с эталоном. Без эталона — анализ бесполезен.
- Проверяю размер, дату и хеш (SHA-256) файла. Хеш — самый надёжный способ. Если он не совпадает — файл подменён. Используй PowerShell:
Get-FileHash C:\path\to\file.dll. - Если файл системный — запускаю
sfc /scannowперед анализом. Он восстановит повреждённые файлы. - Если файл сторонний — проверяю его на VirusTotal до открытия в Dependency Walker.
- Не доверяю одному инструменту. 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. Не жди. Делай так:
- Скачай Dependency Walker 2.2.6000 (надёжный источник — архивы Microsoft).
- Открой подозрительный DLL-файл.
- Проверь список экспортируемых функций — есть ли неизвестные или отсутствуют ли ключевые?
- Проверь импорты — нет ли подозрительных DLL в списке зависимостей самого файла?
- Сравни размер и дату файла с эталоном.
- Загрузи файл на VirusTotal.
- Если что-то не так — не запускай программу. Восстанови файл через sfc или переустанови софт.
Dependency Walker — не магия. Это лупа. Он не говорит, «это вирус». Он показывает, что в файле не так. Твоя задача — увидеть несоответствие. И если ты увидел — ты уже на шаг ближе к решению.
Информация в этой статье носит ознакомительный характер. Подозрения на подмену системных файлов могут указывать на серьёзные угрозы безопасности. При подтверждении аномалий рекомендуется обратиться к специалисту по информационной безопасности или использовать профессиональные средства анализа.
