Winsock, hook na recv, WS2_32.recv()

0

Witam,
chciałbym zrobic hooka (tak to sie chyba nazywa) na funkcje
konkrety, chodzi o tibie 8.50

[code]Tibia 8.50
Found intermodular calls, item 797
Address=00576147
Disassembly=CALL DWORD PTR DS:[<&WS2_32.#16>]
Destination=WS2_32.recv[/code]
nie wiem czy to sie komukolwiek przyda, ale jesli juz pisac temat, to sadze, ze powinno dawac sie wszystkie potrzebne linki,
client gry: http://download.tibia.com/tibia850.exe
ollydbg http://www.ollydbg.de/odbg110.zip <font size="1">[link na stronie http://www.ollydbg.de/download.htm]</span>

przy pomocy olledbg znalazlem adres wskaznika na funkcje recv
ale teraz nie mam pojecia co zrobic dalej

mam taki source programu

#include <windows.h>
#include <iostream>
//#include "inject.h"

	typedef int (WINAPI *SENDPACKET)(DWORD, char*, BOOL, BOOL);
class client
{
	public:
	HWND handle;
	DWORD pid;
	HINSTANCE hLib;
	SENDPACKET SendPacket;
	
	client() 
	{
		SendPacket = NULL;
		handle=FindWindow("TibiaClient", 0);
		GetWindowThreadProcessId(handle, &pid);
		hLib = LoadLibrary("packet850.dll");
		SendPacket = (SENDPACKET)GetProcAddress(hLib, "SendPacket");
	}
	
	void client::sendpacket() 
	{
	char Packet[3];
	Packet[0]=0x01;
	Packet[1]=0x00;
	Packet[2]=0x65;
	SendPacket(pid, Packet, 1, 0);
	}
	
	client::~client()
	{
		if(hLib)
			FreeLibrary(hLib);
	}
};
	
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

    client *cln;
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;
    



    //proste wysylanie pakietu
    (new client)->sendpacket();
    //proste wysylanie pakietu koniec
    
    
    
    
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "winapp",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

http://files.getdropbox.com/u/69903/packet850.dll

Zwracam sie do was z prośba w jaki sposob,
jeśli to możliwe,
sprawdzac kazde wywolanie funkcji recv z clienta gry?
Z tego co zobaczylem w przykladach bedzie to wygladalo mniej wiecej jak obsluga komunikatow w winapi,
tylko jak, czym? Wszystkie tutorialne, ktore widzialem dotyczyly tylko tworzenia prostego polaczenia typu client-server, a nie hookowania.

Bardzo prosze o wskazowki czy linki do prostych przykladow.

edit
ps bede pisal cos, co mnie zainteresowalo, jesli ktos w przyszlosci mialby podobne problemy http://www.edgeofnowhere.cc/viewtopic.php?p=2483118

0

hook w c? powodzenia.

tibia kozysta z tcp, pakiety sa pewnego rodzaju wiadomosciami.
masz naglowek ktory mowi ci ile danych jest potem.

najpierw pobierasz 2 bajty (ercv(.., .., 2, 00)), a pozniej to co dostaniesz, max 0xFFFF min 0x0000.

przed recv masz 5 wolnych bajtow (nop'y).

podmieniasz mov edi,edi na jmp $-2, wczesniej zamieniasz 5 nopow na call twoja_funkcja.
twoja_funkcja to funkcja obslugi hooka ([esp+4] = poczatek argumentow recv).
mozesz teraz callnac recv ([esp+0]+2) ofc kopiujac argumenty na stos. powracasz przez add [esp+0],2/retn 16. nie zapomnij zachowac eax (z tego co zwroci recv 2), ebx/edi/esi/ebp. no i ofc esp.

kolejna sprawa to to ze modyfikacja pamieci aktywnego watku nie jest legalnym zabiegiem, ale to cie chyba nie obchodzi.

0

a w jaki sposob moge podmienic to?
mam na mysli to, ze przy wysylaniu to bardzo prosta sprawa jest, bo:

SendPacket = (SENDPACKET)GetProcAddress(hLib, "SendPacket");

a ja bardzo chcialbym zobaczyc przyklad jakis dot. zabiegu z recv
rozumiem, ze musze napisac cos ala wlasny packetrecv.dll?

wycialem, bo nieprzydatne, tutaj byla zawartosc packet.dll'a

chcialbym uzyskac takie cos

LRESULT CALLBACK WindowProcedure (char *buf, int len ...)
{
    switch (message)                  /* handle the messages */
    {
        case PACKET_CAME:
            //operacje z pakietem, kiedy przychodzi
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
</span>

sa jakies docs na ten temat?
ewentualnie cos, zeby poczytac o tym?

0

po pierwsze zapytaj o cos prostszego, i pogodz sie z tym ze w tym tygodniu nie napiszesz tego.
najpierw musisz sie nauczyc podstaw, a dopiero pozniej brac sie za cos czego jeszcze nie rozumiesz.

ten kod co wkleiles nic nie robi z recv tylko odczytuje deskryptor socketa i tworzy watek ktory wysyla dane...

aha, i polecam fasm, zygac mi sie chce kodem masma

0

chcialbym zobaczyc, jak to, co chce uzyskac powinno wygladac w pseudokodzie
ja rozumiem to w ten sposob

void callback recv(char *buff,len);
handle=getprocessid(client_gry)
winsck_recv_addr=0x00576147
hook(wykorzystanie_adresu(winsck_recv_addr),&recv)
void callback recv(char *buff,len) {/*dzieje sie cos z odebranymi/*}
callback do komunikatow

rozumiem, ze ta funkcja wykorzystanie_adresu zrobi cos takiego:
zalozmy, ze w gdzies tam jest ws2_32.recv
chodzi o to w tym, co chce, zeby wstawic przed ta funkcja odwolanie do tej void callback recv(char *buff,len), tak?

rozumiem, ze musze poznac podstawy assemblera,
tak zrobie

czy jesli bede dobrze rozumial to, co napisales mi w 2 poscie, to juz bede blisko rozwiazania?

0

o kolejny tibijski kraker...
zapamiętaj sobie: nie wolno hakować/oszukiwać/czitować w grach online!!!

panowie, nie pomagajcie mu :P

masz grę możesz sobie w nią pograć, w ogóle wybij sobie z głowy włamywania się na konta...
jeszcze bym zrozumiał gdybyś znał się cokolwiek na programowaniu, ale wybacz, jak grasz to graj i nie kombinuj...

0
_crayze napisał(a)

o kolejny tibijski kraker...
zapamiętaj sobie: nie wolno hakować/oszukiwać/czitować w grach online!!!

panowie, nie pomagajcie mu :P

masz grę możesz sobie w nią pograć, w ogóle wybij sobie z głowy włamywania się na konta...
jeszcze bym zrozumiał gdybyś znał się cokolwiek na programowaniu, ale wybacz, jak grasz to graj i nie kombinuj...

Jestem oburzony.
nie masz dowodu na to, ze chce zrobic cokolwiek zwiazanego z wyludzaniem dostepu do kont innych graczy.
kolejna rzecz. Jesli zastanowilbys sie, to domyslilbys sie, ze to, o co mnie oskarżasz nie ma zwiazku o to, o co prosze. [biore pod uwage to, ze nie wiesz o czym mowie. Otoz mnie interesuje HOOK na recv. Czyli cos zwiazanego z odbieraniem pakietow. To jest zbedne w programie do smiesznego wyluadzania kont.]
zmarnowalem kilka lat na zabawy w php, js, pascalu, a teraz popracuje troche, zeby to nadrobic.
Pomysl stworzenia aplikacji do gry motywuje mnie do nauki czegos nowego.

nie wolno ... czitować w grach online

znajdywanie cheaterow to zadanie gamemasterow.
jesli ingerencja w clienta gry jest taka prosta, to dlaczego nie wykorzstac tego do celow edukacyjnych

0

http://research.microsoft.com/en-us/projects/detours/

  • bardzo ulatwi Ci tworzenie nakladek na istniejace API, w tym send/recv z winsock

ps. zgodze sie z Toba -- pisanie botow do gier niedosc ze bawi, to i wiele uczy. wystarczy spojrzec na flashowe gierki i ich highscore'y -- ogromna wiekszosc highow w popularnych gierkach to wyniki wlasnie botow :) wiem, bo sobie popisalem pare i nawet calkiem wysoko dawaly rade wyciagnac, a to co robily na ekranie na bank czlowiek by nie nadazyl.. pomijam 'tetris master'a..

0
quetzalcoatl napisał(a)

http://research.microsoft.com/en-us/projects/detours/

  • bardzo ulatwi Ci tworzenie nakladek na istniejace API, w tym send/recv z winsock

ok, chociaz wolalbym zobaczyc to na najprostrzych przykladach, tzn. miec to napisane np. w jednym cpp pliku bez zadnych dodatkowych, wtedy jest co analizowac ;p

mam pytanie jeszcze dot. tej implementacji

DWORD HookCall(DWORD dwAddress, DWORD dwFunction)
{
	DWORD dwOldProtect, dwNewProtect, dwOldCall, dwNewCall;
	BYTE callByte[5] = {0xE8, 0x00, 0x00, 0x00, 0x00};

	dwNewCall = dwFunction - dwAddress - 5;
	memcpy(&callByte[1], &dwNewCall, 4);
	
	VirtualProtectEx(GetCurrentProcess(), (LPVOID)(dwAddress), 5, PAGE_READWRITE, &dwOldProtect);
	memcpy(&dwOldCall, (LPVOID)(dwAddress+1), 4);
	memcpy((LPVOID)(dwAddress), &callByte, 5);
	VirtualProtectEx(GetCurrentProcess(), (LPVOID)(dwAddress), 5, dwOldProtect, &dwNewProtect);
	return dwOldCall;
}

powiedzcie mi prosze, czy to, co chce uzyskac rozni sie wiele od tego, co zacytowalem?
rozumiem, ze to jest hook na wywolywanie, ale zapytac nie zaszkodzi, czy roznica jest duza ; p

0

memcpy((LPVOID)(dwAddress), &callByte, 5);

critical error, race condition detected

0

w sumie masz rację samym recvem nie dostaniesz passów do konta, chyba, że protokół je odsyła, bo jest taka ewentualność, a nawet kiedyś miałem opis protokołu tibii :>

ale właściwie po ci same odpowiedzi serwera, chcesz podglądać co się dzieje w kliencie? do tego musiałbyś implementować cały protokół, chce ci się?
jak już zakładać hook to na ruch w obie strony :P
i to taki którym będziesz mógł kontrolować to co jest wysyłane a co nie :> pomyśl sobie jakie to daje możliwości :>

0

chce wlasnego bota napisac
nie potrzebuje hooka na informacje wysylane,
a poza tym, to jesli dowiem sie jak zrobic hooka na recv, to send bedzie zapewne takie samo, albo bardzo podobne,
ogolnie to chodzi mi o jak najszybsza reakcje na eventy typu zostales-zaatakowany albo nowa istota pojawila sie na ekranie.
mozna oczywiscie takie rzeczy sprawdzac w cliencie, ale hook na recv jest szybszy i daje wieksze mozliwosci, do tego jest czytelniejszy
funkcje hooka na sendpacket w cliencie mam source z neta, ale recv znalazlem tylko proste tutki, dlatego zwrocilem sie z pomoca na forum, bo jestem w stanie sobie tylko wyobrazic jak to powinno dzialac, ale nie jestem w stanie tego w praktyce zrobic, dlatego (nikt z forumowiczow nie lubi takiego udzielania pomocy) liczylem na jakies proste przyklady, ale dzisiaj uswiadomilem sobie, ze jezykow powinnismy sie uczyc od tych najnizszych

zaluje, ze nie zostalem jakos zapoznany z asm zaraz po tym, jak dostalem komputer,
co prawda explorowanie htmla bylo excytujace, ale teraz podstawy inzynerii elektroniczno-informatycznej mialbym w jednym palcu
latwiej byloby nawet zrozumiec parser c++, jesli znalbym asm,
np. nie bylo by tego zdziwienia, ze nie mozna przeslac tablicy samej w sobie jako wyjscie funkcji

sadze, ze teraz, jak juz zaczalem sie interesowac asm, to to, ze poznam go przedzej czy pozniej
byc moze bede potrzebowal na jakis konkurs bardzo wydajny algorytm, a taki bedzie najszybciej napisac w asm niz w jakims jezyku wysokiego stopnia, wtedy sie skupie na tym problemie,

a teraz to chcialem to w taki sposob zalatwic, jakis tutek przeczytam, skleje z tego cos, co mi pozwoli przechwytywac te pakiety i wio

najbardziej "napalilem" sie na wlasny jezyk skryptowy, z wlasnym definiowaniem funkcji, klas,
ale jednak, tak jak to juz mi napisal w tym temacie jeden forumowicz:
"nie moge robic czegos, czego jeszcze dobrze nie rozumiem"

ps zastanawia mnie tylko jedno, co do samego [url=http://4programmers.net/Forum/553610#id553610]asm[/url]
[img]http://files.getdropbox.com/u/69903/ScreenShot2049.jpg[/img]
gdzie tutaj sa te nop'y?

0

Znajdz w tibiaapi adres (recvpointer).
(Tablica IAT w pamieci jest stala)
Zakladam ze wstrzykujesz ta DLL w klienta tibii.
I zainicjuj hooka:

             //API hook
             DWORD dwOldProtect, dwNewProtect, funcAddress, origAddress;
             funcAddress = (DWORD)&MyRecv; //adres do twojej funkcji
             origAddress = (DWORD)((int*)0x5B05DC); //recv pointer - adres z tibiaapi (8.5)
             VirtualProtect((LPVOID)origAddress, 4, PAGE_READWRITE, &dwOldProtect);
             memcpy((LPVOID)origAddress, &funcAddress, 4);
             VirtualProtect((LPVOID)origAddress, 4, dwOldProtect, &dwNewProtect);

MyRecv powinno wygladac tak:

int APIENTRY MyRecv(SOCKET s, char* buf, int len, int flags)
{
    int bytes = recv(s, buf, len, flags);

    if (bytes > 0)
    {
       // tutaj sie robisz co chcesz z danymi zawartymi juz w char*buf
       // pamietaj aby nie zmienic zawartosci *buf poniewaz odsylane sa do klienta po wyjsciu z tej funkcji
       // najlepiej skopiuj tutaj to do lokalnego bufora

    }

    return bytes;
}
0

najbardziej "napalilem" sie na wlasny jezyk skryptowy, z wlasnym definiowaniem funkcji, klas, ale jednak, tak jak to juz mi napisal w tym temacie jeden forumowicz: "nie moge robic czegos, czego jeszcze dobrze nie rozumiem"

wierz mi: lepiej wyjdziesz, jesli zamiast tworzyc nowy jezyk, uzyjesz juz ktoregos z istniejacych - np. Lua na przyklad swietnie sie nadaje do wlaczania do innych programow jako silnik skryptowy, prosta, malutka, debilnie latwo ja nagiac do wyglada a'la obiektowego. ew. Ruby, Python, Perl, PHP, Java, ...

0

mam pytanie dot. podstaw
jak z http://files.getdropbox.com/u/69903/Hook.rar stworzyc dlla w czystym dev-cpp 4.9?
mam blad

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

0
test30 napisał(a)

mam pytanie dot. podstaw
jak z http://files.getdropbox.com/u/69903/Hook.rar stworzyc dlla w czystym dev-cpp 4.9?
mam blad

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

:| ustaw w opcjach typ projektu jako DLL
a najlepiej zmień tego śmiecia na coś w czym masz debugger, bo bez tego narzędzia długo nie pociągniesz

znaj moje dobre serce, sam byś do tego długo, długo, a nawet dłużej dochodził:
aplikacja o nazwie jakiej chcesz:

#include <windows.h>
#include <psapi.h>
#pragma comment(lib,"psapi.lib") //to w dev cpp ci nie będzie działać
/* bo tam musisz dodać bibliotekę o nazwie libpsapi.a w opcjach projektu, nie pytaj się jak, tylko poszukaj sobie gdzieś odpowiedzi, bo mnie całkiem wkurwisz */

void InjectDLL(HANDLE hProc)
{
  const char DLLname[] = "tibia cracker.dll";
  DWORD MemorySize = sizeof(DLLname)+1;
  void* memory = VirtualAllocEx(hProc,NULL,MemorySize,MEM_COMMIT | MEM_RESERVE,PAGE_READWRITE);
  SIZE_T wrtn;
  WriteProcessMemory(hProc,memory,DLLname,MemorySize,&wrtn);
  
  DWORD ThreadID;
  HANDLE thread = CreateRemoteThread(hProc,NULL,0,(LPTHREAD_START_ROUTINE)LoadLibrary,memory,0,&ThreadID);
  WaitForSingleObject(thread,INFINITE);
  CloseHandle(thread);
  
  VirtualFreeEx(hProc,memory,0,MEM_RELEASE);
}

int __stdcall WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
  const DWORD ProcessIDMaxSize = 1000; 
  DWORD ProcessID[ProcessIDMaxSize];
  DWORD ProcessesCount;
  
  EnumProcesses(ProcessID,ProcessIDMaxSize,&ProcessesCount);
  ProcessesCount /= sizeof(DWORD);
  
  DWORD i = 0;
  for(;  i < ProcessesCount;  i++)
   if(ProcessID[i])
   {
     HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_CREATE_THREAD |
                                PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, ProcessID[i]);
     if(hProc)
     {
       const DWORD StrSize = 256;
       char str[StrSize];
       GetModuleBaseName(hProc,NULL,str,StrSize);
       
       if(!memcmp(str,"Tibia.exe",9))
       {
         InjectDLL(hProc);
         CloseHandle(hProc);
         return 0;
       }
       CloseHandle(hProc);
     }
   }
  
  if(i == ProcessesCount) MessageBox(0,"Nie znaleziono procesu \"Tibia.exe\"",0,0);
  
  return 0;
}

aplikacja musi zostać uruchomiona tylko raz, gdy zostanie już uruchomiony klient gry, jej zadaniem jest zmuszenie procesu Tibii do załadowania i wykonania kodu poniżej przedstawionej DLLki
Wykorzystywana jest technika o nazwie DLL Injection, tu masz na czym ona polega: http://en.wikipedia.org/wiki/DLL_injection (użyty sposób #2)

DLLka (kompilujesz to jako DLL):
nazwa tej DLLki musi się zgadzać z tym co tu podasz: const char DLLname[] = "tibia cracker.dll"; (początek funkcji InjectDLL) w powyższej aplikacji
skompilowana DLLka musi być w folderze Tibii gdzie jest Tibia.exe lub gdzieś w katalogu systemowym (system32), żeby proces tibii mógł ją odnaleźć

#include <windows.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")

HANDLE hFile;

int __stdcall MyRecv(SOCKET s, char* buf, int len, int flags)
{
    int bytes = recv(s, buf, len, flags);

    if (bytes > 0)
    {
       // beziak111: 
       // tutaj sie robisz co chcesz z danymi zawartymi juz w char*buf
       // pamietaj aby nie zmienic zawartosci *buf poniewaz odsylane sa do klienta po wyjsciu z tej funkcji
       // najlepiej skopiuj tutaj to do lokalnego bufora
       
       // crayze:
       // a niech se ruch odbierający leci do pliku :P a co
       DWORD written;
       WriteFile(hFile,buf,bytes,&written,NULL);
    }

    return bytes;
}

void Initialize() //załadowanie bibilioteki do procesu
{
  //kod by beziak111
  DWORD dwOldProtect, dwNewProtect, funcAddress, origAddress;
  funcAddress = (DWORD)&MyRecv; //adres do twojej funkcji
  origAddress = (DWORD)((int*)0x5B05DC); //recv pointer - adres z tibiaapi (8.5)
  VirtualProtect((LPVOID)origAddress, 4, PAGE_READWRITE, &dwOldProtect);
  memcpy((LPVOID)origAddress, &funcAddress, 4);
  VirtualProtect((LPVOID)origAddress, 4, dwOldProtect, &dwNewProtect);
  
  //plik
  hFile = CreateFile("C:\\tibia recv.bin",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
}

void Uninitialize() //zwalnianie biblioteki z procesu
{
  CloseHandle(hFile);
}

BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	 Initialize();
	 break;
	case DLL_PROCESS_DETACH:
	 Uninitialize();
	 break;
	}
	return TRUE;
}

Hook działa, sprawdzałem. Dalej rozwijaj sobie tę DLLkę, pamiętaj, że ten w tej DLLce będzie wykonywany kod w ramach procesu Tibii, masz do niej full access

PS. odnośnie tego co mówiłeś wcześniej, że nie wiem do czego służy recv, otóż ja założę się, że używałem recva, kiedy ty jeszcze nie słyszałeś o C++

//EDIT:
boty w gierkach flashowych są ok, bo takie gierki jak dla mnie to śmiech na sali, ale gardzę takimi cziterami i ludźmi którzy nieuczciwie oszukują w rywalizacji online, [CIACH!] ścierwo...

0

o jak swietnie
Log kompilacji:

Kompilator: Default compiler
Building Makefile: "C:\Dev-Cpp\XXX\Makefile.win"
Wykonywanie make...
make.exe -f "C:\Dev-Cpp\XXX\Makefile.win" all
dllwrap.exe --output-def libhook.def --driver-name c++ --implib libhook.a hook.o -L"C:/Dev-Cpp/lib" --no-export-all-symbols --add-stdcall-alias ../lib/libpsapi.a[gwarantuje, ze sciezka jest dobra] -g3 -o hook.dll

hook.o(.text+0x22): In function Z6MyRecvjPcii':</b> <b>C:/Dev-Cpp/XXX/hook.cpp:9: undefined reference to recv@16'
collect2: ld returned 1 exit status

dllwrap.exe: no export definition file provided.
Creating one, but that may not be what you want
dllwrap.exe: c++ exited with status 1

make.exe: *** [hook.dll] Error 1

Wykonanie zakończone

tutaj wszystko to, co mam do kompilowania, http://files.getdropbox.com/u/69903/Hook2.rar
wraz z

Linker=--no-export-all-symbols --add-stdcall-alias_@@../lib/libpsapi.a@@_
w hook.dev

siedze nad tym i no nie moge tego ogarnac
dodaje ten libpsapi.a w ten sposob: projekt>opcje projektu(alt+p)>zakladka:parametry>konsolidator>dodaj pliki>znajduje lib/libpsapi.a

siedzialem nad tym dobre 2h i nonstop powtarzalem te same czynnosci, a wyniku nie bylo,
nie chcialem pisac juz o tym samym na forum tutaj, zeby sie nie kompromitowac w twoich oczach, ale jednak nie dalem rady ogarnac tego bledu

ps przed twoja odpowiedzia napisalem, ze uzywam dev-cpp, a w poscie wyzej napisales, zebym lepiej przestal uzywac tego smiecia
co prawda jest tutaj odpluskiwacz, probowalem go nawet uzywac, ale nie znalazlem w nic interesujacego, co moglo pomoc mi w rozwiazaniu problemu
jesli moge zapytac, to jakiego uzywasz srodowiska do pracy w c/cpp?

ps to zdanie mowiace o tym, ze dll jest wykonywany wewnatrz procesu klienta wytlumaczyl mi najlepiej jak mozna to, co robi dll injection, teraz juz rozumiem, ze to co robi dll injection,
to taki alias do starej zawartosci polecenia z gratisem (tym, co chcemy uzyskac, w moim wypadku - char * buf), dlatego to nadpisanie w pamieci clienta jest

ps2 nie chcialbym zebys pomyslal, ze lape cie za slowka, ale napisalem, ze ~/gdybys sie zastanowil bardziej, to zauwazylbys, ze recvem nie zrobie nic/ (nie bez powodu wlasnie tak, wiedzialem, ze jesli wypowiadasz sie w taki zdecydowany sposob, to cos tam wiesz na pewno.

ps3 nie wiem ile siedzisz w tym, ale jesli nie zabawialbym sie smiesznym api bota do tibii przez iles lat (chyba az 5) to teraz poczatki mialbym za soba i nie musialbym, w pewnym stopniu, zerowac na was

ps widzialem twoja strona http://www.winapi.rox.pl/ swietna jest, nie wiem, czy jeszcze ja rozwijasz, ale proponuje, zebys dodal system komentarzy, przeciez to nie duzo roboty, a moznaby sie juz pytac o dane zagadnienie w komentarzach,
np. moglbys jeszcze dodac co zrobic, zeby ctrl+a zaznaczalo caly text w kontrolce edit,
sorry za ten offtop

0

C:/Dev-Cpp/XXX/hook.cpp:9: undefined reference to recv@16'`

czyżbyś nie zauważyłeś tego? w soursie dllki

#pragma comment(lib,"ws2_32.lib")

co prawda tego już nie komentowałem, bo co to jest pragma comment, opisałem ci te wcześniejszym soursie
w dev cpp plik ten będzie miał nazwę: libws2_32.a

jakie IDE?
ja używam Visuala 2008 Express, ludzie też chwalą sobie Code::Blocks'a

strony nie rozwijam już ładnych parę lat jak widzisz i nie będę masz moje słowo, jest nowa: http://fc-site.bee.pl/ ale jeszcze nic na niej nie ma i ma system komentarzy (jeszcze chyba nietestowany) :P

0
crayze napisał(a)

C:/Dev-Cpp/XXX/hook.cpp:9: undefined reference to recv@16'`

czyżbyś nie zauważyłeś tego? w soursie dllki

#pragma comment(lib,"ws2_32.lib")

co prawda tego już nie komentowałem, bo co to jest pragma comment, opisałem ci te wcześniejszym soursie
w dev cpp plik ten będzie miał nazwę: libws2_32.a
co do libpsapi.a
znalazlem libpsapi.a to sadzilem, ze bedzie dzialac,
blad mowil stanowczo, ze czegos brakuje

skompilowalo mi sie pieknie, ale sie sypie teraz po probie injectowania do clienta,
sypie sie w

HANDLE thread = CreateRemoteThread(hProc,NULL,0,(LPTHREAD_START_ROUTINE)LoadLibrary,memory,0,&ThreadID);

uzylem debugerra jedynego, jakiego mam
http://files.getdropbox.com/u/69903/ScreenShot2059.jpg</img>

jakie IDE?
ja używam Visuala 2008 Express, ludzie też chwalą sobie Code::Blocks'a

nie wiem dlaczego tak dlugo z tym pytaniem zwlekalem, ale czemu mowisz nie dla dev-cpp?

strony nie rozwijam już ładnych parę lat jak widzisz i nie będę masz moje słowo, jest nowa: http://fc-site.bee.pl/ ale jeszcze nic na niej nie ma i ma system komentarzy (jeszcze chyba nietestowany) :P

no ale pod wzgledem standardow to http://winapi.rox.pl jest lepsze, mam na mysli to, ze tam zrobil(es|iscie) menu bez js, a tutaj jest tylko w js, oczywiscie dla pctowca to nic strasznego, ale szkoda byloby, ze ktos potrzebowalby pomocy, a tu nie dziala;p i zastanawiam sie jeszcze jak tam z indexowaniem przez google, teraz robot sam gania po prostych jsach, ale sadze, ze powinniscie zrobic tez w czystym htmlu strone

mam jeszcze pytanie,
czy jest jakas prosta metoda, zeby pliki, ktore powstaja w wyniku kompilowania zajmowaly malo? o wiele mniej? tne, ktory ja mam ma 600KB, to taka waga, ktora jeszcze zycia nie odbiera, ale sadze, ze to dosc duzo
rozumiem, ze jedna z odpowiedzi to napisac to, co robi biblioteka samemu z okrojeniem do tego, co sie tylko potrzebuje, tak?

0
test30 napisał(a)

nie wiem dlaczego tak dlugo z tym pytaniem zwlekalem, ale czemu mowisz nie dla dev-cpp?

  1. Jego kompilator ma błąd związany z obliczaniem adresów zmiennych bodajże na stosie, przez co można potem na forum przylecieć z błędem, którego nie ma.
  2. Jego debuger wymaga debugowania.
  3. Formatowanie oparte o liczby losowe.
  4. Został dawno temu porzucony w fazie beta.
test30 napisał(a)

no ale pod wzgledem standardow to http://winapi.rox.pl jest lepsze
http://lublin.webd.pl/crayze/cpp-winapi/ - 53 błędy, 12 ostrzeżeń w walidatorze w3c, http://fc-site.bee.pl/ - poprawny HTML 4.01 Strict. Nie wiem, czy pod względem standardów stara strona crayzego jest lepsza :P. A z tym menu w JS faktycznie można by coś zrobić, tylko ono jest akurat zrobione przez crayzego, jego kod jest dziwny (jak kod całej strony i ogólnie twory crayzego :P) i nie chcę niczego namieszać ;).

0

sadze, ze w3c nie trzeba brac na maxa na serio, on bardzo ladnie nakierowywuje na to, co jest zle,

poza tym http://validator.w3.org/check?uri=http://lublin.webd.pl/crayze/cpp-winapi/
a najlepszym przykladem na to, ze w3c nie jest takie wazne jest http://validator.w3.org/check?uri=http://google.com
kto jak kto, ale google wie jak pozbyc sie bledow takich, poza tym to wlasnie google ma gmaila, ktory jest w wersji stricte-html&w-wersji-js,
mowiac zgodny ze standardami mialem na mysli to, ze kazda kotwic ma swojego hrefa, a w ~bee.pl juz onclicki sa.

tak czy siak, to takie pierdoly,
ja bardzo chcialbym, zeby mi crayze pomogl z tym bugiem, bo ja nie mam pojecia dlaczego ten createremotethread sie sypie, we wszystkich tutorialach jakie przegladlaem lpaddressstart bylo na NULL ustawione i zamiast &memory w przedostatnim argumencie - bylo tez NULL, ale on juz pisal to dziala, bo wkoncu sie przeciez kompiluje

0

u mnie działa, ładnie idzie recv do pliku

musisz sprawdzić co tam ci wadzi, czyli debugger debugger, którego w dev cpp nie masz :P

0

zainstalowalem sobei visual c++ 2008 express'a
http://files.getdropbox.com/u/69903/!!vcpp0.rar
zrobilem tak, zeby sie skompilowalo, ale koncem konca pojawia mi sie blad
http://files.getdropbox.com/u/69903/ScreenShot2060.jpg

dlaczego ja musialem zrobic

GetModuleBaseName(hProc,NULL,(LPWSTR)str,StrSize);

zeby m sie skompilowalo, a ty podales mi w source

GetModuleBaseName(hProc,NULL,str,StrSize);

i tobie sie kompilowalo?

tez rzutowanie musialem zrobic w

if(i == ProcessesCount) MessageBox(0,(LPCWSTR)"Nie znaleziono procesu "Tibia.exe"",0,0);

0
test30 napisał(a)

dlaczego ja musialem zrobic

GetModuleBaseName(hProc,NULL,(LPWSTR)str,StrSize);

zeby m sie skompilowalo, a ty podales mi w source

GetModuleBaseName(hProc,NULL,str,StrSize);

i tobie sie kompilowalo?

a kto cię nauczył że jak się nie zgadzają typy to się rzutuje? Jak coś się nie zgadza to znaczy, że rzeczywiście coś jest nie tak, a rzutować możesz tylko wtedy kiedy wiesz, że można, a nie tak bezmyślnie

w opcjach projektu "General" musisz przestawić zestaw znaków z "Unicode charset" na "Not Set" i żadnych kurewskich rzutowań...

jeśli myślisz, że sprowadzenie kodu do stanu kompilowania się to osiągnięcie celu, to musisz się jeszcze dużo nauczyć...

i google, nie możesz z każdą rzeczą lecieć na forum

0

poczatki zawsze sa trudne, dla niektorych mniej, dla niektorych bardziej

w opcjach projektu "General" musisz przestawić zestaw znaków z "Unicode charset" na "Not Set" i żadnych kurewskich rzutowań...

dzieki

a teraz to co zawsze, pytania ;ssssssssss

to moje aktualne zrodla http://files.getdropbox.com/u/69903/%21%21vcpp1.rar

dostaje jeszcze taki warning przy kompilowaniu dlla

warning C4747: Calling managed '_DllMain@12': Managed code may not be run under loader lock, including the DLL entrypoint and calls reached from the DLL entrypoint

3#post tutaj http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/47b4149c-bc44-4ad6-8f69-2d17a466cbbe mowi o tym, zeby

resolution for warning C4747 :

Search for initialization Code and follow the steps on each file executed during initialization of DLL:

  1.   Inserted #pragma unmanaged directive above each functionBody in the File
    
  2.   File properties Changed to No Common Language runtime support
    
  3.   Removed Precompiled Header --> Not Using Precompiled Headers
    

co do 1. to wszystko to co mi dales dziala u ciebie, czyli u mnie tez powinno
2. probowalem z common runtime i z no common
3. nie usuwalem nic/ani nie dodawalem w preprocesorze


do tego jeszcze zauwazylem, ze ten dll w ogole nie jest dodawany w modulach do procesu bot.exe
http://files.getdropbox.com/u/69903/ScreenShot2062.jpg
dodalem sobie tez messages w

#include <windows.h>
....
BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{
		 <b>MessageBoxA(NULL, "init()","",MB_OKCANCEL);</b>
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
		 <b>MessageBox(NULL, "init()","",MB_OKCANCEL);</b>
         Initialize();
         break;
        case DLL_PROCESS_DETACH:
         Uninitialize();
         break;
        }
        return TRUE;
}

ale nie wyswietlily mi sie one ani razu
czy one nie maja prawa sie wyswietlac i nie mam nawet tego co w ten sposob sprawdzac, czy w ogole ten dll nie jest injectowany?

jesli nie chce ci sie pisac, to chociaz wyslij mi tylko pliki z projektu dzialajace przed kompilowaniem

0

Uzupełnij kod 'injectora' o sprawdzanie pomyślnego wykonania wszystkich fun. API .

0
crayze;554022 napisał(a)

Hook działa, sprawdzałem. Dalej rozwijaj sobie tę DLLkę, pamiętaj, że ten w tej DLLce będzie wykonywany kod w ramach procesu Tibii, masz do niej full access

Mi sie skompilowalo to juz ladnie, nic w kodzie nie zmienialem, tylko w projekcie to, z unicode.
co ja mam jakis komputer gorszy, ze mi ma nie dzialac? ;(
dlaczego w ollydbg mi sie nie zmienia nic w tym adresie, ktory zmienia ta aplikacja?
(img)http://files.getdropbox.com/u/69903/ScreenShot2061.jpg

jeszcze moje zrodla aktualne dorzucam, ktore sie kompiluja bezblednie, ale nie dzialaja
http://files.getdropbox.com/u/69903/!!vcpp2.rar

ps jak moge sprawdzic, czy te funkcje z winapi cos robia w pamieci?
http://www.google.com/search?q=ollydbg+pamiec+virtualna+podglad
http://www.google.com/search?q=ollydbg+pamiec+wirtualna|virtualna+monitorowanie
http://www.google.com/search?q=ollydbg+virtual+memory+%2Bhow+see|view+changes

0
test30 napisał(a)

warning C4747: Calling managed '_DllMain@12': Managed code may not be run under loader lock, including the DLL entrypoint and calls reached from the DLL entrypoint

managed? wygląda na to, że utworzyłeś zły typ projektu, managed to aplikacja zarządzana (pod .NETa)

eh
robisz projekt typu Win32
http://img401.imageshack.us/img401/8380/tst1n.jpg
potem Next,
dla programu wybierasz 'Windows Application', a dla DLL'ki to wiadomo co :P
, w obydwu przypadkach zaznaczasz 'Empty Project', oraz dla DLLki 'Export symbols'
Finish i masz projekt, dodajesz pliki do projektu, przez 'Add existing item'
skumał? czy trzeba skriny jeszcze?

test30 napisał(a)

do tego jeszcze zauwazylem, ze ten dll w ogole nie jest dodawany w modulach do procesu bot.exe

widać, że nie zrozumiałeś na czym DLL injection polega, to nie aplikacja ma mieć DLLkę, tylko proces Tibia.exe ma ją ładować i nikt więcej, aplikacja nie ma nic wspólnego z DLLką poza tym, że musi wiedzieć jaką DLLkę(jej nazwę) kazać załadować Tibii

czy one nie maja prawa sie wyswietlac i nie mam nawet tego co w ten sposob sprawdzac, czy w ogole ten dll nie jest injectowany?

MessageBox to dobry spsoób

#include <windows.h>
....
BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{	 
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
         <b>MessageBox(NULL, "Proces załadował Deelelke","",MB_OKCANCEL);</b>
         Initialize();
         break;
        case DLL_PROCESS_DETACH:
         <b>MessageBoxA(NULL, "Proces upierdolił Deelke","",MB_OKCANCEL);</b>
         Uninitialize();
         break;
        }
        return TRUE;
}
0

dokladnie jak napisales robilem,
zreszta, nie wiem czy jesli zly projeklt bym tworzyl to by sie w ogole skompilowac chcialo

ale ani razy mu sie nie pojawil messagebox, ktory jest w skompilowanej dllce wywolywany

jesli mozesz, to prosze skompiluj u siebie moje source i prosze powiedz mi, czy dziala http://files.getdropbox.com/u/69903/!!vcpp3.rar

0

działa i twój projekt, przynajmniej komunikaty idą
krótka piłka: a umieściłeś dllhook.dll w folderze z tibia.exe?

1 użytkowników online, w tym zalogowanych: 0, gości: 1