avatar_Человек

Как инжектить хак DLL в main.exe , установка защиты в main.exe

Автор Человек, 2009 Апр. 21, 01:37

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] mu onlinedllзащитаollydbgmain.exeхакинжектlordpe

Человек

Очень много людей интересуется, как же всётаки можно инжектировать свою dll в main.exe. Даже были такие, которые думали, что ето не возможно..

Ну что же, начнём. Для работы нам понадобится:
1) OllyDBG.
2) Прямые руки.
3) Немного времени(на пиво вконце).

Приступим:

1)Откройте main.exe с ollydbg и запишите тот оффсет, на которым начинается наша программа, так называемая точка входа(к примеру на листок).
2) Ищём чистый оффсет
3)Выберите одby свободный оффсет и в dump (RB->Follow to Dumb->Selection),напишите имя своего dll.
4) Теперь выберите какой-то другой оффсет и там зделайте push вашего оффсета с названием dll.
5) Теперь мы должны Загрузить Dll..., чтобы получить команду на легком способе, который мы только и ищем
Нажмите CTRL+N (STRG +N), новое окно откроет и затем напечатает LoadLibraryA и когда Вы будете видеть это только нажимаем ентер а вдругом окне вводим его название( Another ).
6) следуйте одним из call dword и нажмите PRESS
7) Теперь сохраним (RB->copy->copy All, RB->Copy To Executable->Selection).

Всё, наша длл загружена. Помните, если вы загружаете больше чем 1 lkk? то прижок(jmp) должен стоять после второй.

Simp1e

врятли она так будит работать тут и 50% работы ненаписано

samick

Цитата: serz от 2009 Апр. 21, 00:37  Очень много людей интересуется, как же всётаки можно инжектировать свою dll в main.exe. Даже были такие, которые думали, что ето не возможно..

Ну что же, начнём. Для работы нам понадобится:
1) OllyDBG.
2) Прямые руки.
3) Немного времени(на пиво вконце).

Приступим:

1)Откройте main.exe с ollydbg и запишите тот оффсет, на которым начинается наша программа, так называемая точка входа(к примеру на листок).
2) Ищём чистый оффсет
3)Выберите одby свободный оффсет и в dump (RB->Follow to Dumb->Selection),напишите имя своего dll.
4) Теперь выберите какой-то другой оффсет и там зделайте push вашего оффсета с названием dll.
5) Теперь мы должны Загрузить Dll..., чтобы получить команду на легком способе, который мы только и ищем :)
Нажмите CTRL+N (STRG +N), новое окно откроет и затем напечатает LoadLibraryA и когда Вы будете видеть это только нажимаем ентер а вдругом окне вводим его название( Another ).
6) следуйте одним из call dword и нажмите PRESS
7) Теперь сохраним (RB->copy->copy All, RB->Copy To Executable->Selection).

Всё, наша длл загружена. Помните, если вы загружаете больше чем 1 lkk? то прижок(jmp) должен стоять после второй.
Это вообще с какогото сайта дёрнуто ,я уже читал это,если copy pasteищ то указывай источник.

Everybody

serz на самом деле перепрочитав тму несколько раз ничего непонятно серавно. Либо перевел не точно либо не полностью.

Человек

Цитата: Everybody от 2009 Апр. 21, 12:56  serz на самом деле перепрочитав тму несколько раз ничего непонятно серавно. Либо перевел не точно либо не полностью.


Я сам в этом не шарю..тупо скатал с другого сайта.. на всякий малоли кому пригодиться....(Перевод слово в слово)... ;)

Simp1e

я не считаю что эта информация комуто нужна...... так как она не полная

Exec

так от куда скатал то?где источник? если ето не работает или непонятно совсем то зачем выкладывать?

xakum

почти все верно было написано. вот постарался разжевать немного:


1) Открываем main.exe в ollydbg и записываем оффсет начала программы(, так называемая точка входа(к примеру на листок)).
Будем сразу рассматривать на примере:
...
0073C6B8   /> /55                  PUSH EBP <<<<<<<< курсор будет стоять здесь
0073C6B9   |. |8BEC                MOV EBP,ESP
0073C6BB   |. |6A FF               PUSH -1
...
записываем на листок себе "OEP = 0073C6B8"

2) Нажимаем CTRL+N. Появится список используемых API программой. в этом списке найдите LoadLibraryA.
в моем примере это выглядит так :
...
Address=00756204 Section=.rdata Type=Import  (Known) Name=KERNEL32.LoadLibraryA
...

записываем на листок себе адрес вызова "Address LoadLibraryA = 00756204"

2) Промотайте "основной код" в самый низ к последним ассемблерным инструкциям, после которых идут 00 байты (ищём чистый оффсет - надо ж так сказануть ^^)

3)Установив курсор на 00 байтах отступив немного от последних ассемблерных инструкции (Правый клик мышкой ->Follow to Dumb->Selection),напишите имя своего dll (например SuperAntiCheat.dll) и нажимаем CTRL+A для нового анализа кода дебагером.


должно получится типа:

00755A70     .  77 7A 44 61 74 61 2>ASCII "SuperAntiCheat.dll",0
00755A7B        00                  DB 00
00755A7C        00                  DB 00

записываем на листок себе оффсет названия античита "Dll_name = 00755A70"

5) Теперь смещаемся вниз к примеру на 30 оффсетов  (в случае примера это получился 00755AA0 оффсет (по русски "смещение указателя от начала программы") )

на 00755AA0 нажимаем "пробел" для вызова окна редактирования и пишем туда инструкцию PUSH <оффсет названия DLL - Dll_name> и нажимаем Ok.

в примере:

PUSH 755A70

(где 755A70 это то что мы записывали на листочке в Dll_name)

Причем обратите внимание что ваш указатель сместится на несколько оффсетов сниз.

6) в окно редактирования (то которое появляется при нажатии на пробел) пишем следующую инструкцию:

CALL DWORD PTR DS:[756204]

(где 00756204 - это наш найденый и записаный на листочек "Address LoadLibraryA")

таким же способом далее пишем ещё 1 инструкцию:

CMP EAX,0


7) мы загрузили длл на нам остается только передать управление программе

пишем JMP 0073C6B8

(где 0073C6B8 - это записаный на листочке наш  OEP)

8) Теперь сохраним. выделяем мышкой область наших изменений (Правой кнопкой мыши->Copy To Executable->Selection->ещё раз правой кнопкой мыши->Save File).


в общем виде это выглядит так:
00755AA0    > $  68 705A7500         PUSH main_new.00755A70                                     ; /FileName = "SuperAntiCheat.dll"
00755AA5      .  FF15 04627500       CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>]               ; LoadLibraryA
00755AAB      .  83F8 00             CMP EAX,0
00755AAE      >^ E9 FB6BFEFF         JMP main_new.0073C6B8




9) Важно. При помощи например программы LordPE необходимо изменить EntryPoint (точку входа) - поставив ее на наши новые инструкции.
в примере новой OEP будет 00755AA0. зная что ImageBase = 00400000, вычисляем EntryPoint.
OEP - ImageBase = LordPE EntryPoint.
00755AA0 - 00400000 = 355AA0.

вот это 355AA0 значение вам нужно внести будет в поле EntryPoint программы LordPE и сохранить.

победа :) это упрощенный базовый вариант загрузки. можно добавить ещё проверки корректности загрузки библиотеки или вызов определённой процедуры из вашего античита и так далее (на что хватит фантазии :) но и этот вариант вполне рабочий.

Tp9IM

лудше  бы  написали  как  снимать  защиту  с  маина

Everybody

Цитата: Tp9IM от 2009 Апр. 25, 10:47  лудше  бы  написали  как  снимать  защиту  с  маина
Скажи спасибо что вообще так подробно написано.
Тема о добавлении длл в майн.

Deathless

Цитировать...можно добавить ещё проверки корректности загрузки библиотеки или вызов определённой процедуры из вашего античита и так далее...

А как можно добавить проверку чтобы main.exe не запускался без хукнутого файла и проверял его размер?

Ragnarec

Цитата: Demka от 2009 Май 05, 02:14  А как можно добавить проверку чтобы main.exe не запускался без хукнутого файла и проверял его размер?

Ну твой мэйн и не должен запускаться без него, будет орать blabla.dll not found или чтото вроде - а в своем DLL сам и сделай проверку на размер, думается так должно быть.

Deathless

ЦитироватьНу твой мэйн и не должен запускаться без него, будет орать blabla.dll not found или чтото вроде - а в своем DLL сам и сделай проверку на размер, думается так должно быть.

В том то и подвох, что если я удалю, переименую, подменю на другой файл, игра всё равно запускается.

Помогите пожалуйста это исправить.

user_MU

xakum
Благодарствую что так подробно разжевал вживление длл-ки.
Я увидел где я раньше совершал ошибку по её внедрению.
2 Demka
А если джойнером склеить эти 2 файлика в 1?
Или есть пакерызащита которые как-бы делают контейнер содержащий несколько файлов.
Т.е. сделать так что бы отделить эту длл никто не смог.

cokpat

если меин не сверяет контрольную сумму Длл, то это антихак для новичков

Спасибо Хакуму за подробное описание, новичкам остается только сделать

Человек

Цитата: cokpat от 2009 Май 07, 07:56  если меин не сверяет контрольную сумму Длл, то это антихак для новичков :)

Спасибо Хакуму за подробное описание, новичкам остается только сделать :)


Может ты поделишся с нами информацией  по поводу сверения контрольной суммы? :)
Как поставить проверку?

Huzar2

Наверно умно, но я прочитал пару раз, немного непонял

HuKaTuH[GM]

xakum спасибо вам ! Вы мудрый человек :)

Спойлер
Вы должны ввести сообщение или ваше сообщение содержит менее 50 символов
[свернуть]

Ales

Цитировать9) Важно. При помощи например программы LordPE необходимо изменить EntryPoint (точку входа) - поставив ее на наши новые инструкции.
в примере новой OEP будет 00755AA0. зная что ImageBase = 00400000, вычисляем EntryPoint.
OEP - ImageBase = LordPE EntryPoint.
00755AA0 - 00400000 = 355AA0.
Всё понимаю кроме "зная что ImageBase = 00400000" где её можно смотреть у себя в майне, или он одинакова у всех?

Voppis

Кто может вшить мне пожалуйста AH.dll и main.exe, у меня не получается  
И есль у вас есть 3D camera для 1.04h можете вшить и её пожалуйстита.
Вот сылка майна 1.04h: _http://rapidshare.com/files/250955146/main.exe.html
Вот сылка AH.dll: _http://rapidshare.com/files/250953849/AH.dll.html
И у меня вопрос потом после вшития я смогу поменять серийник и ип?
Спасибо большое заранее.

Похожие темы (5)