Ir para conteúdo

Tutorial - Criando um sistema de proteção para seus plugins!


BrunnoFdc

Posts Recomendados

Opa, tudo bom? Hoje eu tava vendo umas duvidas e vi que tem umas pessoas interessadas em saber como proteger seu plugin. Decidi fazer um tutorial explicando, até porque não é tão difícil assim.


 


 



 


 


Você vai precisar de:


 


1 Hospedagem de sites com MySQL (Pode ser Hostinger);


1 Editor de texto para editar arquivos .php (Pode ser Notepad++);


Saber o aceitável de Java;


 



 


Primeiramente, vamos fazer preparar o ambiente:


 


Com sua hospedagem de sites em mãos, crie um novo banco de dados MySQL e acesse-o pelo phpMyAdmin


http://prntscr.com/fgieij


 


No phpMyAdmin, crie uma nova tabela com o nome "licenca" e com 2 colunas


http://prntscr.com/fgiix6


 


Configure a estrutura da seguinte maneira:


http://prntscr.com/fgik12


 




 


Agora com a tabela criada, vamos inserir um registro para testar:


http://prntscr.com/fgikif


 


No campo "plugin", escreva um número que servirá como ID do seu plugin


No campo "licenca", coloque a licença que será usada para ativar esse plugin


Você pode conseguir um exemplo de licença nesse site. Basta colocar qualquer coisa (Eu recomendo que seja sempre algo aleatório) na caixa de texto e clicar em "Compute MD5" como você pode ver nessa print.


http://prntscr.com/fgioib


 



 


Com o banco de dados preparado, vamos para a programação. Crie um arquivo chamado protecao.php em algum lugar e abra ele com o seu editor de texto. Em seguida cole o código abaixo:



<?php

//Preencha seus dados de acesso do banco de dados do MySQL criado anteriormente
//Se estiver usando Hostinger, deixe o host assim.
//DB = Nome do banco de dados.
$host = 'mysql.hostinger.com.br';
$user = 'ltqixcnj_brunn';
$pass = 'tutorial';
$db = 'ltqixcnj_tutor';

$conn = new Mysqli($host, $user, $pass, $db) or die;


if(isset($_GET['licenca']) && isset($_GET['plugin'])) {

$pl = $_GET['plugin'];
$licenca = $_GET['licenca'];

$consulta = "SELECT * FROM `licencas` WHERE `plugin` = '$pl' AND `licenca` = '$licenca'";
$sql = $conn->query($consulta);

if($sql->num_rows > 0) {

echo "true";

} else {

echo "false";

}

}

?>

Faça as modificações devidas e envie o arquivo para a host.


 



 


Agora vamos colocar o verificador dentro do plugin. Na sua classe Main, coloque em algum lugar o código abaixo:



public static void verifyLicense(ConsoleCommandSender ccs, String license, Main plugin) {

try {

//O nome "oracle" é que eu peguei o código do site do Java..
URL oracle = new URL("http://seusite.esy.es/protecao.php?licenca=" + license + "&plugin=1");
URLConnection yc = oracle.openConnection();
yc.setConnectTimeout(5000);
yc.setReadTimeout(5000);
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));

if(in.readLine() == "true") {

ccs.sendMessage("§bSua licença é válida! Plugin ativado com sucesso!");
ccs.sendMessage("§bObrigado por comprar meus plugins :-)");

} else {

ccs.sendMessage("§4Sua licença não é válida!");
ccs.sendMessage("§4Verifique a chave de licenciamento e tente novamente.");
ccs.sendMessage("§4O plugin será desabilitado por questões de segurança.");
Bukkit.getPluginManager().disablePlugin(plugin);

}

} catch(Exception e) {

ccs.sendMessage("§4Não foi possível verificar sua licença. O plugin foi desativado por medidas preventivas.");
Bukkit.getPluginManager().disablePlugin(plugin);

}

}

Faça as modificações devidas e salve.


 


E agora, dentro do seu onEnable, coloque o seguinte:



verifyLicense(Bukkit.getConsoleSender(), getConfig().getString("Licenca"), this);

Não esqueça de botar um espaço na config para o comprador preencher a licença!


 



 


 


Então é isso! Se você gostar do tutorial, deixa ai um like pra eu saber que ajudou.


Qualquer dúvida ou problema, só falar.


Pode ter erro, porque eu fiz tudo ao vivo, sem testar nada, então me falem se der erro pra vocês!


 


Abraços


Link para o comentário
Compartilhar em outros sites

Caraca! Nunca tinha pensado em usar php, sempre usei tudo no bukkit mesmo... Genial!

Likezão.

 

Até tem como fazer no Bukkit sozinho, mas eu dei o exemplo em PHP caso alguém queira fazer um site para vender os plugins, ai ja tem o sistema de proteção. E também que é mais seguro colocar as informações do banco de dados no PHP, porque ninguém recebe o arquivo .php, então não da pra ver nenhum dado comprometedor assim.

 

Valeu :)

 

 

obrigado, ajudou muito!

 

De nada, acho que você era um dos que queria saber como fazer... Está aí.

Link para o comentário
Compartilhar em outros sites

Eu tinha bolado um esquema assim, a uns meses, para vender plugin...

Só não era .php kkkk.

 

Boa... Mas vale lembrar, que ainda assim, é burlável.

 

Nenhum sistema é 100% perfeito... Mas assim é mais seguro do que fazer o próprio plugin conectar no MySQL..

Link para o comentário
Compartilhar em outros sites

Ou me ajuda! o meu nao deu ! pff

 

O que não deu? O php? O Java? O que tem de errado? Fica dificil ajudar porque eu não tenho bola de cristal.

 

Vale lembrar que a pessoa precisa saber o mínimo de Java pra fazer isso. Não vou ficar corrigindo erros tolos de sintaxe (Só no PHP, até porque o pessoal que sabe Java não é obrigado a saber PHP, mas não me venham pedir ajuda porque tá dando erro no PHP sem ao menos terem modificado as variaveis que armazenam os dados do MySQL no script)

 

Tem algum modo de fazer pra skript? alguem sabe?

 

Se o skript for capaz de ler informações de sites na internet, então tem como fazer sim.

 


 

up

Link para o comentário
Compartilhar em outros sites

 

O que não deu? O php? O Java? O que tem de errado? Fica dificil ajudar porque eu não tenho bola de cristal.

 

Vale lembrar que a pessoa precisa saber o mínimo de Java pra fazer isso. Não vou ficar corrigindo erros tolos de sintaxe (Só no PHP, até porque o pessoal que sabe Java não é obrigado a saber PHP, mas não me venham pedir ajuda porque tá dando erro no PHP sem ao menos terem modificado as variaveis que armazenam os dados do MySQL no script)

 

 

Se o skript for capaz de ler informações de sites na internet, então tem como fazer sim.

 


 

up

vlw ae

Link para o comentário
Compartilhar em outros sites

Guest LuizCarlosROD

 

O que não deu? O php? O Java? O que tem de errado? Fica dificil ajudar porque eu não tenho bola de cristal.

 

Vale lembrar que a pessoa precisa saber o mínimo de Java pra fazer isso. Não vou ficar corrigindo erros tolos de sintaxe (Só no PHP, até porque o pessoal que sabe Java não é obrigado a saber PHP, mas não me venham pedir ajuda porque tá dando erro no PHP sem ao menos terem modificado as variaveis que armazenam os dados do MySQL no script)

 

 

Se o skript for capaz de ler informações de sites na internet, então tem como fazer sim.

 


 

up

Olha mano agora deu certo so que queria fazer um sistema tipo pra ver usuario ip licenca e o plugin me passa um php?

Link para o comentário
Compartilhar em outros sites

Cara decompila o projeto e remove essa verificação

Se o cara for muito noob, ele usa ClassEditor que modifica diretamente String, e muda o site para um dele que faz um codigo PHP bem simples

 

<?php
echo 'true';
?>

Desiste em tentar proteger seu plugins

Faça plugins para pessoa que você confia, para servidores grandes ou faça FREE OPENSOURCE

Pode fazer como eu faço, eu construo o servidor td e abro, eu sou dono, ninguem tem acesso a painel SIMPLES

Link para o comentário
Compartilhar em outros sites

Gostei da ideia, mas ainda sim é super burlável, mas para começo está ótimo, recomendo á quem for fazer um sistema de autentificação, que use um sistema de sessions...

 

Um exemplo de como burlar isso? Só consigo pensar em uma forma: Mudando o codigo do plugin.

 

Me avisa o que você tem em mente, vou tentar modificar isso.

Link para o comentário
Compartilhar em outros sites

Em 17/07/2017 em 20:31, BrunnoFdc disse:

 

Um exemplo de como burlar isso? Só consigo pensar em uma forma: Mudando o codigo do plugin.

 

Me avisa o que você tem em mente, vou tentar modificar isso.

redirecionando o site para outro que retorne true, como no windows com o arquivo hosts

Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...