HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 04.09.2013, 22:37
MogAika
Участник форума
Регистрация: 18.03.2013
Сообщений: 237
С нами: 6922017

Репутация: 128
По умолчанию

Мало кто знает что-то, кроме добавления функций в собейт по левым урокам. Так вот, в этот раз буду говорить про другие вещи, может быть вам придет что-то новое в голову.

Мы создадим новый процесс с gta_sa и подключим к ней samp.dll.

Казалось бы, чего тут крутого? А крутость в том, что вы сможете заинжектить кучу своих dll-ок до запуска игры!

Для начала напишем функцию инжекта.

Как она работает:
  • Выделяем место в программе-жертве
  • Копируем в это место строку с названием нашей dll
  • Создаем у жертвы новый поток, в качестве начала потока укажем смещение функции "LoadLibraryA" из "kernel32.dll". В качестве аргумента передаем смещение на строку.
  • PROFIT!!! Создается поток, который вызывает функцию DllMain в нашей дллке.
Теперь код:

Код:





Код:
BOOL Inject(DWORD pId, LPSTR dllName)
{
  HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pId);
  if(h)
  {
    LPVOID LoadLibAddr = (LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA");
    LPVOID dereercomp = VirtualAllocEx(h, NULL, strlen(dllName), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    WriteProcessMemory(h, dereercomp, dllName, strlen(dllName), NULL);
    HANDLE asdc = CreateRemoteThread(h, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddr, dereercomp, 0, NULL);
    WaitForSingleObject(asdc, INFINITE);
    VirtualFreeEx(h, dereercomp, strlen(dllName), MEM_RELEASE);
    CloseHandle(asdc);
    CloseHandle(h);
    return TRUE;
  }
  return FALSE;
}


Теперь перейдем к подключению к серверу:
  • Для создания нового процесса используем функцию "CreateProcess" с аргументом CREATE_SUSPENDED
  • В качестве параметра передадим строку формата "-c -n Ник -h Айпи -p Порт"
  • Подключим samp.dll
  • Запустим главный поток gta
Теперь в коде:

Код:





Код:
STARTUPINFO cif;
ZeroMemory(&cif,sizeof(STARTUPINFO));
PROCESS_INFORMATION pi;
if(CreateProcess("gta_sa.exe", "-c -n NickName -h 228.227.226.225 -p 7777", NULL,NULL, FALSE, DETACHED_PROCESS | CREATE_SUSPENDED, NULL, NULL, &cif, &pi))
{
  if(pi.hProcess!=NULL)
  {
    if(!Inject(pi.dwProcessId, "samp.dll"))
    {
      TerminateProcess(pi.hProcess, 0);
      ExitProcess(0);
    }
    ResumeThread(pi.hThread);
  }
} else MessageBox(NULL, "Failed to Create Process", "Error", MB_ICONERROR);


PROFIT!!!

Если вам надо подключить собейт, который лежит в другом файле, нежели 3d39.dll, то за место

Код:





Код:
if(!Inject(pi.dwProcessId, "samp.dll"))


ставьте







Код:





Код:
if(!Inject(pi.dwProcessId, "samp.dll") || !Inject(pi.dwProcessId, "sobeitdllname.dll"))




Удачи в создании своих клиентов

P.S: Вы можете создавать свои dll и инжектить их до запуска игры, что расширяет и упрощает возможности модифицирования программ.

P.S: Нужно добавить в начале

Код:





Код:
#include 
#include
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.