Siga-nos em...
Follow us on Twitter Follow us on Facebook Watch us on YouTube
Registro

Alpha Servers
Resultados 1 a 2 de 2
  1. #1

    Avatar de Getulio
    Data de Ingresso
    Mar 2010
    Localização
    char
    Idade
    31
    Posts
    95
    Agradecido
    289
    Agradeceu
    92
    Peso da Avaliação
    0

    Padrão Proteção contra Nomes Imbloqueaveis (Personagem & Guild)

    Essa função não permite que personagem sejam criados com caractéres inapropriados, tornando-os impossíveis de banir por comandos e site, como também, não permite a criação de guilds com caractéres inapropriados, levando a queda do servidor.

    Segue abaixo:

    Create.h:
    Código:
    #pragma once
    
    namespace Network
    {
    	struct PMSG_CHARCREATE
    	{
    		PBMSG_HEAD h;
    		BYTE subcode;
    		char Name[10];
    		BYTE ClassSkin;
    	};
    
    	struct PMSG_GUILDINFOSAVE
    	{
    		PBMSG_HEAD h;
    		BYTE btGuildType;
    		char GuildName[8];
    		BYTE Mark[32];
    	};
    
    	class Create
    	{
    	public:
    		static bool checkString(std::string szString, std::string szPattern, bool szIgnoreSpace);
    		static void Character(PMSG_CHARCREATE* lpMsg, DWORD dwIndex);
    		static void Guild(DWORD dwIndex, PMSG_GUILDINFOSAVE* lpMsg);
    	};
    }
    Create.cpp:
    Código:
    #include "Create.h"
    
    namespace Network
    {
    	bool Create::checkString(std::string szString, std::string szPattern, bool szIgnoreSpace)
    	{
            	DWORD dwCount = 0;
            	std::string szReg = "", szCharacter = "";
            
            	if(szPattern[0] != '[' || szPattern[(szPattern.length() - 1)] != ']')
            	{
            	    return false;
            	}
    
    	        for(int i = 1; i < (int)szPattern.length(); i++)
    	        {
    	            if(szPattern[i] == ']')
    	            {
    	                if(!szReg.empty())
    	                {
    	                    szCharacter += szReg;
    	                }
    	
    	                break;
    	            }
    
    	            if(!szPattern.compare(i, 3, "A-Z"))
    	            {
    	                szCharacter += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    	                i += 2;
    	            }
    	            else if(!szPattern.compare(i, 3, "a-z"))
    	            {
    	                szCharacter += "abcdefghijklmnopqrstuvwxyz";
    	                i += 2;
    	            }
    	            else if(!szPattern.compare(i, 3, "0-9"))
    	            {
    	                szCharacter += "0123456789";
    	                i += 2;
    	            }
    	            else
    	            {
    	            	szReg += szPattern[i];
    	            }
    		}
    
        	    	for(int n = 0; n < (int)szString.length(); n++)
        	    	{
        	       		if(szString[n] == ' ' && szIgnoreSpace)
        	        	{
    				dwCount++;
        	            		continue;
        	        	}
    
                		for(int y = 0; y < (int)szCharacter.length(); y++)
    	        	{
                    		if(szString[n] == szCharacter[y])
                    		{
                    			dwCount++;
                        			break;
                    		}
                		}
            	}
    
            	if(dwCount == (DWORD)szString.length())
            	{
                		return true;
            	}
    
            	return false;
        	}
    
    	void Create::Character(PMSG_CHARCREATE* lpMsg, DWORD dwIndex)
    	{
    		if(checkString(lpMsg->Name, "[A-Za-z0-9_-]", false))
    		{
    			ServerCharacterFailSend(dwIndex, lpMsg->Name);
    			return;
    		}
    
    		ServerCreateCharacter(lpMsg, dwIndex);
    	}
    
    	void Create::Guild(DWORD dwIndex, PMSG_GUILDINFOSAVE* lpMsg)
    	{
    		if(checkString(lpMsg->GuildName, "[A-Za-z0-9_-]", false))
    		{
    			return;
    		}
    		
    		ServerCreateGuild(dwIndex, lpMsg);
    	}
    }
    Hook:
    Código:
    Hook((DWORD)&Network::Create::Character, 0x401B8B);
    Hook((DWORD)&Network::Create::Guild, 0x4017DF);
    Defines:
    Código:
    #define ServerCreateCharacter	((void(*)(Network::PMSG_CHARCREATE*, DWORD)) 0x417420)
    #define ServerCharacterFailSend	((void(*)(DWORD, char*)) 0x410A50)
    #define ServerCreateGuild		((void(*)(DWORD, Network::PMSG_GUILDINFOSAVE*)) 0x4211B0)
    Lembrando, 97d.


    Créditos:
    Network.

  2. O Seguinte Usuário Agradeceu Getulio Por este Post Útil:


  3. #2

    Avatar de Niickziinhooo
    Data de Ingresso
    Dec 2011
    Localização
    São Paulo - Baixada Santista - Praia Grande
    Idade
    28
    Posts
    24
    Agradecido
    5
    Agradeceu
    1
    Peso da Avaliação
    0

    Padrão

    Mt Bom SHow Vou Testar dps mando Edit se funfa.

 

 

Informações de Tópico

Usuários Navegando neste Tópico

Há 1 usuários navegando neste tópico. (0 registrados e 1 visitantes)

Tópicos Similares

  1. |Dúvida| Proteção contra ataque a site.
    Por rodrigopf no fórum Dúvidas|Pedidos
    Respostas: 3
    Último Post: 14-10-2015, 06:32 PM
  2. |Source| Proteção contra debuggers e Ant Inject
    Por Sain no fórum Delphi
    Respostas: 3
    Último Post: 11-04-2014, 09:42 PM
  3. |Source| Proteção contra Disconnect Hack & Ataques (Flood) no GS
    Por Getulio no fórum Sources
    Respostas: 13
    Último Post: 21-08-2012, 07:02 PM
  4. |Source| Proteção contra Skill Bug
    Por Getulio no fórum Sources
    Respostas: 0
    Último Post: 02-04-2012, 01:39 AM
  5. |Source| Proteção contra Trade Hack
    Por Getulio no fórum Sources
    Respostas: 0
    Último Post: 01-04-2012, 04:17 AM

Marcadores

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •