Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Dll injection


Rekomendowane odpowiedzi

Opublikowano

Siema!

Mam taki kod:

// Filename: DLL Injector.cpp
// Author: HadFuny
// Date: 31-05-2010
// HadFuny Copyright 2010

#include <windows.h> 
#include <tlhelp32.h> 
#include <shlwapi.h> 
#include <conio.h> 
#include <stdio.h> 
#include <iostream>


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

BOOL Inject(DWORD pID, const char * DLL_NAME); 
DWORD GetTargetThreadIDFromProcName(const char * ProcName); 
using namespace std;
char* proc = "text";
char* dll = "text";

int main(int argc, char * argv[]) 
{
   // The name of the process you want to inject
   printf("Name of process:");
   cin >> proc;
   printf("/nName of DLL:");
   cin >> dll;
   DWORD pID = GetTargetThreadIDFromProcName(proc); 
    
   // Get the dll's full path name 
   char buf[MAX_PATH] = {0}; 
   GetFullPathName(dll, MAX_PATH, buf, NULL);  // On the place where is Project1.dll you can put the name of your dll
   printf(buf); 
   printf("\n"); 
    
   // Inject our main dll
   if(!Inject(pID, buf)) 
   { 
    printf("Not loaded!"); // If injection is not sucsessfull 
   }
   else
   { 
     printf("Loaded!"); //  If injection is sucsessfull 
   } 
   _getch(); 
   return 0; 
} 

BOOL Inject(DWORD pID, const char * DLL_NAME) 
{ 
   HANDLE Proc; 
   HMODULE hLib; 
   char buf[50] = {0}; 
   LPVOID RemoteString, LoadLibAddy; 
   if(!pID) 
      return false; 
   Proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); 
   if(!Proc) 
   { 
      sprintf(buf, "OpenProcess() failed: %d", GetLastError()); 
      //MessageBox(NULL, buf, "Loader", MB_OK); 
      printf(buf); 
      return false; 
   } 
   LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); 
   // Allocate space in the process for our DLL
   RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(DLL_NAME), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); 
   // Write the string name of our DLL in the memory allocated 
   WriteProcessMemory(Proc, (LPVOID)RemoteString, DLL_NAME, strlen(DLL_NAME), NULL); 
   // Load our <strong class="highlight">DLL</strong> 
   CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, NULL, NULL); 
   CloseHandle(Proc); 
   return true; 
} 

DWORD GetTargetThreadIDFromProcName(const char * ProcName) 
{ 
   PROCESSENTRY32 pe; 
   HANDLE thSnapShot; 
   BOOL retval, ProcFound = false; 

   thSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
   if(thSnapShot == INVALID_HANDLE_VALUE) 
   { 
      //MessageBox(NULL, "Error: Unable to create toolhelp snapshot!", "2MLoader", MB_OK); 
      printf("Error: Unable to create toolhelp snapshot!"); 
      return false; 
   } 
   pe.dwSize = sizeof(PROCESSENTRY32); 
   retval = Process32First(thSnapShot, &pe); 
   while(retval) 
   { 
      if(StrStrI(pe.szExeFile, ProcName)) 
      { 
         return pe.th32ProcessID; 
      } 
      retval = Process32Next(thSnapShot, &pe); 
   } 
   return 0; 
}

 

I po wpisaniu name processu apka się wiesza, wie ktoś czemu ?

I przy kompilacji wywala 7 problemów, ale apka się kompiluje.

Opublikowano

 

nie powinno afaik, zrób jakieś debug puts'y żeby sprawdzić w którym dokładnie miejscu się zawiesza, i daj znać.

 

czyli

..

puts("1")

...

puts("2")

...

 

dzięki czemu zobaczymy że np 1 sie wypisała, a 2 nie, czyli zawieszka jest pomiedzy tymi dwoma, mozemy teraz bardziej szczegolowo to badac wstawiajac kolejne putsy az w koncu znajdziemy konkretna zawieszajaca linijke.

 

 

@edit

Juz wiem. Nie mozesz wpisac nic do

char* proc = "text"

ponieważ to tak naprawde jest const char, w pamieci only read, co powoduje acccess violationa przy

cin>>proc;

 

więc zamiast

char* proc="xx"
daj

char* proc= new char[100]

tak samo z drugim pointerem.

 

btw zmyliłeś troche, aplikacja sie crashuje, nie zwiesza;p a ja analizowalem petla czy nie jest nieskończona.... xD

 

btw2 tak to jest jak sie nie czyta warningow

czarno na bialym

warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]|

btw3 ten program pisal jakis retard...;p

Pisze boty do gier WWW na zlecenie.

Opublikowano

Macie jakiś C++ injector ?

uzyj google....

 

Jeżeli poprawisz te błędy które Ci wskazałem ten injector również powinnien zadziałać.

Pisze boty do gier WWW na zlecenie.

Opublikowano

Dobra injector jest już gotowy.

Za chuja nie mogę rozkmninić .dll:

#include <windows.h>

BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
{
    switch(reason)
    {
        case DLL_PROCESS_ATTACH:
            MessageBox(NULL, "DLL_PROCESS_ATTACH", "", MB_OK);
        break;

        case DLL_PROCESS_DETACH:
            MessageBox(NULL, "DLL_PROCESS_DETACH", "", MB_OK);
        break;

        case DLL_THREAD_ATTACH:
            MessageBox(NULL, "DLL_THREAD_ATTACH", "", MB_OK);
        break;

        case DLL_THREAD_DETACH:
            MessageBox(NULL, "DLL_THREAD_DETACH", "", MB_OK);
        break;
    }

    return TRUE;
}

 

Nie działa, tzn. niby jest podpięta do procesu, bo nie da się usunąć tej .dll jak mam włączony process, ale nie wyświetla się nic.

Opublikowano
#include <windows.h>

extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
{
    switch(reason)
    {
        case DLL_PROCESS_ATTACH:
            MessageBox(NULL, "DLL_PROCESS_ATTACH", "", MB_OK);
        break;

        case DLL_PROCESS_DETACH:
            MessageBox(NULL, "DLL_PROCESS_DETACH", "", MB_OK);
        break;

        case DLL_THREAD_ATTACH:
            MessageBox(NULL, "DLL_THREAD_ATTACH", "", MB_OK);
        break;

        case DLL_THREAD_DETACH:
            MessageBox(NULL, "DLL_THREAD_DETACH", "", MB_OK);
        break;
    }

    return TRUE;
}

spróbuj to. Brak extern "C" powoduje takie problemy, przynajmiej w MinGW.

Pisze boty do gier WWW na zlecenie.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...