Lineage 2
  • Форум
  • Анонсы
  • Вход
  • Регистрация
  • Разделы
    • Каталог файлов
    • Программы Lineage 2
    • Боты Lineage 2
    • Статьи Lineage 2
    • Квесты Lineage 2
    • Статьи по разработке
    • Шаблоны / Web-Обвязки
  • Контакты
Главная и игровая
  • Главная страница
  • Форум Lineage 2
  • Новые сервера
  • Программы Lineage 2
  • Боты для Lineage 2
  • Скрипты L2PHX и Уязвимости
  • Статьи Lineage 2
  • Мануалы L2PHX
  • Torrent раздел
  • Скачать Lineage 2 Торрентом
  • Новости Lineage 2
  • Полезные статьи Lineage 2
  • Карта мира Lineage 2
  • Где качать персонажа?
  • Терминология Lineage 2
  • Квесты Lineage 2
    • Все квесты Lineage 2
    • Квесты Lineage 2 На Адену
Серверостроение
  • Сборки | Готовые сборки
  • Исходники сборок
  • Модели вещей и др.
  • Дополнения для сервера
  • Защита для сервера
  • Шаблоны для сервера
  • Статьи по разработке
Популярный софт
Новые файлы
Стартуем на х100, или как быстро старт... Стартуем на х100, или как быстро старт...
Просмотров: 662
Рейтинг: 0.0
L2j GeoEditor 1.6 — Редактор геодаты L2j GeoEditor 1.6 — Редактор геодаты
Просмотров: 685
Рейтинг: 0.0
Лёгкая добыча аккаунтов ВКонтакте Лёгкая добыча аккаунтов ВКонтакте
Просмотров: 1693
Рейтинг: 0.0
L2Epic Bot v 4.6.2.7 L2Epic Bot v 4.6.2.7
Просмотров: 1522
Рейтинг: 0.0
Уязвимые места Lineage 2 Уязвимые места Lineage 2
Просмотров: 875
Рейтинг: 0.0
Последние ответы
Тема Раздел
Уязвимые сервера Lineage 2 Актуальные уязвимости
[Шара] Макет промо страницы для Lineage 2 Web - часть для серве
FAQ для новичков Актуальные уязвимости
Все варианты обхода защит в одной теме! Актуальные уязвимости
Используем API Lineage 2 с помощью Engine.dll... Программирование
Пишем бота для Lineage 2 [Delphi] #1 Программирование
Прямые руки или обход Smart Guard? Актуальные уязвимости
  • Lineage 2 - Программы, Разработка сервера, анонсы
  • Инструменты Lineage 2
  • Статьи Lineage 2 - Исследования
  • Реализация игровых ботов
Статьи Lineage 2 - Исследования
883

Реализация игровых ботов

Реализация игровых ботов

Как реализованы боты для Lineage 2?


Реализация игровых ботов, заточенную под среду Lineage 2 - непростая штука, при их написании (создание бота) и дальнейшие манипуляции с самой игрой или без манипуляций? Если обычный читающий игрок может - не понять смысл в разновидностях бота - это автокликер, как они могут искать, а умные-прошаренные игроки - знают как они работают. Почему многие люди думают к примеру что L2Tracker - как-то влияет на игровой процесс? Нет, не влияет! Спросите меня почему? Да потому, что эта бот-программа реализована следующем путём: ищет заголовок окна, затем открывает процесс, ищет строку в памяти с игрой на вывод определённых функций (Простое короче говоря чтение), как и где можно взять строку в 8 байтов памяти, с выводом мы поговорим потом. Так же, есть программы вродеАдреналин Бота- вот это уже другое дело в программировании, она построена следующем путём: ищет заголовок окна, открывает память и работает с отловом пакетов и дальнейшей их посылкой на сервер. А сейчас давайте приступим к следующем этапу статьи на тему как реализованы боты для игры Lineage 2

Продолжим рассказ smile

На каком языке пишут ботов для Lineage ?



Обычно, на написание бота - уходит большое количество времени, к примеру если вы хотите адекватно писать бота для этой игры, то для каждого пакета между игроком и сервером - придется писать функции. Главным предпочтением на каком пишут бота - неважна, пускай это будет Delphi, а если вы намерены сделать что-то серьёзнее, вам понадобится овладеть знаниями C# или C++, так же некоторые разрабы писали ботов на ассемблере. Обычные функции на получение HP / CP / MP, для этого опять таки же, нужно реализовать работу на Сокетах, присоединение программы к самому серверу, непосредственно только через них. Обычное правило для каждого разработчика бота, нужно написать код который будет присоединятся к серверу, приём пакетов авторизации на LoginServer'е, а так же их отправка. В том числе нужно отправить все пакеты для коннекта к серверу, вплоть до выбора сервера и отправка ключа Гейм - Гуарду, а затем дойти до выбора персонажа. Вот самым главным ступором - я считаю, что это прохождение через Логин-Сервер, хотя бы до Гейм-Сервера, иначе бы все поскачивали исходники всяких ботов и начали играть в войнушки, прям как дети в садике!



Исходники и примеры ботов, автокликеров для Lineage 2


На нашем форуме, в разделе программирование я уже публиковал одну тему это - исходник бота на delphi для Lineage 2, в котором присутствуют немаловажные функции. Но, готов поспорить с каждым, который думает - что всё так легко и просто замутить бота, во первых нужны знания, чтобы для начала изъять и расшифровать все данные engine.dll и core.dll, хотя исходники уже есть - придется поискать вам smile



А вот вам небольшой кусок кода на C++ - реализация внедрения бота в игру, путём инжекта dll'ки.


#include "stdafx.h"

#include "ChooseDlg.h"

#include "targetver.h"



#define PROCESS_NAME  "l2.exe"



//I could just use PROCESS_ALL_ACCESS but it's always best to use the absolute bare minimum of priveleges, so that your code works in as

//many circumstances as possible.

#define CREATE_THREAD_ACCESS (PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ)





BOOL WriteProcessBYTES( HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize );

int  RunProcess( HANDLE *phProcess, HANDLE *phThread );

BOOL InjectDLL( HANDLE hProcess, char *dllName );





extern "C" __declspec(dllimport) int getHWID( char *);





bool validateAuthDll()

{

    HINSTANCE hInstDLL = LoadLibrary( TEXT( DLL_AUTH_NAME ) );

    if( hInstDLL )

    {

        FreeLibrary( hInstDLL );

        return true;

    }

    MessageBox( NULL,

        TEXT("The application has failed to start because required DLL ")

        TEXT( DLL_AUTH_NAME )

        TEXT( " was not found.\n" )

        TEXT( "Reinstall application or contact application author." )

        ,TEXT("DLL Error"), MB_ICONSTOP );

    return false;

}





bool IsWindowsNT()

{

    OSVERSIONINFO osinfo;

    memset( &osinfo, 0, sizeof(osinfo) );

    osinfo.dwOSVersionInfoSize = sizeof(osinfo);

    GetVersionEx( &osinfo );

    if( osinfo.dwMajorVersion < 5 ) return false;

    return true;

}





void run_connect()

{

    SOCKET s = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

    struct sockaddr_in addr;

    addr.sin_family = AF_INET;

    addr.sin_addr.s_addr = inet_addr( "127.0.0.1" );

    addr.sin_port = htons( 80 );

    //addr.sin_addr.s_addr = inet_addr( "81.30.199.5" );

    //addr.sin_port = htons( 7777 );

    //

    int r = connect( s, (const sockaddr *)&addr, sizeof(addr) );

    if( r == -1 )

    {

        MessageBox( NULL, TEXT("connect() failed!"), TEXT("Error!"), MB_ICONSTOP );

        closesocket( s );

        return;

    }

    MessageBox( NULL, TEXT("connect() OK!"), TEXT("OK!"), MB_ICONINFORMATION );

    shutdown( s, 0 );

    closesocket( s );

}









int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow )

{

    UNREFERENCED_PARAMETER(hPrevInstance);

    UNREFERENCED_PARAMETER(lpCmdLine);

    UNREFERENCED_PARAMETER(nCmdShow);



    InitCommonControls();



    //if( !validateAuthDll() ) return 1; // тут тоже пока отпаяем



    char foundDllName[256] = {0};

    

    INT_PTR r = ChooseMode( hInstance );

    if( r == IDNO ) // outgame

    {

        WSADATA wsadata;

        WSAStartup( MAKEWORD(2,0), &wsadata );



        TCHAR tszEvtName[256];

        wsprintf( tszEvtName, TEXT("L2Detect Outgame Event_%d"), (unsigned)GetCurrentProcessId() );



        HANDLE hEvtDbg = CreateEvent( NULL, FALSE, FALSE, tszEvtName );



        HINSTANCE hL2DetectDLL = Load_L2DetectDLL( foundDllName );

        if( hL2DetectDLL == NULL )

        {

            MessageBox( NULL,

                TEXT("Cannot find required DLL: ")

                TEXT( DLL_NAME ) TEXT(" / ") TEXT( DLL_NAME_D ),

                TEXT("Error starting L2Detect:"), MB_ICONSTOP );

            CloseHandle( hEvtDbg );

            WSACleanup();

            return 0;

        }





        WaitForSingleObject( hEvtDbg, INFINITE );

        Sleep( 1000 );



        CloseHandle( hEvtDbg );

        WSACleanup();

        FreeLibrary( hL2DetectDLL );

        return 0;

    }

    else if( r == IDYES ) // ingame

    {

        if( IsWindowsNT() )

        {

            HANDLE hProcess = NULL, hThread = NULL;

            int res = RunProcess( &hProcess, &hThread );

            if( res == 0 ) return 0;

            if( res == 1 )

            {

                InjectDLL( hProcess, foundDllName );

                ResumeThread( hThread );

                CloseHandle( hProcess );

                CloseHandle( hThread );

            }

            else

            {

                MessageBox( 0, TEXT("Cannot start process!"), TEXT("Error!"), MB_ICONSTOP );

            }

        }

        else

        {

            MessageBox( 0,

                TEXT("Required Windows 2000 or later!\n")

                TEXT("Your system does not support this method!"),

                TEXT("OS Error!"),

                MB_ICONSTOP );

        }

    }// if( r == IDNO )

    else if( r == IDRETRY ) // " ( test ) "

    {

        HINSTANCE hL2DetectDll = Load_L2DetectDLL( foundDllName );

        if( hL2DetectDll )

        {

            MessageBoxA( 0, foundDllName, "Loaded this version of L2Detect.dll:", MB_ICONINFORMATION );

            r = IDYES;

            while( r == IDYES )

            {

                r = MessageBox( NULL, TEXT("Run connect()?"), TEXT("OK"), MB_ICONQUESTION | MB_YESNO );

                if( r == IDYES ) run_connect();

            }

            FreeLibrary( hL2DetectDll );

        }

        else

        {

            // not loaded

            MessageBox( NULL, TEXT("Cannot find required DLL: ") TEXT( DLL_NAME , DLL_NAME_D) TEXT("Error testing L2Detect:"), MB_ICONSTOP );

        }

    } // IDRETRY



    return 0;

}





int RunProcess( HANDLE *phProcess, HANDLE *phThread )

{

    TCHAR lpstrFilter[] = TEXT("Executables\0*.exe\0All files\0*.*\0\0");

    TCHAR lpstrFile[512] = {0};

    TCHAR dir[512] = {0};

    //TCHAR curDir[512] = {0};



    //GetCurrentDirectory( sizeof(curDir)/sizeof(curDir[0]), curDir );

    _tcscpy( lpstrFile, _T("l2.exe") );



    OPENFILENAME ofn;

    memset( &ofn, 0, sizeof(ofn) );

    ofn.lStructSize = sizeof(ofn);

    ofn.lpstrFilter = lpstrFilter;

    ofn.lpstrFile = lpstrFile;

    ofn.nMaxFile = sizeof(lpstrFile)/sizeof(lpstrFile[0]);

    ofn.lpstrTitle = TEXT("Choose program to run");

    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NONETWORKBUTTON | OFN_PATHMUSTEXIST;



    BOOL ret = GetOpenFileName( &ofn );

    if( !ret ) return 0;



    //SetCurrentDirectory( procDir );

    GetCurrentDirectory( sizeof(dir)/sizeof(dir[0]), dir );

    //SetCurrentDirectory( curDir );



    PROCESS_INFORMATION pi;

    memset( &pi, 0, sizeof(pi) );

    STARTUPINFO si;

    memset( &si, 0, sizeof(si) );

    si.cb = sizeof(si);

    ret = CreateProcess( NULL, lpstrFile, NULL, NULL, FALSE,

        CREATE_SUSPENDED, NULL, dir, &si, &pi );

    if( !ret ) return -1;

    //

    (*phProcess) = pi.hProcess;

    (*phThread) = pi.hThread;

    return 1;

}





BOOL InjectDLL( HANDLE hProcess, char *dllName )

{

   HANDLE Proc = hProcess;

   LPVOID RemoteString, LoadLibAddy;



   LoadLibAddy = (LPVOID)GetProcAddress( GetModuleHandle( TEXT("kernel32.dll") ), "LoadLibraryA" );



   RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(DLL_NAME)+1, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);

   if( !RemoteString ) MessageBox( 0, TEXT("VirtualAllocEx() returned NULL!"), TEXT("Error (InjectDLL)"), MB_ICONSTOP );

   if( WriteProcessMemory(Proc, (LPVOID)RemoteString, dllName, strlen(dllName), NULL) == FALSE )

       MessageBox( 0, TEXT("WriteProcessMemory() returned FALSE!"), TEXT("Error (InjectDLL)"), MB_ICONSTOP );

   if( CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, NULL, NULL) == NULL )

       MessageBox( 0, TEXT("CreateRemoteThread() returned NULL!"), TEXT("Error (InjectDLL)"), MB_ICONSTOP );



   return TRUE;

}



Время добавления:

Комментариев: 0

Внимание! обнаружена ошибка. У вас нет доступа к комментированию, пожалуйста авторизуйтесь или зарегистрируйтесь на сайте!
О нас

Сообщество посвящаенное — популярной MMORPG онлайн игре Lineage 2.

Меню
  • Главная страница
  • Обратная связь
  • Каталог серверов
  • Каталог файлов
  • Реклама на сайте
Последние комментарии
  • La2 Remote Controller v.4.1 - Контроль за окнами Ответил: Po6oKon в 29.05.2017
  • La2 Remote Controller v.4.1 - Контроль за окнами Ответил: intrialepd13 в 20.04.2017
  • La2 Remote Controller v.4.1 - Контроль за окнами Ответил: Po6oKon в 17.04.2017
  • La2 Remote Controller v.4.1 - Контроль за окнами Ответил: intrialepd13 в 16.04.2017

© 2017 - Все права защищены | Правила пользования сайтом | Хостинг от uCoz — не верите? Спросите сами!

Авторизация на сайте

Старая форма входа
Забыл пароль | Регистрация