Discussão do artigo "Código MQL5 de segurança: Proteção de senha, geradores de chaves, limites de tempo, licenças remotas e técnicas de codificação de chave de licença de EA avançadas" - página 3
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Você também poderia substituir a porta da frente por aço reforçado, mas isso não impedirá a entrada se você deixar a chave no capacho. A proteção que você descreveu é boa para deter o codificador casual, mas certamente não contra um invasor motivado.
A questão aqui não é a criptografia - essa é a parte fácil - mas sim como você lida com as chaves e o processo de descriptografia.
No cenário em que um invasor, no jargão clássico, vamos chamá-lo de Mallory, deseja copiar e distribuir um EX5 para o qual ele tem a chave, então certamente ele pode fazer isso
i. executar o EX5 com a chave;
ii. monitorar o processo enquanto ele estiver em execução, por exemplo, anexando uma DLL ao processo, e despejar o conteúdo do EX5 imediatamente após ele ser descriptografado;
iii. remontar o EX5, agora em texto simples (e possivelmente desmontá-lo no código-fonte, se for possível).
Se o seu primeiro ponto de proteção envolver a verificação da assinatura, tudo o que o invasor precisa fazer para distribuir arquivos é distribuir um executável MQL diferente com as chaves públicas relevantes substituídas. Se a MQL5 usar uma API criptográfica para verificar o certificado, isso poderá ser extraído do binário. Isso continua ad infinitum.
Isso tudo antes de você começar a considerar o pesadelo que será o gerenciamento de chaves.
Embora esse tipo de análise binária esteja fora das minhas capacidades atualmente, conheço várias pessoas que poderiam fazê-lo sem problemas. Portanto, não é com a força da criptografia que você deve se preocupar, mas sim com o fato de que você tem um modelo de segurança inválido. Não é um problema específico em si, pois ninguém espera que o MetaTrader resolva esse problema - há outras soluções muito úteis para esse problema, especificamente fazendo com que o proprietário do código MQL5/EX5 o execute em um servidor separado que ele controla e licencia o acesso/sinais para os compradores.
Portanto, não consigo entender por que as pessoas estão exigindo esse recurso quando ele é tão difícil de ser implementado adequadamente, pelo menos sem um hardware à prova de violação.
allicient traz muitos pontos válidos. Para qualquer proteção real, recomendo o seguinte:
Para a proteção básica do código-fonte, colocar o máximo possível de funções em uma dll deve ser suficiente. O código mínimo para a interface entre o MT5 e a programação é aceitável. Eu não confiaria no código-fonte completo do ex4/ex5, a menos que você esteja oferecendo seu software. Mas este artigo trata da proteção de sua propriedade intelectual para produtos pagos/comerciais ou produtos gratuitos em que o código-fonte não é fornecido.
Para o licenciamento, a melhor proteção é ter versões demo e live separadas da combinação ex4/dll. A desvantagem é que isso é um pouco mais incômodo para o desenvolvedor e para o cliente, pois o desenvolvedor precisa manter/compilar duas versões do próprio software, mas diminui a chance de alguém obter acesso pirateado à versão completa do software, pois só poderá usar a versão de demonstração. Depende muito do objetivo da demonstração. Se você quiser oferecer ao cliente a funcionalidade completa, então
Além disso, implemente um licenciamento que possa exigir que uma pequena parte do código essencial seja executada remotamente antes que o software local possa ser executado. O CNS SaaS (Software as a Service) fez exatamente isso, e é chamado de funções CCoHS (Call code on hosted server). Você pode colocar uma parte limitada do código necessário para que seu EA seja executado corretamente de forma hospedada.Então, mesmo que alguém fuja com o EA ou quebre a dll de licenciamento de alguma forma, isso ainda tornará a dll inútil. Há latência entre o servidor de código hospedado e o EA e/ou os servidores de licenciamento, mas você pode contornar isso. A implementação não é muito difícil, mas o usuário precisa encontrar uma maneira de implementar o CCoHS em seus próprios servidores. Quando você é pequeno, pode fazer isso em um servidor de orçamento ou em qualquer outro lugar e, em seguida, aumentar a escala quando sua base de assinantes crescer.
As funções hospedadas, embora sejam as mais caras de todas as opções, oferecem proteção real no caso de alguém conseguir descompilar a sua dll, o que é muito improvável. Eles provavelmente "quebrariam" a dll para fazer o seu software funcionar. Mas, sem as funções hospedadas necessárias, ele ainda seria inútil. A menos que eu tenha perdido alguma coisa aqui.
Artigo publicado Protegendo programas MQL5: senhas, chaves, limite de tempo, verificação de licença remota:
Autor: investeo
3. Vinculação à conta - Tentei vincular o trabalho do Expert Advisor à conta. A proteção não funciona, ele exibe a mensagem /o trabalho do Expert Advisor nesta conta não é permitido/, mas o EA continua sendo negociado. Não há erros durante a compilação. Não entendo o que está errado.
Onde seria colocado essa linha de codigo. ??
Olá, tenho uma pergunta: quero vender conselheiro em meu site, mas não sei como fazê-lo. Alguém pode me ajudar?
Desde já, obrigado!
Hi,
Obrigado pelo artigo. Por favor, me aconselhe sobre a proteção por senha, como fazer para que, ao digitar a senha, a entrada seja exibida como um asterisco ("*") ou um ponto ("-")
Não sou um bom programador.
Obrigado pela atenção
A proteção contra cópia é um problema extremamente difícil, por isso os esforços do setor de música/filme com DRM e seus repetidos fracassos.
Na melhor das hipóteses, as informações aqui contidas desperdiçarão o tempo de algumas pessoas; na pior, você pode ter dado ao leitor uma falsa sensação de segurança. Se ele decidir "proteger" um produto usando sua orientação, poderá ficar surpreso quando o consumidor remover a proteção em questão de horas e revendê-lo por uma fração do preço.
E, falando sério, a codificação base64 não está relacionada à criptografia. A codificação base64 foi projetada para permitir que dados de 8 bits sejam transmitidos com segurança usando protocolos que consideram a codificação de dados como sendo de 7 bits. É possível reverter trivialmente a codificação base64, e ela foi projetada para essa finalidade!
A única solução que vejo para distribuir com segurança o software MQL5 é por meio das disposições da procuração limitada do corretor ou instalando uma instância da MQL5 com os arquivos .ex5 em um servidor em algum lugar e permitindo o acesso do cliente usando um thin client (para que ele não possa fazer o download do .ex5). E, sim, trabalhei com segurança da informação por mais de 15 anos, portanto, tenho uma boa ideia do que estou falando.
Para ser sincero, estou bastante surpreso com o fato de a Metaquotes ter publicado o artigo.
Olá boa tarde consulta preciso de ajuda para poder conseguir a utilização de um EA por número de conta no mt4 e que me permita modificar e que só possa funcionar as contas que estão dentro da licença e que possa habilitar e desabilitar ele remotamente pois utilizava dois mt4 um master e um slave anexo a descrição do código e como posso melhor para que funcione bem pois se eu inserir outra conta que esteja fora da licença ele funciona da mesma forma.
<?xml version="1.0" encoding="UTF-8"?>
<licença>
<programVersion>
</programVersion>
<licenseType>Full</licenseType>
<validityPeriod>
<endDate>1/18/2080</endDate>
</validityPeriod>
<Owners>
<ownerName>
<Conta>6789</Conta>
<Conta>7994</Conta>
<Conta>22302</Conta>
</ownerName>
</Owners>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>Cl8vF8+Uyyms3pEodjip5ol5J4s=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue> p/NlTyHeUy5CVC01H/2WmvTcN8TqJhrInkhqtyzR6vqn/koJHqm6fiD6mepklpn4fud0em7vqOiyWcQ9KQ8jqoyoN9ExkJUEvepWBQT2HHHcaoW2kpV17ch+CZvtFX74cHE23WrOi9/p3RoK/4G0rsgvdjvefdZRQRsM5k=</SignatureValue>
</Signature>
</license>
Tenho uma ideia. Suponha que exista um monitor da Web que sempre examine o fluxo da Web.
1. O cliente EA chama o servidor da Web para obter uma chave sha.pub que é gerada pelo servidor de forma aleatória.
2. O EA envia alguns dados solicitando autorização para o servidor com a chave pub, de modo que o monitor não possa saber quais são os dados. E os dados podem conter alguma chave aleatória gerada pelo cliente. O monitor não pode descriptografar os dados por causa da chave sha.
3. O servidor recebeu os dados e enviou informações de autorização permitidas criptografadas pela chave que o cliente enviou a ele. O monitor pode descriptografar essas informações porque pode conhecer a chave sha do pub, mas não conhece a chave do cliente, portanto, ainda é inútil.
Dessa forma, o servidor pode controlar o comportamento do cliente EA.
Olá, seria possível atualizar este artigo levando em conta a nova versão do Python?
Não estou conseguindo fazer com que ele funcione. PS: O Python ainda é novo para mim.
Obrigado,
Danny