1. Стиль действия, так называемый стиль действия относится к использованию API для отправки команд в Windows или API для управления мышью, клавиатурой и т. Д., чтобы персонажи в игре можно было перемещать или атаковать. «Камень» плагин. (Этот вид плагина-это полностью мусор, TMD, любой, кто знает немного API, знает, что делать, но этот плагин также является хорошей вещью начального уровня. Хотя он не может повысить вашу боевую эффективность, он может улучшить свой моральный дух ^_ ^)
2. Стиль локального модификации. -В «留» сложность написания метода состоит в том, чтобы найти адресные коды. (Этот вид плагина немного сложнее, чем предыдущий, но также трудно использовать этот плагин ~~ Этот плагин может быстро улучшить ваше понимание и применение адресов памяти. Это вы хорошо Вещи для улучшения технологии программирования)
3. Троянский стиль. Чтобы поговорить об этом ~~). к указанному адресу электронной почты. (Я писал что -то подобное раньше, но я никогда не использовал его. Я знаю, что эта штука очень аморальна, так что не используйте ее в будущем! ~~)
4.
5. В стиле пакета этот плагин представляет собой плагин с высокой дифтамиацией и требует написания сильных навыков программирования. Его принцип - сначала перехватить пакет, изменить его, а затем пересылать его (Као, это просто сказать, вы можете попробовать его ~~~~). Этот плагин подходит для большинства онлайн-игр.
Среди этих плагинов первые три могут быть легко реализованы с использованием таких языков, как VB и DELEP, в то время как последние два должны быть легко реализованы с использованием инструментов программирования, таких как VC. (Тел, пожалуйста, послушайте следующий разрыв)
(Я энтузиаст программы, а не профессиональный плагин, поэтому, пожалуйста, простите меня, если есть какая-либо неуместная статья. )
В прошлый раз мы проанализировали плагин.
Насколько я знаю, наиболее типичное применение локальных модифицированных плагинов заключается в игре «Эльф», потому что я был почти год назад («Эльф» все еще находится на стадии тестирования) и многие коллеги в моей компании Играл в «эльф», поэтому я посмотрел на метод обработки данных в игре и обнаружил, что информация, которую он отправляет серверу, существует в памяти (мое первое чувство после прочтения это: нет большой разницы между изменением такого рода игры и изменением Сторонняя версия игры. Адрес в соответствии с моей идеей и позвольте системе отправить его автоматически, и он был действительно успешным. Говорите глупость здесь ~~~~, OK, давайте посмотрим на то, как изготовлен этот тип плагина:
Прежде чем делать плагин, нам нужно иметь конкретное понимание памяти Windows. То же самое. Адреса памяти):
1. Прежде всего, нам нужно использовать FindWindow, чтобы узнать ручку игры, потому что нам нужно знать идентификатор процесса после работы игры.
Hwnd findwindow (
LPCTSTR LPClassName, // Указатель на имя класса
LPCTSTR LPWINDOWNAME // Указатель на имя окна
);
2. Мы получаем, чтобы получить идентификатор процесса соответствующего процесса игры.
Dword getWindowThreadProcessId (
Hwnd hwnd, // Ручка окна
LPDWORD LPDWPOCESSID // Адрес переменной для идентификатора процесса
);
3. После получения идентификатора игрового процесса, следующая вещь, чтобы открыть процесс с самыми высокими разрешениями.
Обрабатывать OpenProcess (
Dword dwdesiredaccess, // access flag
Bool Binherithandle, // ручка флага наследства
DWORD DWPOCESSID // Идентификатор процесса
);
В тех случаях, когда DwdesiredAccess - это место, где устанавливаются методы доступа, он может установить много разрешений.
4. После открытия процесса мы можем использовать функции для работы в памяти. , давайте посмотрим на использование WriteProcessMemory:
Bool WriteProcessMemory (
Обрабатывать hprocess, // обрабатывать к процессу, чья память записывается на
Lpvoid lpbaseaddress, // адрес начать писать на
LPVOID LPBuffer, // Указатель на буфер для записи данных на
Dword nsize, // количество байтов для написания
Lpdword lpnumberofbyteswritten // Фактическое число написанных байтов
);
5. Следующее заключается в закрытии ручки процесса с помощью близкого отдела, и она завершена.
Это метод реализации программы этого типа игрового модуля. из XX Games Давайте изучим код в соответствии с вышеуказанным методом:
констант
ResourceOffset: DWORD = $ 004219F4;
Ресурс: DWORD = 3113226621;
ResourceOffset1: DWORD = $ 004219F8;
Ресурс1: DWORD = 1940000000;
ResourceOffset2: DWORD = $ 0043FA50;
Ресурс2: DWORD = 1280185;
ResourceOffset3: DWORD = $ 0043FA54;
Ресурс3: DWORD = 3163064576;
ResourceOffset4: DWORD = $ 0043FA58;
Ресурс4: DWORD = 2298478592;
вар
HW: hwnd;
PID: DWORD;
H: Тандл;
ТТ: Кардинал;
Начинать
hw: = findwindow ('' xx '', nil);
Если hw = 0, то
Выход;
GetWindowThreadProcessId (hw, @pid);
h: = openprocess (process_all_access, false, pid);
Если h = 0, то
Выход;
Если Flatcheckbox1.Checked = true, то
Начинать
Writeprocessmemory (h, pointer (resourceoffset), @resource, sizeof (resource), tt);
Writeprocessmemory (h, pointer (resourceoffset1), @resource1, sizeof (resource1), tt);
конец;
Если flatcheckbox2.checked = true Then
Начинать
Writeprocessmemory (h, pointer (resourceoffset2), @resource2, sizeof (resource2), tt);
Writeprocessmemory (h, pointer (resourceoffset3), @resource3, sizeof (resource3), tt);
Writeprocessmemory (h, pointer (resourceoffset4), @resource4, sizeof (resource4), tt);
конец;
MessageBeep (0);
Близкий руск (H);
закрывать;
В этой игре используется несколько адресов для проверки данных, которые будут представлены, поэтому не сложно создать плагины этого типа игры, и самое сложное-найти эти адреса.
(Вы уже ясно видели метод, и конкретная практика зависит от всех. Ха -ха ~~~~~~, но не слишком рады Типы плагинов в будущих статьях.
В прошлый раз я сделал общее резюме из пяти типов плагинов
Прежде всего, давайте поговорим о плагинах в стиле действия, которые также являются самыми простыми, которые я сделал, когда впервые написал плагины.
Я помню, когда я все еще был в эпоху «камня», я видел, как кто-то еще имел программное обеспечение (плагин), и люди могли бродить (я не знал, что происходит в то время плагин^_^ ), поэтому я обнаружил, что этот вид программного обеспечения приезжает сюда для изучения (я слышал, как другие называют его подключением после того, как я его взял), и обнаружил, что такого рода вещи не сложно реализовать. Чем нажимает мышь в разных местах.
1. Прежде всего, нам нужно знать текущую позицию мыши (для восстановления текущей позиции мыши), поэтому нам нужно использовать функцию API GetCursporsos, которая используется следующим образом:
Bool getCursporsos (
Lppoint Lppoint // Адрес структуры для положения курсора
);
2. Когда мы перемещаем положение мыши в место, где идет персонаж, нам нужно использовать функцию SetCursorpos для перемещения позиции мыши.
Bool setCursporsos (
int x, // горизонтальное положение
int y // вертикальное положение
);
3. Моделируйте мышь, чтобы нажать и выпустить действие.
Void mouse_event (
DWORD DWFLAGS, // Флаги, указывающие различные варианты движения/щелчка
DWORD DX, // Горизонтальное положение мыши или изменение позиции
DWORD DY, // Вертикальное положение мыши или изменение позиции
Dword dwdata, // количество движения колеса
Dword dwextrainfo // 32 бит информации, определенной приложением
);
В своих DWFLAG есть много доступных событий, таких как Moving MouseEventf_move, нажмите MouseEventf_leftdown с левой кнопкой, отпустите mouseeventf_leftup с левой кнопкой.
Хорошо, с предыдущими знаниями мы видим, как реализовано удаление персонажа:
getCursorpos (точка);
SetCursorpos (Ranpoint (80, Windowx), Ranpoint (80, Windowy)); // Ranpoint - это домашняя случайная функция координат
mouse_event (mouseeventf_leftdown, 0,0,0,0);
mouse_event (mouseeventf_leftup, 0,0,0,0);
setCursorpos (point.x, point.y);
После прочтения приведенного выше кода, как вы думаете, блуждание персонажей очень просто? Это метод плагина для мусора, поверьте ему ~~~), давайте посмотрим на метод автоматической атаки в игре (должен поддерживать ярлыки клавиш для атак в игре). Используется API отличается ~~~~, на этот раз мы хотим использовать функцию keybd_event, которая используется следующим образом:
Void keybd_event (
Byte bvk, // код виртуального ключа
Byte bscan, // код аппаратного сканирования
DWORD DWFLAGS, // Флаги Указание различных параметров функции
Dword dwextrainfo // Дополнительные данные, связанные с клавишным
);
Мы также должны знать, что код сканирования не может быть использован напрямую.
Uint MapVirtualKey (
Uint ucode, // код виртуального ключа или код сканирования
Uint umaptype // перевод для выполнения
);
Хорошо, допустим, что этот ключ быстрого подключения CTRL+A.
keybd_event (vk_control, mapvirtualKey (vk_control, 0), 0,0);
keybd_event (65, mapvirtualkeke (65,0), 0,0);
keybd_event (65, MapVirtualKey (65,0), keyEventf_keyup, 0);
keybd_event (vk_control, mapvirtualkey (vk_control, 0), keyeventf_keyup, 0);
Сначала нажмите клавишу CTRL в моделировании, затем нажмите клавишу A, затем отпустите клавишу A и, наконец, отпустите клавишу CTRL.
(Видя здесь, у меня почти есть определенное понимание простых плагинов ~~~~ ~~~~ Попробуем? Не будьте счастливы слишком рано.