avatar_LeGrand

DLL Injection: Как вживлять код DLL в процесс игры MU online

Автор LeGrand, 2009 Май 09, 15:52

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

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

Ключевые слова [SEO] mu onlinedll injectionдебаггер main.exe

LeGrand

Изучая С++ я столкнулся с необходимостью красиво, и без насилования дебаггером main.exe, да и вообще любого файла, вживлять код DLL в процесс(тоесть main.exe)

DLLinjecter.cpp

Цитировать#include "stdafx.h"
using namespace std;

#define dll "superanticheat.dll"

int InjDll(char *dllname, DWORD procID)
{
char buf[MAX_PATH];
LPVOID dllNameMem;
HANDLE hProcess, hThread[2];
LPVOID loadlibaddr, stringaddr;
HMODULE findoff;
DWORD exitcode, modfunc;
int nStatus = 0;

if((hProcess = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_CREATE_THREAD, FALSE, procID))){
loadlibaddr = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
if(loadlibaddr){
dllNameMem = (LPVOID)VirtualAllocEx(hProcess, NULL, strlen(dllname), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, (LPVOID)dllNameMem, dllname, strlen(dllname), NULL);
hThread
  • = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)loadlibaddr, (LPVOID)dllNameMem, NULL, NULL);
if(hThread
  • ){
WaitForSingleObject(hThread
  • , INFINITE);
GetExitCodeThread(hThread
  • , &exitcode);
findoff = LoadLibrary(dllname);
if(findoff){
modfunc = (DWORD)GetProcAddress(findoff, (LPSTR)1);
exitcode += modfunc - (DWORD)findoff;
hThread[1] = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)exitcode, NULL, NULL, NULL);
if(hThread[1]) nStatus = 1;
}
}
}
CloseHandle(hProcess);
}

return nStatus;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
char processPath[MAX_PATH], *err;
PROCESS_INFORMATION pi;
STARTUPINFO si;
TOKEN_PRIVILEGES tp;
HANDLE hPrivToken;

memset(&si, 0, sizeof(STARTUPINFO));
memset(&pi, 0, sizeof(PROCESS_INFORMATION));
GetSystemDirectory(processPath, MAX_PATH);
strncat(processPath, "\main.exe", MAX_PATH - sizeof("\main.exe"));
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hPrivToken)){
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges
  • .Luid);
tp.PrivilegeCount = 1, tp.Privileges
  • .Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hPrivToken, 0, &tp, sizeof(tp), NULL, NULL);
CloseHandle(hPrivToken);
}

si.cb = sizeof(STARTUPINFO), si.wShowWindow = SW_SHOW, si.dwFlags = STARTF_USESHOWWINDOW;
if(CreateProcess(processPath, NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi)){
if(InjDll(dll, pi.dwProcessId)){
err = "DLL Injected successfully";
}else{
err = "Cannot inject DLL";
TerminateProcess(pi.hProcess, 0);
}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}else err = "Cannot CreateProcess";
MessageBox(0, err, "Info", MB_ICONINFORMATION);
return 0;
}

  • stdafx.h
    Цитировать#include <stdio.h>
    #include <tchar.h>
    #include <cstdio>
    #include <cstdlib>
    #include <windows.h>
    #include <conio.h>
    #include <iostream>
    #include <string>
    #include <tlhelp32.h>
    #include <shlwapi.h>
    #include <dos.h>
    #include <time.h>
    Для компилирования:
    1. Тыкни на проект->Properties->General->Use Multi-Byte Character Set
    2. Меню - Project->Properties->Linker->System->Sub system поставить на Not Set
    Надеюсь кому-то понадобится
    Я буду продолжать выкладывать простые Сорцы VC++/VC#


Everybody

#1
Интересно какая реакция антивирусников в итоге на такое приложение?!
В соседнем топике видел предложение склиавать joiner-ом приложения с длл-кой в итоге можно представить как антивирусник распознает как зараженное ПО и предложит вылечить - антихак тем самым отрежет  

LeGrand

Берем "мой" сорц
Компилим его под себя
Берем main.exe и superanticheat.dll
Берем MoleBOX, запечатываем скопмилированную запускалку, маин и длл'ку
Поверх бокса темиду самую последнюю на макс настройках, или винлиценз, антивир не вырежет, но будет ругаться ))) на темиду )

Killbrum

Маленькое но =) во первых я не на 100% ознакомился с кодом... но по сути мне не нравится. Почему? Ну блин. Так ты хукнул в меин. И она там сидит. И всё. А так... во первых прав администратора может не быть. Во вторых надо ещё одну программу которая будет подгружать эту самую длл...

З.Ы. Всё гениальное - просто =)

LeGrand

Пишем простенькую программу,
system("main.exe");
system("dll_injecter.exe");

Получится так, что сначала запускаем процесс, потом внедряем ДЛЛ'ку

someuser

ЦитироватьБерем MoleBOX, запечатываем скопмилированную запускалку, маин и длл'ку
Поверх бокса темиду самую последнюю на макс настройках, или винлиценз, антивир не вырежет, но будет ругаться ))) на темиду )
можеш ссылку дать плиз. че то я не могу найти эту самую молебокс. может не там ищу ( она платная вобще?

Lorencia

Спойлер
*https://molebox.com/4.1510/MoleBoxUltraSetup.exe
не бесплатная крякай или ищи серийник.
[свернуть]

someuser

Цитироватьне бесплатная крякай или ищи серийник.
спасибо. щас покопаюсь. кряк выложу если найду

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