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

é um bom tutorial, porém vale lembrar que precisa não só fazer isso para ter um antipirataria bom né gente...

 

 

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

Link para o comentário
Compartilhar em outros sites

Caraca '-', tudo isso só para ler um string de um site '-'.

 

Dica: Cria um tutorial de como fazer ofuscação massiva, por mesmo ofuscando com ProGuard, essas treta ae, ainda tem como burlar. (Falo por que já dei esse vacilo quando usava meus métodos assim, ai o Power me contou e eu mudei tudo :c)

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...
×
×
  • Criar Novo...