Как сделать свой лоадер

Обновлено: 05.07.2024

В этой статье мы рассмотрим как имея один билд лоадера сделать для него конфигуратор. Тренироваться мы будем на очень известном лоадере robots. Для тех, кто не знает что это такое приведу небольшую цитату от разработчика:

Мы покупаем загрузки, тратим деньги, порою вообще большие суммы, а ведь легко можем получать от этих же загрузок большую отдачу, только если сразу передать на загрузку лоадер Robots. Тут мы получаем и удобную, а главное свою, а не чужую статистику и возможность грузить еще не ограниченное число файлов друзьям, знакомым за один подход, так и сами файлы будут грузиться качественнее. Вы наверняка ощутите отдачу как только начнете, да и добрую часть денег сэкономить можно, зачем лишнее тратить на "недогруженные" загрузки 😉 …

Приводить все характеристики данного продукта нет смысла, все легко находиться в интернете при должном желании. Почему я выбрал именно этот лоадер для опытов? Да потому, что он очень популярен и судя по заявлениям автора в него встроена мощная защита от реверсеров, т.е. от таких людей как мы.

Что такое лоадер. Это небольшой файлик, который в обход фаерволов загружает нужный нам файл на машину юзера и незаметно его запускает. Так что грузить файлы с помощью лоадера намного лучше, чем грузить файлы сразу. Так что вещь в хозяйстве незаменимая.

Анализ

0090B55F >- E9 F04BAFFF JMP loader.00400154

Перейдём по адресу 00400154 и увидим следующий код:

00400154 BE 1CA09000 MOV ESI,loader.0090A01C

00400159 8BDE MOV EBX,ESI

0040015B AD LODS DWORD PTR DS:[ESI]

Теперь листаем код не много вниз, пока не наткнемся на следующие команды:

004001F0 FF53 F4 CALL DWORD PTR DS:[EBX-C]

004001F3 AB STOS DWORD PTR ES:[EDI]

004001F4 85C0 TEST EAX,EAX

004001F6 ^ 75 E5 JNZ SHORT loader.004001DD

004001F8 C3 RETN

Значит ставим breakpoint по адресу 004001F8 и запускаем программу на исполнение. Когда Olly прервётся, в стеке будет примерно следующие:

0012FFC0 00909000 loader.00909000

00909000 CE INTO

00909001 9B WAIT

00909002 9F LAHF

00909003 98 CWDE

00909004 98 CWDE

009080E5 0F31 RDTSC // получаем количество тактов

009080E7 2BC3 SUB EAX,EBX // разность между двумя замерами

009080E9 EB 01 JMP SHORT loader.009080EC

009080EB 90 NOP // занопили мусорный байт

009080EC 3D 00000001 CMP EAX,1000000 // если больше 1000000h

009080F1 EB 01 JMP SHORT loader.009080F4

009080F3 90 NOP // занопили мусорный байт

009080F4 - 77 FE JA SHORT loader.009080F4 // то застрянем тут

RDTSC (Read Time Stamp Counter) - ассемблерная инструкция для платформы x86, читающая счётчик TSC (Time Stamp Counter) и возвращающая в регистрах EDX:EAX 64-битное количество тактов с момента последнего сброса процессора. RDTSC поддерживается в процессорах Pentium и старше. Опкод: 0F 31.

Старая отладка нас не интересует, идём дальше, в крипторе вовсю используется приём с прыжком через мусорный байт, чтобы сбить с толку реверсера бредовым листингом, как это выглядит:

0090811F /EB 01 JMP SHORT loader.00908122

00908121 |EA E305EB01 EBEB JMP FAR EBEB:01EB05E3

00908128 DF59 85 FISTP WORD PTR DS:[ECX-7B]

0090812B C058 EB 01 RCR BYTE PTR DS:[EAX-15],1

0090812F EA BA000000 00EB JMP FAR EB00:000000BA

Кроме первой команды JMP SHORT loader.00908122 ничего из этого участка кода не понять, но если занопись мусорные байты, то листинг становиться более читабельным:

0090811F /EB 01 JMP SHORT loader.00908122

00908121 |90 NOP

00908122 \E3 05 JECXZ SHORT loader.00908129

00908124 EB 01 JMP SHORT loader.00908127

00908126 90 NOP

00908127 ^ EB DF JMP SHORT loader.00908108

00908129 59 POP ECX

0090812A 85C0 TEST EAX,EAX

0090812C 58 POP EAX

0090812D EB 01 JMP SHORT loader.00908130

0090812F 90 NOP

Ну вот, совсем другое дело. Едем дальше. Чуть позже произойдёт исключение с ошибкой записи в память:

00404996 BB 0000F7BF MOV EBX,BFF70000 // адрес недоступный для записи

0040499B 85C9 TEST ECX,ECX

0040499D 59 POP ECX

0040499E 64:8937 MOV DWORD PTR FS:[EDI],ESI

004049A1 B8 002C2B1F MOV EAX,1F2B2C00 // байты для записи

004049A6 8703 XCHG DWORD PTR DS:[EBX],EAX // ошибка

Лоадер искусственно генерирует исключение и сам же его обрабатывает, такая техника помогает остановить эмулятор отдельный антивирусов, но она, как и все остальное, безвозвратно устарела. Дальше будет ещё исключение, проходим его и наконец перед нами место, которое можно принять за начало лоадера:

00401E78 803D F8464000 00 CMP BYTE PTR DS:[4046F8],0

00401E7F 75 0E JNZ SHORT loader.00401E8F

00401E81 C605 F8464000 01 MOV BYTE PTR DS:[4046F8],1

00401E88 BA 991E4000 MOV EDX,loader.00401E99

00401E8D EB 05 JMP SHORT loader.00401E94

Теперь нужно сдампить файл и привести его в человеческий вид. Полученный дамп будет весить 5
Мб, что ну никак не годиться, берём в руки любой PE-editor и отрезаем всё лишнее. Было:

секция 1: 00001000 00509000 00001000 00509000 C00000E0

секция 2: ТuЫЉ лФ 0050A000 00002000 0050A000 00002000 C00000E0

секция 1: code 00001000 00509000 00001000 00003A00 E00000E0

Ещё, в добавок к этому, надо занулить директорию импорта ImportTable и сделать SizeOfHeaders = 1000h, иначе файл упадёт при запуске. После всех этих манипуляций размер файла стал 18.5
Кб - это уже не 5 Мб, а если запаковать файл PeCompact, то размер будет 6 Кб, что вполне приемлемо для лоадера. Т.к. у нашего лоадера нету импорта, то он не запуститься на win 2000. Для того, чтобы файл нормально запускался и там нужно добавить хотя бы 1 функцию, сделать это можно вручную и ничего сложного в этом
нету.

2500h: 00 00 00 00 00 00 00 00 00 00 00 00 28 25 00 00 . (%..

2510h: 10 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .0.

2520h: 00 00 00 00 00 00 00 00 6B 65 72 6E 65 6C 33 32 . kernel32

2530h: 2E 64 6C 6C 00 00 B7 00 45 78 69 74 50 72 6F 63 .dll. ExitProc

2540h: 65 73 73 00 00 00 00 00 00 00 00 00 00 00 00 00 ess.

И, соответственно, ImportTable address = 2500h и size = 14h.

Теперь можно анализировать лоадер и искать нужное нам место для подменяя url на наш.

Принцип работы нас не интересует, нам важно сделать конфигуратор.

Основная часть

Немного посмотрев лоадер в Olly я выяснил, что все строки шифруются одной процедурой:

0040141E 55 PUSH EBP // начало

00401486 AC LODS BYTE PTR DS:[ESI] // esi = строка

00401487 84C0 TEST AL,AL // пока символ <> 0

00401489 74 13 JE SHORT dump_.0040149E

0040148B FEC2 INC DL // увеличиваем счётчик

0040148D 8ACA MOV CL,DL

0040148F 80E1 1F AND CL,1F // счётчик AND 1Fh

00401492 80C1 61 ADD CL,61 // счётчик ADD 61h

00401495 FECE DEC DH // уменьшаем счётчик

00401497 32CE XOR CL,DH // ксорим 2 счетчика

00401499 32C1 XOR AL,CL // ксорим символ строки

0040149B AA STOS BYTE PTR ES:[EDI] // записываем в результат

0040149C ^ EB E8 JMP SHORT dump_.00401486

7C802367 >/$ 8BFF MOV EDI,EDI

7C802369 |. 55 PUSH EBP

И в стеке будет следующее:

0012FF30 0040226E /CALL to CreateProcessA

0012FF34 00000000 |ModuleFileName = NULL

0012FF38 004048C2 |CommandLine = "svchost.exe" // доверенное приложение

Перемещаемся дальше, имеем в Olly по адресу ZwCreateThread, и что же мы видим:

7C90D7D2 > 68 19184000 PUSH 401819 // адрес перехватчика

7C90D7D7 C3 RETN

А эта функция, оказывается, перехвачена и всё самое интересное будет происходить по адресу 401819. По-этому идём
туда и ставим breakpoint, жмём F9 (run) в Olly.

Когда прервёмся увидим примерно такой код:

00401819 55 PUSH EBP

0040181A 8BEC MOV EBP,ESP

0040181C 83C4 DC ADD ESP,-24

Листаем вниз, пока не увидим следующие инструкции:

00401959 C786 B8000000 8E1B400>MOV DWORD PTR DS:[ESI+B8], 00401B8E

00401963 FF75 EC PUSH DWORD PTR SS:[EBP-14]

00401966 8F86 AC000000 POP DWORD PTR DS:[ESI+AC]

0040196C 8B35 D4494000 MOV ESI,DWORD PTR DS:[4049D4]

00401972 8B3D CC494000 MOV EDI,DWORD PTR DS:[4049CC] // ZwCreateThread

00401978 A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]

00401979 66:A5 MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI]

0040197B FF75 F0 PUSH DWORD PTR SS:[EBP-10]

0040197E FF75 20 PUSH DWORD PTR SS:[EBP+20]

00401981 FF75 F4 PUSH DWORD PTR SS:[EBP-C]

00401984 FF75 18 PUSH DWORD PTR SS:[EBP+18]

00401987 FF75 F8 PUSH DWORD PTR SS:[EBP-8]

0040198A FF75 10 PUSH DWORD PTR SS:[EBP+10]

0040198D FF75 0C PUSH DWORD PTR SS:[EBP+C]

00401990 FF75 08 PUSH DWORD PTR SS:[EBP+8]

00401993 FF15 D0494000 CALL DWORD PTR DS:[4049D0] // ZwCreateThread

начало. Прервёмся когда, в стеке будет следующее:

0012F32C 00401619 dump_.00401619

0012F330 00404088 dump_.00404088

0012F334 00404877 dump_.00404877 // вот адрес который нам нужен

Если дойди до конца процедуры

004014A4 61 POPAD

004014A5 C9 LEAVE

004014A6 C2 0400 RETN 4

то по адресу 00404877 будет наша искомая строка:

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

Алгоритм на дельфи с асм вставками будет выглядеть примерно так:

res:array [1..45] of byte;

mov esi,s // помещаем в esi адрес строки

lea edi,res // помещаем в edi адрес выходного буфера

LODS BYTE PTR DS:[ESI] // помещаем в AL символ из нашей строки

JE @@exit // конец строки?

INC DL // эти действия мы разбирали ранее

STOS BYTE PTR ES:[EDI] // помещаем полученный байт в выходной массив

Вот так просто мы написали конфигуратор к лоадеру, цена которому 800 $. Для этого нужно было только немного терпения и небольшой опыт в реверсе. Авторам можно посоветовать за такие деньги в несколько раз больше трудиться над продуктом. С уверенностью можно утверждать, что цена явно завышена.

Бонус

К статье прилагается распакованный лоадер, готовый конфигуратор, его исходники и скрипты. Всё это доступно для ознакомления, чтобы каждый мог посмотреть, что же за софт продаётся за такие деньги. Распакованный лоадер прекрасно пакуется и криптуется, благодаря этому каждый может попробовать данный софт. Никаких вирусов и т.д. в софте нету.

Использование

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

Из того, что я знаю - exec. -функции делают обе операции одномоментно, а вот как это сделать в 2 этапа?
Нагуглил функцию VirtualAlloc (и в дополнение VirtualProtect), но в примерах - загрузка и исполнение шеллкода. А вот есть ли в WinAPI решение для стороннего exe?
Также в виде приятного дополнения, как я понимаю, должен автоматически получиться обход DEP, если задать области памяти права, поскольку инжект во внешний процесс неизбежно активирует DEP, а если я сам загружаю процесс в память, то перед запуском могу делать с ним все, что хочу.

DllLoaderLoader.cpp вроде бы умеет подгружать и exe:

Это статья была написана для людей, которым всегда интересно знать как работают разные вещи. Для тех разработчиков которые обычно пишут свои программы на высоком уровне, C, C++ или Java — не важно, но при этом столкнулись с необходимостью сделать что-то на низком уровне. Мы будем рассматривать низкоуровневое программирование на примере работы bootloader-а.

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

Что такое Boot Loader

Boot loader — это программа, которая записана на первом секторе жесткого диска. BIOS автоматически считывает всё содержимое первого сектора в память, сразу после включения питания. Первый сектор также называется главной загрузочной записью. На самом деле, это не является обязательным для первого сектора жесткого диска для загрузки чего либо. Это название было исторически сложившиеся, так как разработчики использовали такой механизм для загрузки операционной системы.

Будьте готовы погружаться глубже

В этом разделе я расскажу о том, какие знания и инструменты, необходимы для разработки собственного загрузчика, а также напомню некоторую полезную информацию о загрузке системы.

И так, какой язык Вы должны знать, чтобы написать Boot Loader

В этой статье в основном будет использоваться язык C++. Но если вы знаете C, то вам будет легко узнать необходимые C++ элементы. В общем, даже знание языка C будет достаточно, но тогда вам придется изменять исходный код примеров.

И так, для разработки простого загрузчика вы должны знать, C или C++, а также было бы не плохо если вы знаете немного Ассемблера.

Какой компилятор вам нужен

Чтобы использовать технологию смешанного кода, нужно по крайней мере два компилятора: для ассемблера и для C/C++, а также компоновщик который объединит объектные файлы(.obj) в один исполняемый файл.

Теперь, давайте поговорим о некоторых особых моментов. Есть два режима функционирования процессора: реальный и защищенный режим. Реальный режим является 16-битным и имеет некоторые ограничения. Защищенный режим является 32-битным и полностью используется операционной системой. Когда компьютер только начинает работу, процессор работает в 16-битном режиме. Таким образом, чтобы написать программу и получить исполняемый файл, вам понадобится компилятор и компоновщик для ассемблера для 16-битного режима. Для C/C++ вам потребуется только компилятор, который умеет создавать объектные файлы для 16-битного режима.

Современные компиляторы сделаны для 32-разрядных приложений, поэтому мы не сможем их использовать.

Я пробовал несколько бесплатных и коммерческих компиляторов для 16-битного режима и выбрал продукт от Microsoft. Компилятор вместе с компоновщиком для ассемблера, C и C++ включены в Microsoft Visual Studio 1.52, его можно скадать с официального сайта компании. Некоторые подробности о компиляторов которые нам нужны приведены ниже.

ML 6,15 — компилятор ассемблера от Microsoft для 16-битного режима.
LINK 5,16 — компоновщик, который умеет создавать COM-файлы для 16-битного режима.
CL — С, С++ компилятор для 16-битного режима.

Вы также можете использовать несколько альтернативных вариантов.

DMC — бесплатный компилятор для компиляции ассемблера, C, C++ для 16 и 32-битном режиме Digital Mars.
LINK — бесплатный компоновщик для компилятора DMC.

Есть также некоторые продукты от Borland.

BCC 3,5 — С, С++ компилятор, который умеет создавать файлы для 16-битного режима.
TASM — компилятор асемблера для 16-битного режима.
TLINK — компоновщик, который может создавать файлы COM для 16-битного режима.

Все примеры кода в этой статьи, были разработаны с инструментами от Microsoft.

Как система загружается

Для того, чтобы решить нашу задачу мы должны вспомнить, как система загружает.
Рассмотрим кратко, как компоненты системы взаимодействуют при загрузке системы.


После того, как управление было передано по адресу 0000:7C00, Master Boot Record (MBR) начинает свою работу и запускает загрузку операционной системы.

Давайте перейдем к кодированию

В следующих разделах мы будем непосредственно заняты низкоуровневым программированием — мы будем писать наш собственный загрузчик.

Архитектура программы
  1. Правильная загрузка в память по адресу 0000:7 C00.
  2. Вызов BootMain функции, которую мы написали в языке высокого уровня.
  3. Вывести на дисплей фразу — ”Hello, world…", from low-level.


Первый объект это StartPoint, который написан исключительно в ассемблере, поскольку в языках высокого уровня нет необходимых нам инструкции. Это говорит компилятору, какой тип памяти должен использоваться, и адрес команды в RAM, которая должна выполняться после его чтения. Он также исправляет регистры процессора и передает управление функции BootMain, которая написано на языке высокого уровня.

Следующий объект- BootMain — является аналогом main, что, в свою очередь является основной функцией в которой сконцентрированы все функции программы.

Среда разработки

Здесь я использую стандартные среды разработки Microsoft Visual Studio 2005 или 2008. Вы можете использовать любые другие инструменты, но я уверен, что эти два, с некоторыми настройками, компилируют и работают легко и удобно.

Сначала мы должны создать проект Makefile Project, где будет выполнена основная работа.


File->New\Project->Общие\Makefile Project

BIOS прерывания и очистка экрана

BIOS предлагает ряд прерываний для работы с железом, таким как видеокарта, клавиатура, системный диск. Каждое прерывание имеет следующую структуру:

Каждое прерывание имеет некоторое количество параметров, которые должны быть установлены до его вызова. Регистр процессора — ah, всегда несет ответственность за количество функций для текущего прерывания, и другие регистры обычно используются для других параметров текущей операции. Давайте посмотрим, как работа прерывания номер 10h выполняется на ассемблере. Мы будем использовать 00-функцию, она меняет видео режим и очищает экран:

Мы будем рассматривать только те прерывания и функции, которые будут использоваться в нашем приложении. Нам понадобится:

Компилятор C++ поддерживает встроенный Ассемблер, то есть при написании кода на языке высокого уровня вы можете также использовать язык низкого уровня. Инструкции ассемблера, которые используются на высоком уровне, также называют asm вставками. Они состоят из ключевого слова "__asm" и блока ассемблерных инструкций:


Чтобы продемонстрировать пример смешанного кода мы будем использовать ранее упомянутый код на ассемблере, который выполняет очистку экрана и объединим его с кодом написанный на C++.

CString реализация

CString класс предназначен для работы со строками. Он включает в себя метод Strlen(), который получает в качестве параметра указатель на строку и возвращает количество символов в этой строке.

  1. TextOut() — выводит строку на экране.
  2. ShowCursor() — управляет курсором представления на экране: показать, скрыть.
  3. ClearScreen() — изменяет видео режим и таким образом очищает экран.
CDisplay — реализация
Types.h — реализация

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

BootMain.cpp — реализация

BootMain() является основной функцией программы, которая является первой точкой входа (аналог main()). Основная работа проводится здесь.

StartPoint.asm — реализация

Давайте соберем все

Создание COM файла

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

Поместите компиляторы и компоновщик в каталог проекта. В том же каталоге, мы создаем командный файл и заполняем в соответствии с примером (можно использовать любой каталог вместо VC152, главное чтобы компиляторы и компоновщик находились в нем).:

Ассамблирование — автоматизация

В качестве заключительного этапа в этом разделе мы опишем как превратить Microsoft Visual Studio 2005, 2008, в среду разработки с поддержкой любого компилятора. Для этого нужно перейти в свойствах проекта: Project->Properties->Configuration Properties\General->Configuration Type.

Если все сделано правильно, то вы можете скомпилировать нажав клавиши F7 или Ctrl + F7. При этом вся сопутствующие информация будет отображаться в окне вывода. Основным преимуществом здесь является не только автоматизация сборки, но и мониторинг ошибок в коде если они будут.

Тестирование и демонстрация

Этот раздел расскажет, как увидеть сделанный загрузчик в действии, как выполнить тестирование и отладку.

Как проверить загрузчик

Вы можете проверить загрузчик на реальном оборудовании или с использованием разработанных для этих целей виртуальных машинам — VMware. Тестирование на реальном оборудовании дает вам больше уверенности, что он работает также как и на виртуальной машине. Конечно, мы можем сказать, что VmWare отличный способ для тестирования и отладки. Мы рассмотрим оба метода.

Прежде всего, нужен инструмент, чтобы записать наш загрузчик на виртуальный или физический диск. Насколько я знаю, есть несколько бесплатных и коммерческих консолей и GUI приложений. Я использовал Disk Explorer для NTFS 3.66 (версия для FAT, называется Disk Explorer для FAT) для работы в ОС Windows и Norton Disk Editor 2002 для работы в MS-DOS.

Я опишу только Disk Explorer для NTFS 3,66 потому что это самый простой способ и подходит для наших целей больше всего.

Тестирование с помощью виртуальной машины VmWare
Создание виртуальной машины

Нам понадобится VmWare версия программы 5.0, 6.0 или выше. Чтобы проверить загрузчик мы создадим новую виртуальную машину с минимальным размером диска, например, 1 Gb. Отформатируйте его в файловую систему NTFS. Теперь нам нужно отобразить отформатированный жесткий диск на VmWare в качестве виртуального диска. Для этого выберите:

File->Map or Disconnect Virtual Disks.

После этого мы можем работать с диском виртуальной машины, как с обычными логическим диском в ОС Windows. Теперь мы должны использовать Disk Explorer для NTFS 3,66 чтобы записать загрузочную запись с позиции 0.

Работа с Disk Explorer для NTFS

После запуска программы мы идем в наш диск (File-> Drive). В появившемся окне идем в раздел логические диски и выбираем наш созданный диск(в моем случае это Z).

Теперь мы выбираем меню пункт View как Hex команды. В это появившемся окне мы можем видеть информацию диска в 16-разрядном представлении, разделенная на сектора. Сейчас у нас только 0-ли, так как диск пуст, пока что.

Сейчас мы должны записать наш загрузчик в первый сектор. Мы устанавливаем маркер в положение 00, как это показано на предыдущей картинке. Чтобы скопировать загрузчик мы используем пункт меню Edit->Paste from file command. В открывшемся окне укажите путь к файлу и кликните Open. После этого содержимое первого сектора должен измениться и выглядеть, как это показано на картинке — если вы, конечно, ничего не меняли в коде.

Вы также должны записать подпись 55AAh по позиции 1FE от начала сектора. Если вы не сделаете это, BIOS проверит последние два байта, и не найдя указанную подписи, будет считать что этот сектор не является загрузочным и не загрузит его в память.

Для переключения в режим редактирования нажмите клавишу F2 и напишите необходимые номера — 55AAh подписи. Чтобы выйти из режима редактирования нажмите ESC.

Теперь нам нужно подтвердить записанные данные.

Чтобы применить записанное мы идем в Tools-> Options, теперь мы идем в пункт Mode и выбираем метод записывания — Virtual Write и нажмите кнопку Write.

Большую часть рутинных действий закончили, наконец, и теперь вы можете видеть, что мы разработали с самого начала этой статьи. Давайте вернемся к VwWare чтобы отключить виртуальный диск (File->Map or Disconnect Virtual Disks … and click Disconnect).

Тестирование на реальном оборудовании

Тестирование на реальном оборудовании почти такая же, как и на виртуальной машине, за исключением того, что если что-то не работает, вам потребуется намного больше времени, чтобы восстановить ее, чем создать новую виртуальную машину. Чтобы проверить загрузчик не имея возможность потерять данные (все может случиться), я предлагаю использовать флэш-накопитель, но сначала вы должны перезагрузить компьютер, зайдите в BIOS и убедитесь, что он поддерживает загрузку с флэш-накопителя. Если он поддерживает его, то все в порядке. Если нет, то вы должны ограничить тестированием на виртуальной тестовой машине.

Процесс написание загрузчика на флэш-диск в Disk Explorer для NTFS 3,66 такой же как и для виртуальной машины. Вы просто должны выбрать сам жесткий диск вместо своего логического раздела.

Заключение

В этой статье мы рассмотрели, что такое загрузчик, как работает BIOS, и как компоненты системы взаимодействуют при загрузке системы. Практическая часть дала нам понимание о том, как можно разработать свой собственный, простой загрузчик. Мы продемонстрировали технологию смешанного кода и процесс автоматизации сборки с использованием Microsoft Visual Studio 2005, 2008.

Конечно, это лишь малая часть по сравнению с огромной темой низкоуровневого программирования, но если вам было интересна это статья — то это круто.

villabox

Заблокирован

villabox

Заблокирован

Всех приветствую, этот гайд написал для новичков которые только только начинают свой путь пастера, у которых много вопросов, как и с чего начать =)
Погнали!
И так мы будем базироваться на слитом члениксе (Видимо название софта придумал полоумный дегенерат страдающий аутизмом) , сделаем веб панель + лоадер + сам чит + запротектим лоадер и саму дллку чита!

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

Теперь установим laravel, скрины давать не буду так как это очень долго разъяснять каждую ебанную команду! Так что ебашим по инструкции (Вводим команды по очереди)
1. Установить на хостинг ОС Ubuntu 14.04
2. Зайти на свой хостинг через PuTTY и вводить эти команды:

//Установка нужных компонентов
apt-get update
apt-get install sudo
apt-get install bsdutils
apt-get install curl
apt-get install -y build-essential
apt-get install -y python-software-properties
apt-get install -y php5
apt-get install -y apache2
apt-get install -y libapache2-mod-php5
apt-get install -y mysql-server
После этой команды вам придется придумать пароль для вашей базы данных
НЕ ЗАБУДЬТЕ ЕГО. ОН ВАМ ЕЩЕ ПОНАДОБИТСЯ!
apt-get install -y php5-mysql
apt-get install -y php5-curl
apt-get install -y php5-gd
apt-get install -y php5-mcrypt
apt-get install -y git-core
apt-get install -y phpmyadmin
После этой команды надо будет опять ввести пароль от базы 3 раза
apt-get install unzip
//Установка Node.JS для бота
curl --silent --location

| bash -
apt-get install --yes nodejs
apt-get install --yes build-essential
npm install -g pm2
pm2 startup
//Модификация веб-сервера
sudo a2enmod rewrite
service apache2 restart
//Установка Composer
curl -sS

| php
sudo mv composer.phar /usr/local/bin/composer
sudo apt-get update
sudo apt-get install tcl8.5
//Установка Redis сервера
wget


Далее пиздуем в вашсайт.ру/phpmyadmin вводим свой логин и пароль ( Логин это root)
Открываем вкладку База данных, вводим название вашей будущей хакерской базы и жмем на ок


дальше нажимаем на "выбрать файл" выбираем sql файл (он будет лежать в папке с веб файлами) и жмем ок

Все заэбись, мы поставили сервер и залили бд, ебана в рот.
Можно было не страдать этой ебатурией и просто взять вдс с панелью! Но так вы хоть получите какие никакие элементарные знания!

Все кароче, ебашим в папку с веб панелю
Открываем папку Engine и в нем открываем файл constans.php нотепадом, меняем в нем данные бд


Точно так же открываем папку chat/php и в нем открываем файл ajax.php и проделываем тоже самое (Надеюсь вы не страдаете склерозом)

Далее топаем в гугл и создаем капчу! (PS ВАМ нужен домен)
Как привязать домен к серверу я рассказывать не буду, ибо у меня не хватит нервов!

Ахуенно, мы создали капчу, теперь открываем опять папку с веб частью и ищем файл index.php их много, но нам нужен тот который лежит в корневой директории (Нашли? Заебись, теперь увас статус "Шерлок")
Открываем Index.php и ебашим на 451 строку, меняем секретный ключ
Ебашим на 892 строку и меняем ключ!

Все пиздес! Мы закончили с веб частью, теперь открываем filezila конектимся к нашему серверу, далее пиздуем по пути /var/www/html и заливаем нашу веб часть!
Открывем наш сайт и видим "Чудо"

Часть 2 "Хуячим свой лоадер"
1) Качаем Visual Studio
2) Открываем папку с лоадером
3) Видим какой то чужеродный файл с названием CHLENIX_LOADER.sln
4) Сжимаем яйца в кулак и кликаем 2 раза по этому файлу!

5) Отбрасываем в своей голове фразу "Пиздец, куда я попал?"


Открываем вкладку CHLENIX_LOADER.cpp

Далее выбираем Relise x86

Ждем секунд 20 ) и ебашим в папку с лоадером и открываем папку Relise и блядь опять видим какой то екзешник и непонятные файлы

Открываем эксешник и радуемся у нас теперь работает и сайт и лоадер блядь)

Мы скоро переплюнем била гейтса !
На этом мы заканчиваем 2 часть!

Часть 3 " Хучим сам чит и подключаем его к лоадеру"

1) Открываем папку с читом
2) Открываем chlenix.sln
3) Просто безовсяких изменении собираем чит


Под понараму я уже обновил исходы
4) Ебашим в папку с читом открываем папку Relise и видим следующую картину

"chlenix.dll" это и есть наш чит!

С читом разобрались, теперь переведем dll в байты и прихуячим его к лоадеру

1) Открываем папку "UTILS" (Будет в архиве) открываем его, а там блядь еще один файл TO_BYTE_ARRAY.exe! Открываем его и видим какую то поеботу


4) Теперь нам придется вернутся ко второй части!
Копируем эти карякулы, и ебашим в папку с лоадером, далее открываем папку CHLENIX_LOADER и ищем файл DLL_BYTE_ARRAY.h

5) Открываем его через нотепад, удаляем оттуда все к хуям и вставляем то что скопировали! Сохранем!
6) Теперь еще раз собираем сборку лоадера! (Вернитесь к 2 части и проделайте это еще раз!) (Но уже просто собрать сборку) Без каких либо изменении)

Пизда рулю, почти все готово (Мы на стадии легендарного кодера)

Часть 4 (даем себе права админа на сайте и тестим)

1) Открываем наш сайт и регаем учетную запись
2) Открываем наш phpmyadmin "Ващсайт.ру/phpmyadmin"
3) Ищем Таблицу users, находим себя, ищем столбец "usergroup" и меняем его на 100


4) Пиздуем на главную страницу сайта и видим что у нас появилась вкладка "Администирование"
5) Открываем эту вкладку, вводим свой логин, ставим галочку на "ВКЛЮЧИТЬ ИЗМЕНЕНИЯ ДЛЯ ЧЛЕНИКСА, пишем сколько дней хотим добавить и жмем "Внести изменения"

6) Финал, тестим луадырь!
1) Открываем Csgo
2) Открываем наш лоадер, вводим данные (Те которые вы зарегали на сайте) и жмем enter

4) Падаем в обморок, приходим в себя, и идем продавать свой топ чит!

Я попытался объяснить все понятным языком, и если у вас после этого гайда возникли какие то вопросы или вы что то не поняли, то пойдите в ближайшую больницу, зайдите в кабинет врача, опрокиньте ему свою голову на стол, и попросите посмотреть что в нем не так!

В следующей статье, мы с вами будем обучаться IMGUI и будем переделывать свою пасту до не узнаваемости! Если конечно я не поленюсь и сделаю гайд!

Привет, друзья. Бывает такое, что из-за использования тяжелых плагинов и сайт грузиться непозволительно долго. В таких случаях я рекомендую избавляться от них, либо искать менее "тяжелый" аналог. Но иногда - его просто нет. В таком случае можно попробовать использовать прелоадер, чтобы немного развлечь (отвлечь) пользователя. Но не все знают, как подобный функционал реализовать.

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

Как сделать прелоадер для landing page

Прежде чем начать делать preloader, нужно немножко уяснить суть того, как браузер загружает страницу. Не буду расписывать весь цикл, так как у самого довольно абстрактное представление, но важно понять, что в целях экономии времени, браузер грузит (отображает) код поэтапно и не дожидается полной загрузки страницы, а в случае подключения js, так вообще прекращает загрузку, пока не выполнит подключаемый файл. Это значит, что загрузка (отображение) остального контента приостанавливается до полной загрузки js файла. В общем, проблем достаточно, давайте теперь попробуем их решить при помощи прелоадера.

Теперь пару слов для понимания того, что мы делаем:

  • В самом начале размещаем div c прелоадером
  • Скрываем прелодером содержимое сайта до момента полной загрузки страницы
  • Скрываем прелоадер и показываем страницу

Теперь, сразу после открытия тега body разместим следующий div:

Скорее всего, если у вас проблемы с загрузкой сайта, значит у вас много качественных изображений и различных тяжеловесных скриптов, а значит, вы наверняка используете и jQuery, поэтому для того, чтобы наш preloader исчез после того, как загрузится основное содержимое, воспользуемся следующим скриптом:

Размещайте его где-нибудь после подключения jQuery.

Немного поясню html. LoaderArea - фоновая область, которая перекрывает основной контент. CSS этого дива такой:

Loader - это активная область (сам прелоадер). Так как я решил делать его при помощи только CSS, то у него такие стили:

Исходник прелоадера я взял с Codepeen. Вот ссылки на несколько интересных вариантов:

А вы пользуетесь прелоадереми на своих сайтах. Я вот, впервые его использовал. Какие у вас интересные примеры есть?

Читайте также: