Protección contra el Trade Hack

Ver el tema anterior Ver el tema siguiente Ir abajo

Protección contra el Trade Hack

Mensaje por browser el Dom Jun 03, 2012 9:07 pm

Esta es una posible solución (protección) contra el Trade Hack.
Salida en lugar de bloquear los paquetes utilizados por muchos WPE Pro, comprueba si el usuario ya está abierto al comercio (en caso de una nueva solicitud de un oficio se solicita) y evita que el proceso de GameServer esta acción, lo que impide el corte del Comercio.
Obviamente, hay otras maneras, pero esto es una sencilla y muy útil.
El código de abajo, se hizo para servidores: 0.96.40, o como muchos llaman: 97D, pero es compatible con otras versiones, sin embargo, el código debe ser ajustado de acuerdo a la versión del servidor (Tomando los valores de estructuras PMSG_TRADE_REQUEST, PMSG_TRADE_RESPONSE si los valores son diferentes funciones y la solicitud del comercio reanalizar y la respuesta, para asegurarse de que no tiene argumentos nuevos [si usted tiene, hay que añadirlas en el papel], y las compensaciones por el gancho).

Texto original:
Spoiler:
Está é uma possível solução (proteção), contra Trade Hack.
Ao invez de bloquear diversos packets usados pelo WPE Pro, ele verifica se o usuário já está com o trade aberto (caso um novo pedido de trade seja solicitado) e impede que o GameServer processe essa ação, assim, impedindo o Trade Hack.
Óbviamente, existe outros modos, mas esse é um método simples e muito útil.
O código abaixo, foi feito para servidores: 0.96.40, ou como muitos chamam: 97d, mas, o mesmo é compatível com outras versões, porém, o código terá de ser reajustado de acordo com a versão do servidor (Pegar os valores das structs PMSG_TRADE_REQUEST, PMSG_TRADE_RESPONSE caso os valores sejam diferentes e reanalizar as funções solicitação de trade e resposta, para ter certeza que não possui novos argumentos [se possuir, basta adiciona-los na função], e os devidos offsets para hook).

Protección:
Trade.h:
Spoiler:
#pragma once
#include <Windows.h>
#include <stdio.h>
namespace Network
{
struct PMSG_TRADE_REQUEST
{
PBMSG_HEAD h;
unsigned char NumberH;
unsigned char NumberL;
};

struct PMSG_TRADE_RESPONSE
{
PBMSG_HEAD h;
unsigned char Response;
unsigned char Id[10];
unsigned short Level;
int GuildNumber;
};

class Trade
{
public:
static void Request(PMSG_TRADE_REQUEST* lpMsg, DWORD dwIndex);
static void Response(PMSG_TRADE_RESPONSE* lpMsg, DWORD dwIndex);
};
}

Trade.cpp:
Spoiler:
#include "Trade.h"

namespace Network
{
void Trade::Request(PMSG_TRADE_REQUEST* lpMsg, DWORD dwIndex)
{
WORD szTarget = (WORD)Object[dwIndex].TargetNumber;

if(Object[dwIndex].m_IfState.use == 1 && Object[dwIndex].m_IfState.type == 1 && Object[dwIndex].pTransaction == 1)
{
if(Object[szTarget].Type == 1)
{
return;
}
}

ServerRequestTrade(lpMsg, dwIndex);
}

void Trade::Response(PMSG_TRADE_RESPONSE* lpMsg, DWORD dwIndex)
{
WORD szTarget = (WORD)Object[dwIndex].TargetNumber;

if(Object[dwIndex].m_IfState.use == 1 && Object[dwIndex].m_IfState.type == 1 && Object[dwIndex].pTransaction == 1)
{
if(Object[szTarget].Type == 1)
{
return;
}
}

ServerResponseTrade(lpMsg, dwIndex);
}
}

Hook:
Spoiler:
Hook((DWORD)&Network::Trade::Request, 0x402216);
Hook((DWORD)&Network::Trade::Response, 0x4018E3);

Defines:
Spoiler:
#define ServerRequestTrade ((void(*)(Network::PMSG_TRADE_REQUEST*, DWORD)) 0x41D3B0)
#define ServerResponseTrade ((void(*)(Network::PMSG_TRADE_RESPONSE*, DWORD)) 0x41D990)

Credits:

______________________________________________________________________________________________________________________________
:suspect:
No soy el mejor de todos pero algo soy :L
:suspect:

browser




Tread Creados 28

Corazones bardos 82
Fama 16
Fecha de inscripción : 03/06/2012

Ver perfil de usuario

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.