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

[Pomoc] Pierwszy Program


Rekomendowane odpowiedzi

Opublikowano

Witam otóż postanowiłem zacząć swoją przygodę z programowaniem od obejścia wraz z injectorem do gry Metin2. Kod injectora(kod SnFede z UG) podał mi stronka111 ,ale ciągle mam problem. Programuję w Free Pascal.

 

Zrobiłem to tak i mam jeszcze 2 errory:

 

-complikation aborted

-syntax error ";" expected but "BEGIN" found

 

program AntiPatch
begin
#include <iostream>
#include <string>
#include <windows.h>
#include <tlhelp32.h>

using namespace std;
DWORD GetProcID(string ProcName);
DWORD WINAPI GetCurrentProcessId(void);
BOOL ProcessExists(string process);
int main()
{
   char* Coder="SnFede"; //qui il nome del coder
   char* DLLName="M2Fish.dll"; //qui il nome della DLL
   char* GameName="METIN2";//qui il nome del gioco
   char* ProcessName="metin2client1.exe"; //qui il nome del processo del gioco
   bool CloseAfterCorrectInjection=true;//true per uscire dopo la corretta iniezione. se fallisce non esce comunque

   DWORD procID = 0;
   system("color a");
   cout << "Visit UnFair-Gamers.com\n\n";
   cout << "Coded by:  " << Coder << "\n";
   cout << "Library:   " << DLLName << "\n";
   cout << "Game:      " << GameName << "\n";
   cout << "Process:   " << ProcessName << "\n\n";
   int nBufferLength = 100;
   CHAR awBuffer[100];
   GetCurrentDirectory(nBufferLength, awBuffer) ;
   strcat(awBuffer,"\\");
   strcat(awBuffer,DLLName);
   string dll = awBuffer;
   HMODULE hLocKernel32 = GetModuleHandle("Kernel32");
   FARPROC hLocLoadLibrary = GetProcAddress(hLocKernel32, "LoadLibraryA");
   HANDLE hToken;
   TOKEN_PRIVILEGES tkp;
   if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
   {
       LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);
       tkp.PrivilegeCount = 1;
       tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
       AdjustTokenPrivileges(hToken, 0, &tkp, sizeof(tkp), NULL, NULL);
   }
   system("start metin2client1.exe");
   HANDLE hProc = INVALID_HANDLE_VALUE ;
   cout << "Waiting for " << ProcessName << "...\n";
   while (!ProcessExists(ProcessName)){
   }
   cout << "Process detected!\n\n";
   procID = GetProcID(ProcessName);
   hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
   cout << "PID:       " << procID << "\n\n";
   cout << "Injecting " << DLLName << "...\n\n";
   dll += '\0';
   LPVOID hRemoteMem = VirtualAllocEx(hProc, NULL, dll.size(), MEM_COMMIT, PAGE_READWRITE);
   DWORD numBytesWritten;
   WriteProcessMemory(hProc, hRemoteMem, dll.c_str(), dll.size(), &numBytesWritten);
   HANDLE hRemoteThread = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)hLocLoadLibrary, hRemoteMem, 0, NULL);
   bool res = false;
   if (hRemoteThread){
       res = (bool)WaitForSingleObject(hRemoteThread, 10000) != WAIT_TIMEOUT;

       if (res){
           cout << "Dll succesfully injected!\n";
       }else{
           cout << "Injection failed\n";
       }
   VirtualFreeEx(hProc, hRemoteMem, dll.size(), MEM_RELEASE);
   CloseHandle(hProc);
   }else{
   cout << "Injection failed\n";
   system("PAUSE");
   return 0;
   }
   if (!CloseAfterCorrectInjection){system("PAUSE");}
   return 0;
}

DWORD GetProcID(string ProcName)
{
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe32.dwSize = sizeof(PROCESSENTRY32);
       do{
       //cout << pe32.szExeFile <<"\n";
               if(pe32.szExeFile == ProcName){
           DWORD ProcId = pe32.th32ProcessID;
           CloseHandle(hProcessSnap);
           return ProcId;
               }
       } while(Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
return 0;
}





BOOL ProcessExists(string process)
{
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe32.dwSize = sizeof(PROCESSENTRY32);
       do{
               if(pe32.szExeFile == process){
           CloseHandle(hProcessSnap);
           return true;
               }
       } while(Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
return false;
}
end.

Opublikowano

Nie wiem, czy w pascalu napiszesz coś więcej niż kalkulator/zegar (i to w wersji pod dos) no chyba, że kompilator do free ma jakieś większe możliwości - szczerze to polecam Ci używać Dev-Pas z tego powodu iż podkreśla składnię lub TP7 z uwagi na łatwość dodawania modułów.

http://turbopascal.programuj.com/
Tu masz stronke z TUTkami itp.

roomy.png

Wczoraj do ciebie nie należy. Jutro niepewne... Tylko dziś jest twoje.

Opublikowano

Przecież w free pascalu też są bibloteki...

Nie wspominając o tym że Dev-Pascal korzysta z kompilatora i bibliotek free pascala..

Moi drodzy, bo najważniejsze w kochaniu zwłok jest to, że nie marudzą.

Opublikowano

Mi w visual c++ 2005 tez nie działa przyczepiło sie do

#include <tlhelp32.h>

 

a tak wgl to wszystkie biblioteki sa w folderze include?? bo ja tej

<tlhelp32.h>

 

nie mam:) jesli tylko tam są to niech ktos upnie jak moze:D

Opublikowano

Ściągnij sobie Visual C++ redistributable, w nim jest większość przydatnych bibliotek.

A plik pobierz z załącznika.

TlHelp32.zip

Moi drodzy, bo najważniejsze w kochaniu zwłok jest to, że nie marudzą.

Opublikowano

Nie będę zaczynał nowego tematu. Pisze teraz nowy bardzo prosty program w Dev C++ i nie wiem jak ukryć konsole podczas włączania programu. Na razie mam odznaczone w opcjach projektu "Nie otwórz okna konsoli = Yes" ,ale to chyba jeszcze za mało.Mógłby mi ktoś powiedzieć co trzeba dodać jeszcze do kodu?

#include <iostream>
using namespace std;
int main ()
{
       system("start metin2client.bin");
       return 0;
}

Opublikowano

to normalna konsola windows w sumie , wystarczy help z CMD dla start chyba parametr /MIN

 

albo

 int main()
{
}

na

#include <windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
{
}

kompilujesz projekt jako aplikacja windows a nie konsolowa

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

Czyli miałoby wyglądać to w ten sposób?

#include <iostream>
#include <windows.h>
using namespace std;
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
{
       system("start metin2client.bin");
       return 0;
}

Opublikowano

Niepotrzebne ci iostrem i std.

Moi drodzy, bo najważniejsze w kochaniu zwłok jest to, że nie marudzą.

Opublikowano

int main()

{

FreeConsole();

 

tutaj twoj kod

}

 

Lub tak jak wyżej, robisz projekt win32, wtedy nie ma konsoli na start.

RAsfepN.png
Opublikowano

Zrobiłem w Aplikacja Windowsa tak:

#include <windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
{
       system("start metin2client.bin");
       return 0;
}

I mam 3 błędy:

- [Linker error] undefined reference to `WinMain@16'

- ld returned 1 exit status

- [build Error] [Luncher.exe] Error 1

Opublikowano

Nie wiem, czy w pascalu napiszesz coś więcej niż kalkulator/zegar (i to w wersji pod dos) no chyba, że kompilator do free ma jakieś większe możliwości - szczerze to polecam Ci używać Dev-Pas z tego powodu iż podkreśla składnię lub TP7 z uwagi na łatwość dodawania modułów.

http://turbopascal.programuj.com/
Tu masz stronke z TUTkami itp.

Delphi to inaczej Object Pascal, potrafi wyciągnąć tyle co C++ więc nie ogranicza się do kalkulatorów czy nawet trybu rzeczywistego (DOS), można pisać programy w czystym TP pod windowsa.

YOU MUST DIE

- Ganon, Koridai

Opublikowano

I co z tym?

Zrobiłem w Aplikacja Windowsa tak:

 

#include <windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
{
       system("start metin2client.bin");
       return 0;
}

 

 

I mam 3 błędy:

- [Linker error] undefined reference to `WinMain@16'

- ld returned 1 exit status

- [build Error] [Luncher.exe] Error 1

Opublikowano

Dopisz nazwy do typów argumentów:

#include <windows.h>

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{

}

Moi drodzy, bo najważniejsze w kochaniu zwłok jest to, że nie marudzą.

Opublikowano

Zrobiłem to w ten sposób i jeszcze konsola pokazuje się na ułamek sekundy:/

#include <windows.h>
using namespace std;
void Stealth(); 
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
   system("start metin2client.bin");
}
void Stealth() 
{ 
  HWND stealth; 
  AllocConsole(); 
  stealth = FindWindowA("ConsoleWindowClass", NULL); 
  ShowWindow(stealth,0); 


}

Opublikowano

Sprawdź czy wybrałeś "Windows Application" podczas tworzenia projektu...

Moi drodzy, bo najważniejsze w kochaniu zwłok jest to, że nie marudzą.

Opublikowano

To usuń linijke z namespace std;

Moi drodzy, bo najważniejsze w kochaniu zwłok jest to, że nie marudzą.

Opublikowano

Problem leżał w czymś innym brakowało Stealth(); przed komendą systemową.

#include <windows.h>
void Stealth(); 
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
   Stealth();
   system("start metin2client.bin");
}
void Stealth() 
{ 
  HWND stealth; 
  AllocConsole(); 
  stealth = FindWindowA("ConsoleWindowClass", NULL); 
  ShowWindow(stealth,0); 
}

 

Dzięki wszystkim za pomoc!

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...