Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Segurança para aplicações comerciais com o Electron

O Electron é realmente fantástico, ele está para o desenvolvimento desktop assim como o Apache Cordova (base do Ionic e Phonegap) está para o desenvolvimento mobile.

Mas um problema que vejo, é que o packager não oculta o código fonte, em todas as plataformas ele gera uma pasta chamada "resources", mesmo na versão MacOS está embutido mas mesmo assim é de fácil acesso o fonte da aplicação.

Minha dúvida é, existe uma forma viável de realmente empacotar, para que o acesso ao fonte seja pelo menos difícil?

Pois obviamente, um código aberto como ele gera, não é nada interessante para desenvolver uma aplicação comercial.

Pois basta o mínimo de curiosidade do usuário para que ele encontre e altere absolutamente tudo no código fonte.

Digo não apenas para proteger a propriedade intelectual da aplicação, mas principalmente se eu quiser colocar acesso a bancos de dados e servidores remotos no meu código fonte.

O melhor obviamente seria uma forma de criptografar o código fonte e embutir no executável, mas procuro uma solução que pelo menos dificulte muito o acesso aos fontes.

Se alguém souber de alguma forma de fazer isso, sem quebrar a aplicação, ficarei muito grato.

4 respostas

Testei alguns empacotadores. O que oferece uma segurança um pouco maior, é esse: https://github.com/electron-userland/electron-builder

Ele empacota o código fonte em um arquivo .asar

Mas assim, basta uma busca rápida no Google que você descobre como extrair os arquivos originais.

Essa solução ajuda um pouco a ocultar dos curiosos, mas se o usuário estiver motivado a pegar os fontes, ele consegue sem muito esforço.

O que é péssimo para proteger acesso a servidores. Ou mesmo se você quiser ocultar o funcionamento da aplicação.

Acho que o melhor até então, seja ofuscar o javascript e o que mais for possível, e empacotar usando o .asar

Se alguém achar uma proteção melhor, agradeço muito.

solução

Fala Adriano,

Pois é, este é um "calcanhar de aquiles" do Electron. Não existe um jeito realmente bom de ofuscar o código fonte da aplicação, e até as aplicações comercias grandes como Slack, Git Kraken e WhatApp podem ter seu código inspecionado.

Então proteger o código fonte em si não tem como, o que algumas dessas empresas maiores fazem para esconder credencias de bancos e outros dados sensíveis é desenvolver uma parte da aplicação em C++ e gerar um módulo do Node para isto, pois ai estas partes críticas do código não são expostas.

Esta foi uma decisão de design da equipe que desenvolve o Electron tomou, pois para conseguir que o código fonte fosse encriptado, eles teriam que sacrificar uma boa parte da performance da máquina virtual V8, que roda o código Javascript das aplicações em Electron. Então eles preferiram performance à possibilidade de ofuscar o código fonte. Utilizando uma frase deles "You have to pick your battles" , e focar em esconder o código fonte não é uma prioridade para a equipe que desenvolve o Electron atualmente :(

Neste link do github do electron:

https://github.com/electron/electron/issues/3041

Tem toda a discussão sobre isto, e eles lá também citam uma outra lib chamada de NW.js que é parecida com o Electron mas que consegue encriptar o código fonte, mas com o problema de performance que eu falei anteriormente.

Espero que possa ter esclarecido sua dúvida, um abraço

Douglas Quintanilha

Oi Adriano, você pode até ofuscar o código ou fazer algo mais complicado.. mas perceba, as urls de banco de dados, serviços ou outras coisas, continuarão lá.. pq se vc mexer nelas o código não funciona. Sinceramente, eu não acho que essa é uma preocupação grande.. as aplicações web, todas, funcionam com o código cliente sendo de fácil acesso.

De todo jeito, eu achar um jeito que atenda suas necessidades, posto aqui.

@Douglas, pois é, o NW.js realmente é mais lento.

Acabei de fazer um teste com o hello world, em dev executou normalmente.

Mas após compilar, é perceptível que ficou bem mais lento, pelo menos a inicialização.

A documentação do NW.js não é tão boa quanto a do Electron, além é claro que a comunidade do Electron é bem maior.

@Alberto, concordo com você.

Proteger strings com a ofuscação, não necessariamente ficam visíveis.

Testei um ofuscador online (https://javascriptobfuscator.com/Javascript-Obfuscator.aspx) As strings são convertidas para o formato hexadecimal.

Claro que isso não resolve grandes coisas, pois basta bater o olho no formato que já dá para ver que é hexadecimal, sendo assim, de fácil conversão.

No caso de aplicações web, o código é aberto, porém a lógica fica no servidor, em uma aplicação o web o client é "burro", então não tem muito o que se preocupar.

Mas a proposta do Electron, de ser uma aplicação desktop, entendo que o client executará grande parte das funções "protegidas" que normalmente estariam no servidor. Uma aplicação desktop deve ter a capacidade de executar standalone, ou seja, tudo estará na máquina do usuário.

Concordo plenamente com você, essa proteção não é algo que precise de uma preocupação tão grande.

Mas sei lá, isso depende muito da aplicação.

Enfim, agradeço pelas respostas. Caso eu encontre uma solução melhor, compartilho aqui no fórum.

Mas no momento, vou considerar em testar a ofuscação do código e empacotar no formato .asar

Vou verificar com a equipe aqui da empresa, a possibilidade de fazer as partes críticas em C++ e executar com o node via shell.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software