Ir para conteúdo

[TUTORIAL] Sistema de proteção pelo DevHub!


Lucca.

Posts Recomendados

Olá! bom, neste tutorial irei ensinar um sistema básico de proteção pelo sistema da DEVHUB..

Bom, e oque é a dev hub? Caso queira entender TUDO sobre a devhub, veja o tópico do próprio criador, mas, caso você tenha preguiça (que nem eu), irei explicar + - aqui.

 

Para acessar a devhub clique aqui

 

A devhub é um site totalmente free, onde você cria sua conta, e, após criada, você pode criar PROJETOS no site, para ser o ''manager'' de proteção de seu plugin.

Quando você estiver criando seu projeto, você precisará inserir 2 dados, para concluir a criação.

Após criado, seu projeto terá 4 ''dados'', que são: Tag (Nome de seu projeto), Key (Key que você cria), Ip(O ip, caso, você habilite a ''proteção de ip'' na hora de criar o projeto, ele irá marcar toda vez que alguém utiliza sua key, qual ip foi), e a SecretKey(Uma key extra de segurança gerada pelo próprio site).

 

Será + - assim: E87G2TW.png

 

Bom, após fazer tudo isso, partiremos para parte em seu plugin!

 

Primeiramente, (em meu caso), faremos um arquivo .yml, onde você colocará os dados de seu projeto:

	public File key;
	public FileConfiguration key_conf;

Após isso, partiremos para o método onLoad(), que será a parte onde o plugin ''carrega'', e criaremos o arquivo da ''key.yml'', onde ficará os dados necessários:

                    public void onLoad(){
		      UUID uuid = UUID.randomUUID();  //Aqui, geraremos uma key aleatória apenas para setar na config como exemplo
		      String myRandom = uuid.toString();  //Aqui transformaremos a key gerada em uma string, para setar na config.
	              this.key = new File(getDataFolder(), "key.yml");
		      this.key_conf = YamlConfiguration.loadConfiguration(this.key);
		      if (!this.key.exists()) {
		        try
		        {
		          this.key.createNewFile();
		          this.key_conf.set("Authentication.Key", "0000-0000-0000-0000");
		          this.key_conf.set("Authentication.Secret Key", myRandom.substring(0,20).replace("-", myRandom.substring(0,1))); //Aqui pegamos a key gerada, reduzimos o tamanho da string a 20 caracteres, e como toda UUID gerada possui alguns traços nela, daremos replace nesses traços com outras letras aleatórias
		          this.key_conf.save(this.key);
		        }
		        catch (IOException e)
		        {
		          e.printStackTrace();
		        }
		      }
                    }

Após isso, precisaremos checar se a licença está correta, certo? Então vamos lá:

Primeiramente, adicione este code a sua class: 

	 public static String lerURL(String url){
	       try {  
	           URL eita = new URL(url);  
	           BufferedReader br = new BufferedReader(new InputStreamReader(eita.openStream()));  
	           String s;  
	           String z = "";
	           while ((s = br.readLine()) != null) {  
	                 z+=s;
	           }  
	           br.close();  
	           return z.replace("<br>", "\n");
	       } catch (MalformedURLException excecao) {} catch (IOException excecao) {Bukkit.getConsoleSender().sendMessage("§c[" + prefix2 + "§c] §4§lIOException error! Há algo errado em sua key.yml");}
	   return "";
	 }

Este code, será para ler tudo que a pagina retornará quando fazer a leitura (O site retorna um JSON, dizendo se a licença foi aceita o não).

 

Bom, agora vamos para parte da checagem:

Crie uma boolean em sua class:

	 boolean keycheck = false;

Agora, ainda no onLoad(), adicione isto após a parte de criação da key:

		      if (lerURL("http://devhub.mcdevelopersbr.net/api/auth/<NOME DE SEU PROJETO>/" + this.key_conf.getString("Authentication.Key") + "/" + this.key_conf.getString("Authentication.Secret Key") + "").contains("true")){ //Esta parte, será onde checamos se a key está totalmente correta
		    	  Bukkit.getConsoleSender().sendMessage("        §a§l-=ANTI§2PIRATARIA§a=-");
		    	  Bukkit.getConsoleSender().sendMessage("§a[" + prefix2 + "§a] §3Sua licenca foi aceita!");
		    	  Bukkit.getConsoleSender().sendMessage("§a[" + prefix2 + "§a] §3Plugin iniciando.");
		    	  Bukkit.getConsoleSender().sendMessage("        §a§l-=ANTI§2PIRATARIA§a=-");
		    	  keycheck = true;
		      } else {
//Caso a key não esteja correta, iremos dizer esta mensagem:
		    	  Bukkit.getConsoleSender().sendMessage("        §c§l-=ANTI§4PIRATARIA§c=-");
		    	  Bukkit.getConsoleSender().sendMessage("§c[" + prefix2 + "§c] §4Sua licenca não foi encontrada!");
		    	  keycheck = false;
//Agora, checaremos porque a licença não foi aceita:
		    	  if (lerURL("http://devhub.mcdevelopersbr.net/api/auth/<NOME DE SEU PROJETO>/" + this.key_conf.getString("Authentication.Key") + "/" + this.key_conf.getString("Authentication.Secret Key") + "").contains("Key")){
//Caso apenas a KEY esteja incorreta, diremos isto:
		    		  Bukkit.getConsoleSender().sendMessage("§c[" + prefix2 + "§c] §4§lKEY §cincorreta!");
//Caso não for a KEY que esteja incorreta, checaremos se é a SECRET-KEY:
		    	  } else if (lerURL("http://devhub.mcdevelopersbr.net/api/auth/<NOME DE SEU PROJETO>/" + this.key_conf.getString("Authentication.Key") + "/" + this.key_conf.getString("Authentication.Secret Key") + "").contains("Secret")){
//Agora, caso apenas a SECRET-KEY esteja incorreta, diremos isto:
		    		  Bukkit.getConsoleSender().sendMessage("§c[" + prefix2 + "§c] §4§lSECRET-KEY §cincorreta!");
		    	  }
		    	  Bukkit.getConsoleSender().sendMessage("        §c§l-=ANTI§4PIRATARIA§c=-");
		      }

Agora, no onEnable() (void em que o plugin se inicia), adicionaremos:

		if (!keycheck){ //Caso a key não foi encontrada, a boolean será false e o plugin não funcionará, porém caso for TRUE, este método será ignorado.
		Bukkit.getPluginManager().disablePlugin(this);
		return;
		}

Pronto! sua ''proteção'' está finalizada.

 

Agora, explicando o método da checagem com palavras:

Quando a checagem é feita no site, pelo método lerURL, o site retornará algo parecido com isto:

{"authorized":true,"ainfo-1":"FrameMc","ainfo-2":""}

Por isso, na checagem, após ''lerURL'', temos: 

lerURL(<url>).contains("true")

pois se a licença estiver correta, nesta JSON teremos TRUE, e se estiver errado, FALSE.

E em relação a boolean, ela será alterada de acordo com a checagem, se a licença aceita, a boolean será TRUE, caso não, false.. Por isso a checagem também no onEnable(). 

 

Fim de tutorial, espero que tenham entendido, caso não tenham, basta perguntar aqui no tópico que explicarei melhor!

 

LEMBRANDO QUE ESTE MÉTODO NÃO E 100% SEGURO, ALIÁS, NENHUM MÉTODO DE PROTEÇÃO DE PLUGIN SERÁ 100% SEGURO!

 

Se gostou da um like aew, não cai o dedo \o

Editado por Lucca.
Link para o comentário
Compartilhar em outros sites

Guest DouglasB2310

Por quê não colocar no GitHub e todo mundo contribuir para o projeto de plugin? Assim ficaria um pouco mais conhecido e todo mundo saberia quem rouba seus plugins, além disso poderia provar que você é dono do projeto, além de ter chance de outras melhorarem a gosto(Os legais pull requests)! Muito melhor do que bloquear a decompilação, e se tiver código malicioso? Ninguém sabe.

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...
  • Quem está navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...