Главная » Статьи » Крэкинг

Внедрение .dll в чужое приложение
В связи с тем, что проблема с внедрением .dll файлов в чужое приложение достаточно актуальная, я решил написать полное руководство для новичка, по данному вопросу.

Начну с инструментов которые нам потребуются для работы с внедрением .dll файла

1. OllyDbg - это отладчик уровня User Space, который приобрел большую популярность среди пользователей всего мира. 
Сейчас для OllyDbg написано множество плагинов, так что работать с ним одно удовольствие. 
OllyDbg обладает хорошей функциональностью, это делает его пригодным для решения различных задач и исследования кода любой сложности. 
Интерфейс отладчика полностью настраиваемый: фон рабочих окон, цвет и размер шрифта, подсветка определенных ассемблерных инструкций и многое другое.

Скачать

2. Pe Explorer - программа для просмотра и редактирования PE-файлов - EXE, DLL, SYS, DRV, CPL, OCX, BPL, DPL, SCR и др. 
Включает в себя PE Header Viewer, Exported/Imported API Function Viewer, API Function Syntax Lookup, Resource Viewer/Editor, Dependency Scanner & Disassembler.
Кроме всего прочего, с помощью PE EXPLORER можно без труда русифицировать самые разнообразные win-приложения... 

Скачать

3. Утилита для системных программистов, позволяющая редактировать или просто просматривать многие части исполняемых файлов, создавать дамп из памяти, оптимизировать и анализировать их.

Скачать

Итак, после того как мы немного ознакомились с программами которыми будем работать, можно уже приступать к работе.
Первым делом запускаем наш отладчик OllyDbg и с помощью него открываем main.exe 
File -> Open -> main.exe

[Image]

После того как main.exe загрузился, мы увидим его большой ассемблерный код, что нам сейчас потребуется сделать так это запомнить или записать на бумажку либо в блокнот не важно smile1.gif точку входа в программу, на английском языке это звучит как EntryPoint.  

[Image]

Как вы заметили на картинке я указал стрелочку на цифирки, которые выделены белым цветом, эти цифирки называются смещением, на английском языке это звучит как Offset, значит так, как я сказал выше нужно запомнить либо записать этот Offset который выделен белым цветом.
Далее мы должны найти пустое место куда будем внедрять наш .dll файл, для этого скроллим либо нажимаем кнопку "PageDown" пока не увидим следующую картину

[Image]

Теперь мы готовы внедрять .dll файл, для этого нажимаем Правый клик -> Folow in Dump -> Selection, и видим как нас перенесло в нижнее окно, под названием Hex Dump.
Теперь нам надо задать имя нашей .dll, для этого необходимо выделить столько точек сколько имеет символов ваша .dll учитывая и ".dll", например:
f1UZ.dll имеет 8 символов, получается необходимо выделить 8 точек и нажать пробел, и в появившемся окне, в строке Ascii вписываем имя вашей .dll

[Image]

Нажмите ок либо Enter, теперь мы видим результат проделанной работы.
Далее отсчитываем несколько строчек, и вписываем следующие команды:
PUSH и указываем на первый offset где начинается красный текст, как мы видим у меня он 00801015
PUSH 00801015
Далее нам нужно вызвать функцию LoadLibraryA, для этого нажимаем Правый клик -> Search For -> Name (label) in current module либо Ctrl+N, и вспике этих функций ищем ту которая нам необходима.

[Image]

После того как мы её нашли, кликаем на неё один раз и нажимаем Enter, кликаем ещё один разок на CALL DWORD PTR DS:[<KERNEL32.LoadLibraryA>] и нажимаем Enter.

[Image]

Далее нам необходимо нажать на CALL DWORD PTR DS:[80220C], скопировать эту функцию и перейти в то место где мы внедряем наш .dll файл и вставить ниже нашей команды PUSH 00801015, то есть
PUSH 008010105
CALL DWORD PTR DS:[80220C]

[Image]

Теперь нам нужно сделать прыжок на EntryPoint, делается это следующим образом
Вписываем ниже CALL DWORD PTR DS:[80220C]
JMP и тот offset который я вам говорил чтобы вы запомнили, тот offset который был выделен белым цветом.

PUSH 008010105
CALL DWORD PTR DS:[80220C]
JMP 007D37E6

[Image]

Далее нам необходимо сохранить всю проделанную работу, для этого выделяем все изменения и нажимаем Правый клик -> Copy to executable -> Selection -> Правый клик -> Save file

[Image]

Забыл о самом главном, перед тем как сохранить изменения, запомните offset команды PUSH 008010105, на этот offset мы будем изменять EntryPoint

Дело осталось за малым, необходимо изменить Entry Point для того чтобы .exe приложение смогло прочитать наш .dll файл.
Выше я описал программу Pe Explorer, но причинам того что лимит на её использование у меня закончился, прийдется использовать другую программу под названием LordPe.

Теперь запускаем программу LordPe и с помощью этой программы открываем main.exe
PE Editor -> main.exe

[Image]

В строке Entry Point мы видим следующие цифирки, 003B23A0, если вы ещё помните, это начальный Entry Point, тот что я говорил запомнить ещё в самом начале.
Сейчас мы будем его изменять.
Обратите внимание на эту картинку http://radikal.ru/F/s49.radikal.ru/i125/09...07e187.jpg.html, обратите внимание на offset команды PUSH 00801015 -> 00801026.
Этот offset мы должны вписать в программу LordPe где строка Entry Point, как вы заметили я вписал не 00801026 а 00301026, почему я так сделал объясню чуть позже, собственно вы должны сделать точно так же.

[Image]

Нажимаем Save -> Ok и радуемся smile1.gif
Категория: Крэкинг | Добавил: -=Hellsing=- (17.06.2009) | Автор: f1UZ
Просмотров: 5219 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 1
1 Андрей  
0
Занятная конечно темка по внедрению длл. Пол дня убил, пытаясь повторить Ваш метод, но ничего не получилось. Делаю всё по шагам как тут, но вылезают непонятные ошибки( Вдобавок несоответствия в инструкцииЮ ка например вот это - офсет в начале на скриншоте был 007D37E6, а вконце вы говорите что энтри поинт у вас был 003B23A0 и lordpe его определил правильно. Помимо этого куча непонятного + отсутствие некоторых скриншотов, которые возможно помогли бы разобраться луше( Помоему здесь просто напутано всё что можно) Я извиняюсь конечно. Думал таким мтодом попробовать внедрить дллку в файл онлайн игры. Просто ситуация такая, что есть некие забугорные ребята, котрые распростроняют эту длл за деньги. Она содержит дополнительные функции, и цепляется к ехе файлу игры во время его работы (методом инъекции) программой winjeсt.exe И всёбы было замечательно, еслиб игра постоянно не обновлялась) Каждый раз при выходе нового патча разработчики игры изменяют этот экзешник, и длл перестаёт инъектица) И приходится ждать когда те ребята переделают свою хак длл. Изменения в длл они судя по всему делают незначительные. И очень хотелось бы разобраться самому, что именно надо изменять, и почему она перестаёт инъектиться) Если бы вы помогли мне разобраться с этим, я даже заплатил бы вам за работу. Если есть у Вас такое желание, то мы могли бы связаться и обсудить это)

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]