Hello guys :D i'd like to send a packet with function Assembly's call(C++),but i don't know the function of Assembly... How to send a packet with Call in C++ ? Can you teach me this? Sorry for my bad english D:
Thank you :D
Thank you :D
#include <windows.h>
#include <stdio.h>
bool bDataCompare(const unsigned char *pData, const unsigned char *bMask, const char *szMask)
{
for(; *szMask; ++szMask, ++pData, ++bMask)
if(*szMask == 'x' && *pData != *bMask )
return false;
return (*szMask) == 0;
}
DWORD dwFindPattern(BYTE *bMask, char *szMask)
{
DWORD dw_Address = 0x00400000;
DWORD dw_Len = 0x00436000;
for(DWORD i = 0; i < dw_Len; i++)
if(bDataCompare((unsigned char*) (dw_Address + i), bMask, szMask) )
return (DWORD) (dw_Address + i);
return 0;
}
DWORD WINAPI tThread(LPVOID param)
{
AllocConsole();
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
/* Send */
BYTE s_bPatter[] = {0x53,0x56,0x8B,0xF2,0x8B,0xD8,0xEB,0x04};
char *s_cPatter = "xxxxxxxx";
DWORD dSend = dwFindPattern(s_bPatter,s_cPatter);
/* Recv */
BYTE r_bPatter[] = {0x55,0x8B,0xEC,0x83,0xC4,0xF4,0x53,0x56,0x57,0x33 ,0xC9,0x89,0x4D,0xF4,0x89,0x55,0xFC,0x8B,0xD8,0x8B ,0x45,0xFC};
char *r_cPatter = "xxxxxxxxxxxxxxxxxxxxxx";
DWORD dRecv = dwFindPattern(r_bPatter,r_cPatter);
//Write dRecv and dSend for get the address
return 0x0;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateThread(nullptr, 0, tThread, nullptr, 0, nullptr);
DisableThreadLibraryCalls(hModule);
break;
}
return TRUE;
}
Him don't know C++, it's useless.. :)Quote:
You may try with calloc if malloc are failing, anyway just with this code you should be okay.
Code:#include <windows.h> #include <stdio.h> bool bDataCompare(const unsigned char *pData, const unsigned char *bMask, const char *szMask) { for(; *szMask; ++szMask, ++pData, ++bMask) if(*szMask == 'x' && *pData != *bMask ) return false; return (*szMask) == 0; } DWORD dwFindPattern(BYTE *bMask, char *szMask) { DWORD dw_Address = 0x00400000; DWORD dw_Len = 0x00436000; for(DWORD i = 0; i < dw_Len; i++) if(bDataCompare((unsigned char*) (dw_Address + i), bMask, szMask) ) return (DWORD) (dw_Address + i); return 0; } DWORD WINAPI tThread(LPVOID param) { AllocConsole(); freopen("CONIN$", "r", stdin); freopen("CONOUT$", "w", stdout); freopen("CONOUT$", "w", stderr); /* Send */ BYTE s_bPatter[] = {0x53,0x56,0x8B,0xF2,0x8B,0xD8,0xEB,0x04}; char *s_cPatter = "xxxxxxxx"; DWORD dSend = dwFindPattern(s_bPatter,s_cPatter); /* Recv */ BYTE r_bPatter[] = {0x55,0x8B,0xEC,0x83,0xC4,0xF4,0x53,0x56,0x57,0x33 ,0xC9,0x89,0x4D,0xF4,0x89,0x55,0xFC,0x8B,0xD8,0x8B ,0x45,0xFC}; char *r_cPatter = "xxxxxxxxxxxxxxxxxxxxxx"; DWORD dRecv = dwFindPattern(r_bPatter,r_cPatter); //Write dRecv and dSend for get the address return 0x0; } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: CreateThread(nullptr, 0, tThread, nullptr, 0, nullptr); DisableThreadLibraryCalls(hModule); break; } return TRUE; }
Im "goodbye !"Quote:
Nice Code :)
#include <Windows.h>
#include <stdio.h>
#include <string>
bool bDataCompare(const unsigned char *pData, const unsigned char *bMask, const char *szMask)
{
for(; *szMask; ++szMask, ++pData, ++bMask)
if(*szMask == 'x' && *pData != *bMask )
return false;
return (*szMask) == 0;
}
DWORD dwFindPattern(BYTE *bMask, char *szMask)
{
DWORD dw_Address = 0x00400000;
DWORD dw_Len = 0x00436000;
for(DWORD i = 0; i < dw_Len; i++)
if(bDataCompare((unsigned char*) (dw_Address + i), bMask, szMask) )
return (DWORD) (dw_Address + i);
return 0;
}
class __string
{
private:
std::size_t length;
char packet[256];
public:
__string(char *_Packet)
{
length = strlen(_Packet);
memcpy(packet, _Packet, length);
packet[length] = 0;
}
char *p_char()
{
return packet;
}
unsigned long size()
{
return length;
}
};
void SEND(unsigned long ADDR,char *packet)
{
ADDR = 0x0051ED8C;
__asm
{
MOV EAX, DWORD PTR DS:[0x66C0AC]
MOV EAX, DWORD PTR DS:[EAX]
MOV EAX, DWORD PTR DS:[EAX]
MOV EDX, packet
CALL ADDR
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
BYTE s_bPatter[] = {0x53,0x56,0x8B,0xF2,0x8B,0xD8,0xEB,0x04};
char *s_cPatter = "xxxxxxxx";
DWORD dSend = dwFindPattern(s_bPatter,s_cPatter);
__string s_Packet = "packet";
SEND(dSend, s_Packet.p_char());
}
¿Why everyone here need's study? lolQuote:
It still crash because you don't know how it work.. Useless that you continue to leech, you can't continue without study..
Italian version ( him is )
Ti crasha perché ti limiti a lavorare su un qualcosa di cui non conosci un emerita ceppa, smettila di copiare il codice altrui, non puoi pensare di continuare senza metterti sotto con lo studio..
I think it crash for a memory problem.. Him need to reverse with a debugger, look what make the crash and solve it but if you continue to give him the solution him will not study..Quote:
¿Why everyone here need's study? lol
I think it get "freeze" cause you're hooking the function ingame, but you created the func in the DLL, you should try in p.server and logging every packet
void SendPacket(char *packet)
{
DWORD addrPtr = 0x66C0AC; // <--
DWORD addrCall = 0x0051ED8C;
__asm
{
MOV EAX, DWORD PTR DS:[addrPtr] // <--
MOV EAX, DWORD PTR DS:[EAX]
MOV EAX, DWORD PTR DS:[EAX]
MOV EDX, packet
CALL addrCall
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateThread(nullptr, 0, tThread, nullptr, 0, nullptr);
DisableThreadLibraryCalls(hModule); // <-- Without this i got some crashes, maybe it will help u too.
break;
}
return TRUE;
}
#include <iostream>
#include <Windows.h>
class __string
{
private:
std::size_t length;
char packet[256];
public:
__string(char *_Packet)
{
length = strlen(_Packet);
memcpy(packet, _Packet, length);
packet[length] = 0;
}
char *p_char()
{
return packet;
}
unsigned long size()
{
return length;
}
};
bool bDataCompare(const unsigned char *pData, const unsigned char *bMask, const char *szMask)
{
for (; *szMask; ++szMask, ++pData, ++bMask)
{
if (*szMask == 'x' && *pData != *bMask)
{
return false;
}
}
return (*szMask) == 0;
}
unsigned long FindPattern(unsigned char *bMask, char *szMask)
{
unsigned long address = 0x00400000;
unsigned long length = 0x00436000;
for (unsigned long i = 0; i < length; i++)
{
if (bDataCompare((unsigned char*)(address + i), bMask, szMask))
{
return (unsigned long)(address + i);
}
}
return 0;
}
void Send(unsigned long s_Send, char *s_Packet)
{
__asm
{
mov eax, dword ptr ds : [0x0066C0AC]
mov eax, dword ptr ds : [eax]
mov eax, dword ptr ds : [eax]
mov edx, s_Packet
call s_Send
}
}
unsigned long __stdcall Main(void *arg)
{
unsigned char s_bPattern[] = { '\x53', '\x56', '\x8B', '\xF2', '\x8B', '\xD8', '\xEB', '\x04' };
char s_cPattern = "xxxxxxxx";
unsigned long s_Call = FindPattern(s_bPattern, s_cPattern);
__string s_Packet = "c_skill"; // change with packet to send
Send(s_Call, s_Packet.p_char());
return 0;
}
unsigned long __stdcall DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
CreateThread(nullptr, 0, Main, nullptr, 0, nullptr);
DisableThreadLibraryCalls(hModule);
break;
}
return 1;
}