[Tutorial] Protegendo seu GameMode (.amx)
#1

Protegendo seu GameMode (.amx)
__________________


Um dos grandes medos de um programador, й ver seus trabalhos nas mгos de outras pessoas sem seu consentimento.
O arquivo .pwn й o tesouro de qualquer programador pawn, e concerteza o mais protegido.
Porйm, muitas vezes deixa-se de lado a proteзгo do .amx, o que nгo deveria ocorrer.

Nгo sei vocкs, mas eu nгo gostaria de ver um servidor usando meu GameMode sem a minha devida permissгo.
Muitos deixam 'comando secretos' em seus GM's para recuperar a rcon, porйm isso nгo й um mйtodo tгo eficaz quanto o que eu trago hoje, porque ele depende diretamente da paciкncia de procurar todos os servidores que usam o GM roubado, e depois entrar em cada um deles para usar o tal comando secreto.

Separei 4 mйtodos de proteзгo. Sгo eles :

* Por Data
* Por Porta
* Por IP
* Por Senha

Antes de comeзar, uma explicaзгo breve sobre duas funзхes que iremos utilizar :

- GetServerVarAsString - Obtйm um parвmetro (string) do server.cfg.
- GetServerVarAsInt - Obtйm um parвmetro (inteiro) do server.cfg.

Proteзгo por data

Mйtodo onde damos ao GameMode prazo de vбlidade. Depois desse prazo, ele nгo serб inicializado.
pawn Код:
//Topo
//Com isso o GM funcionarб atй abril. A partir de maio ele nгo abre mais.
#define MES_LIMITE 4

public OnGameModeInit()
{
    new Data[3];
    getdate(Data[0], Data[1], Data[2]); // Ano, mes, dia
    if(Data[1] > MES_LIMITE) // Se o mкs atual й maior que o permitido, o servidor fecharб.
    {
        printf("Proteзгo por Data ativada.");
        printf("Vocк nгo tem permissгo para usar este GameMode.");
        SendRconCommand("exit");
        return true;
    }
    //
    return true;
}

Proteзгo por porta

Mйtodo onde verificamos se a porta do servidor й a mesma da porta permitida no GameMode.
pawn Код:
//Topo
#define PORTA_PERMITIDA 7777

public OnGameModeInit()
{
    new SERVER_PORT = GetServerVarAsInt("port"); //Obtйm do server.cfg a porta em que o servidor serб aberto.
    if(SERVER_PORT != PORTA_PERMITIDA) // Se a porta obtida for diferente da permitida no GameMode, o servidor fecharб.
    {
        printf("Proteзгo por Porta ativada.");
        printf("Vocк nгo tem permissгo para usar este GameMode.");
        SendRconCommand("exit");
        return true;
    }
    //
    return true;
}
Proteзгo por IP

Mйtodo onde verificamos se o IP do servidor й o mesmo do permitido no GameMode.
Й necessбrio que se acrescente isso no seu server.cfg :
pawn Код:
bind 127.0.0.1
Nesse caso, o servidor sу poderб ser caseiro. Troque pelo IP do seu host.

pawn Код:
//Topo
#define IP_PERMITIDO "127.0.0.1"

public OnGameModeInit()
{
    new SERVER_IP[16];
    GetServerVarAsString("bind", SERVER_IP, sizeof SERVER_IP); // Armazena o conteъdo de 'bind' em SERVER_IP
    if(strcmp(SERVER_IP,IP_PERMITIDO) || !strlen(SERVER_IP)) // Verifica se o IP contido em 'bind' й o mesmo que o permitido no GameMode e tambйm se 'bind' existe no server.cfg
    {
        printf("Proteзгo por IP ativada.");
        printf("Vocк nгo tem permissгo para usar este GameMode.");
        SendRconCommand("exit");
        return true;
    }
    //
    return true;
}
Proteзгo por Rcon

Mйtodo onde verificamos se a rcon do servidor й a mesma da permitida no GameMode.
pawn Код:
//Topo
#define RCON_PERMITIDA "ViniBorn"

public OnGameModeInit()
{
    GetServerVarAsString("rcon_password", SERVER_RCON, sizeof SERVER_RCON); // Armazena a rcon obtida do server.cfg em SERVER_RCON
    if(strcmp(SERVER_RCON,RCON_PERMITIDA)) // Verifica se a Rcon contido no server.cfg й a mesma que a permitida no GameMode
    {
        printf("Proteзгo por Rcon ativada.");
        printf("Vocк nгo tem permissгo para usar este GameMode.");
        SendRconCommand("exit");
        return true;
    }
    //
    return true;
}
Tambйm й bom utilizar o famoso AntiDeAMX, que evita que o seu GM seja 'descompilado'
pawn Код:
AntiDeAMX()
{
    new a[][] = { "Unarmed (Fist)", "Brass K" };
    #pragma unused a
}

//OnGameModeInit
AntiDeAMX();

Estas informaзхes sгo muito ъteis a todos, e principalmente para aqueles que nгo confiam muito no host onde irгo hospedar seus servidores.

Nгo sou muito bom com tutoriais, mas espero que tenham entendido.
Qualquer dъvida й sу perguntar.


Outros mйtodos. Por : [Full]Garfield[XDB]
Reply
#2

Bom, existem vбrios outros mйtodos, mais esses que foi postado
sгo do nнvel de seguranзa mйdio =)

Abraзos,
Reply
#3

Caramba, Novidade pra mim kkk Bom Tut
Reply
#4

Quote:
Originally Posted by [Full]Garfield[XDB]
Посмотреть сообщение
Bom, existem vбrios outros mйtodos, mais esses que foi postado
sгo do nнvel de seguranзa mйdio =)

Abraзos,
Poderia dar exemplo de um de seguranзa maxima ? to com um rpg do 0 ta com + de 8k de linha e nao to com vontade de perdeno ao passar pro host!
Reply
#5

Quote:
Originally Posted by [BND]Rodrigues
Посмотреть сообщение
Caramba, Novidade pra mim kkk Bom Tut
І kkk
Reply
#6

Quote:
Originally Posted by [Full]Garfield[XDB]
Посмотреть сообщение
Bom, existem vбrios outros mйtodos, mais esses que foi postado
sгo do nнvel de seguranзa mйdio =)

Abraзos,
Garfield, acho que sу utilizando a funзгo de validade ( jб utilizo fбs anos ) й impossнvel roubar/utilizar o game mode, ainda mais com um anti-descompilador ( vamos chamar ) jб й impossнvel

outra maneira й atravйs de uma pasta na Scriptfiles, sem ela o game mode nгo funciona, й como utilizar um sistema de salvamento sem A pasta localizada, adicionando umas funзхes... й quase a proteзгo do BPG. ( estou apenas falando outra maneira que segundos utilizam )

уtimo tutorial, parabйns.
Reply
#7

Quote:
Originally Posted by StrondA_
Посмотреть сообщение
Garfield, acho que sу utilizando a funзгo de validade ( jб utilizo fбs anos ) й impossнvel roubar/utilizar o game mode, ainda mais com um anti-descompilador ( vamos chamar ) jб й impossнvel

outra maneira й atravйs de uma pasta na Scriptfiles, sem ela o game mode nгo funciona, й como utilizar um sistema de salvamento sem A pasta localizada, adicionando umas funзхes... й quase a proteзгo do BPG. ( estou apenas falando outra maneira que segundos utilizam )

уtimo tutorial, parabйns.
Podemos fazer muitos sistemas de "Seguranзa",
alguns bбsicos sгo comparando datas, horas (quando usado em um VPS com a data errada ano pode ser burlбvel).
agora, quando criamos arquivos com nomes codificados pode se sair melhor.

Oque o ViniBorn postou, sгo sistemas simples mais seguros que vocк nгo precisa ter muito esforзo para
injetar seguranзa em seu servidor, mais jб se vocк quer investir nisto, vocк pode seguir os exemplos
abaixo, como a maioria eu utilizado, e alguns jб vi.


  • Alguns tipos sгo:
  • - Verificaзгo se arquivo especial existe ou nгo.
    pawn Код:
    // OnGameModeInit()
    if(!fexist(#unloadsever.dl)) SendRconCommand(#exit);
    No cуdigo acima, verificamos se o arquivo existe ou nгo, caso nгo existir,
    ele desliga o servidor (nгo muito avanзado).


  • - Comparaзгo de Callback's.
    Neste estilo, podemos verificar se tal callback existe.

    pawn Код:
    // OnGameModeInit()
    if(Funcidx("@MinhaCallBack_"))  SendRconCommand(#exit);
    WARNING: Nгo crie a callback "@MinhaCallBack_" no gamemode,
    para o sistema funcionar, crie um FilterScript e crie a callback.


    pawn Код:
    forward @MinhaCallBack_();
    public @MinhaCallBack_()
    {
        static Dia, Mes, Ano;
        getdate(Ano, Mes, Dia);
        if(Ano == 2012
        && Mes 4)
        {
            print("GameMode Desbloqueado");
        }
        else
        {
            SendRconCommand("exit");
        }
    }

  • - Outro mйtodo podemos utilizar й usando a funзгo HTTP(requisitaзгo de pбgina)
    Este mйtodo nгo й muito conhecido, mais para min, o mais seguro,
    Vocк utilizando a funзгo HTTP vocк verifica
    se um arquivo existe, depreferкncia hospede em uma hospedagem diferente, e nгo pegue
    uma hospedagem grбtis(porque normalmente ela falha).

    pawn Код:
    // OnGameModeINit
    HTTP(0, HTTP_GET, "MinhaHospedagem.com/meuarquivo.txt", "", "VerifySecure");

    // Final do GameMode
    forward VerifySecure(index, response_code, data[]);public VerifySecure(index, response_code, data[])
    {
        if(response_code == 200){
            // Caso existir o arquivo
            return true;
        }
        else{
            // Caso nгo existir o arquivo
            SendRconCommand(#exit);
            return false;
        }
        return false;
    }
    Bom quando o cуdigo acima funciona da seguinte maneira, ele faz uma requisitaзгo se o arquivo
    existe ou nгo, caso ele existir returna a true(verdadeiro), caso ao contrбrio ele desliga o servidor.
Bom, a lista й infinita desses sistemas,
mais o que eu uso em meu gamemode sгo estes( os trкs).

porque quem rouba o gamemode, lуgicamente poderб modificar a RCON ou PORTA e isto й facilmente
modificбvel, entгo indico utilizar o mйtodo de requisiзгo de pбgina, por ser o mais seguro.

Bom, postei os quais eu uso e me lembro, caso vocк for criar o seu mйtodo,
procure usar te diferentes classes e idйias, use mais de 1 e nгo coloque nomes уbvios que indicarгo o
burlamento do sistema.

Abraзos,
Reply
#8

Quote:
Originally Posted by [Full]Garfield[XDB]
Посмотреть сообщение
Podemos fazer muitos sistemas de "Seguranзa",
alguns bбsicos sгo comparando datas, horas (quando usado em um VPS com a data errada ano pode ser burlбvel).
agora, quando criamos arquivos com nomes codificados pode se sair melhor.

Oque o ViniBorn postou, sгo sistemas simples mais seguros que vocк nгo precisa ter muito esforзo para
injetar seguranзa em seu servidor, mais jб se vocк quer investir nisto, vocк pode seguir os exemplos
abaixo, como a maioria eu utilizado, e alguns jб vi.


  • Alguns tipos sгo:
  • - Verificaзгo se arquivo especial existe ou nгo.
    pawn Код:
    // OnGameModeInit()
    if(!fexist(#unloadsever.dl)) SendRconCommand(#exit);
    No cуdigo acima, verificamos se o arquivo existe ou nгo, caso nгo existir,
    ele desliga o servidor (nгo muito avanзado).


  • - Comparaзгo de Callback's.
    Neste estilo, podemos verificar se tal callback existe.

    pawn Код:
    // OnGameModeInit()
    if(Funcidx("@MinhaCallBack_"))  SendRconCommand(#exit);
    WARNING: Nгo crie a callback "@MinhaCallBack_" no gamemode,
    para o sistema funcionar, crie um FilterScript e crie a callback.


    pawn Код:
    forward @MinhaCallBack_();
    public @MinhaCallBack_()
    {
        static Dia, Mes, Ano;
        getdate(Ano, Mes, Dia);
        if(Ano == 2012
        && Mes 4)
        {
            print("GameMode Desbloqueado");
        }
        else
        {
            SendRconCommand("exit");
        }
    }

  • - Outro mйtodo podemos utilizar й usando a funзгo HTTP(requisitaзгo de pбgina)
    Este mйtodo nгo й muito conhecido, mais para min, o mais seguro,
    Vocк utilizando a funзгo HTTP vocк verifica
    se um arquivo existe, depreferкncia hospede em uma hospedagem diferente, e nгo pegue
    uma hospedagem grбtis(porque normalmente ela falha).

    pawn Код:
    // OnGameModeINit
    HTTP(0, HTTP_GET, "MinhaHospedagem.com/meuarquivo.txt", "", "VerifySecure");

    // Final do GameMode
    forward VerifySecure(index, response_code, data[]);public VerifySecure(index, response_code, data[])
    {
        if(response_code == 200){
            // Caso existir o arquivo
            return true;
        }
        else{
            // Caso nгo existir o arquivo
            SendRconCommand(#exit);
            return false;
        }
        return false;
    }
    Bom quando o cуdigo acima funciona da seguinte maneira, ele faz uma requisitaзгo se o arquivo
    existe ou nгo, caso ele existir returna a true(verdadeiro), caso ao contrбrio ele desliga o servidor.
Bom, a lista й infinita desses sistemas,
mais o que eu uso em meu gamemode sгo estes( os trкs).

porque quem rouba o gamemode, lуgicamente poderб modificar a RCON ou PORTA e isto й facilmente
modificбvel, entгo indico utilizar o mйtodo de requisiзгo de pбgina, por ser o mais seguro.

Bom, postei os quais eu uso e me lembro, caso vocк for criar o seu mйtodo,
procure usar te diferentes classes e idйias, use mais de 1 e nгo coloque nomes уbvios que indicarгo o
burlamento do sistema.

Abraзos,
Realmente esse ultimo mйtodo й quase meio que infalнvel, irei implanta-lo no meu sistema.
Reply
#9

Quote:
Originally Posted by histire
Посмотреть сообщение
Realmente esse ultimo mйtodo й quase meio que infalнvel, irei implanta-lo no meu sistema.
o problema й se o kara decompilar nй kkkk
nгo й impossнvel burlar aquele anti-deamx que o vini posto... apenas dificulta

pesquisei um pouco no fуrum e achei esse daqui
PHP код:
WasteDeAMXersTime()
{
    new 
b;
    
#emit load.pri b
    #emit stor.pri b

(crйditos: mauzen + ******)
й um pouco melhor que o padrгo pq usa o #emit
й obvio que tambйm nгo й 100% seguro, mas й 100x mais seguro que o padrгo que usa apenas a proteзгo "comum" usando array...
Reply
#10

Quote:
Originally Posted by zSuYaNw
Посмотреть сообщение
Podemos fazer muitos sistemas de "Seguranзa",
alguns bбsicos sгo comparando datas, horas (quando usado em um VPS com a data errada ano pode ser burlбvel).
agora, quando criamos arquivos com nomes codificados pode se sair melhor.

Oque o ViniBorn postou, sгo sistemas simples mais seguros que vocк nгo precisa ter muito esforзo para
injetar seguranзa em seu servidor, mais jб se vocк quer investir nisto, vocк pode seguir os exemplos
abaixo, como a maioria eu utilizado, e alguns jб vi.


  • Alguns tipos sгo:
  • - Verificaзгo se arquivo especial existe ou nгo.
    pawn Код:
    // OnGameModeInit()
    if(!fexist(#unloadsever.dl)) SendRconCommand(#exit);
    No cуdigo acima, verificamos se o arquivo existe ou nгo, caso nгo existir,
    ele desliga o servidor (nгo muito avanзado).


  • - Comparaзгo de Callback's.
    Neste estilo, podemos verificar se tal callback existe.

    pawn Код:
    // OnGameModeInit()
    if(Funcidx("@MinhaCallBack_"))  SendRconCommand(#exit);
    WARNING: Nгo crie a callback "@MinhaCallBack_" no gamemode,
    para o sistema funcionar, crie um FilterScript e crie a callback.


    pawn Код:
    forward @MinhaCallBack_();
    public @MinhaCallBack_()
    {
        static Dia, Mes, Ano;
        getdate(Ano, Mes, Dia);
        if(Ano == 2012
        && Mes 4)
        {
            print("GameMode Desbloqueado");
        }
        else
        {
            SendRconCommand("exit");
        }
    }

  • - Outro mйtodo podemos utilizar й usando a funзгo HTTP(requisitaзгo de pбgina)
    Este mйtodo nгo й muito conhecido, mais para min, o mais seguro,
    Vocк utilizando a funзгo HTTP vocк verifica
    se um arquivo existe, depreferкncia hospede em uma hospedagem diferente, e nгo pegue
    uma hospedagem grбtis(porque normalmente ela falha).

    pawn Код:
    // OnGameModeINit
    HTTP(0, HTTP_GET, "MinhaHospedagem.com/meuarquivo.txt", "", "VerifySecure");

    // Final do GameMode
    forward VerifySecure(index, response_code, data[]);public VerifySecure(index, response_code, data[])
    {
        if(response_code == 200){
            // Caso existir o arquivo
            return true;
        }
        else{
            // Caso nгo existir o arquivo
            SendRconCommand(#exit);
            return false;
        }
        return false;
    }
    Bom quando o cуdigo acima funciona da seguinte maneira, ele faz uma requisitaзгo se o arquivo
    existe ou nгo, caso ele existir returna a true(verdadeiro), caso ao contrбrio ele desliga o servidor.
Bom, a lista й infinita desses sistemas,
mais o que eu uso em meu gamemode sгo estes( os trкs).

porque quem rouba o gamemode, lуgicamente poderб modificar a RCON ou PORTA e isto й facilmente
modificбvel, entгo indico utilizar o mйtodo de requisiзгo de pбgina, por ser o mais seguro.

Bom, postei os quais eu uso e me lembro, caso vocк for criar o seu mйtodo,
procure usar te diferentes classes e idйias, use mais de 1 e nгo coloque nomes уbvios que indicarгo o
burlamento do sistema.

Abraзos,
Legal Magrгo, agora aonde colocamos esse arquivo:
- Verificaзгo se arquivo especial existe ou nгo.
Code:
// OnGameModeInit()
if(!fexist(#unloadsever.dl)) SendRconCommand(#exit);
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)