Criptografia

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

Luan_22
Posts: 2
Joined: 14 Dec 2019, 05:37

Criptografia

Post by Luan_22 » 15 Dec 2019, 23:10

Existe algum jeito de criptografar os scripts compilados? Eu fiz um script e compilei em .exe, porém ainda dá pra ver a source dele se abrir no notepad. Teria algum jeito de criptografar? Ou pelo menos deixar difícil de ser lido.

User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Criptografia

Post by Gio » 16 Dec 2019, 19:13

Boa noite Luan_22.

Você tem várias opções para dificultar alguém de conseguir seu código fonte. Eis algumas:

1. Use um packer.

Um packer é um programa que "envelopa" um excutável com o propósito de comprimi-lo (tornar o tamanho final menor). Ele funciona assim: primeiro comprime o executável original (codificando-o) e depois envelopa o código comprimido com instruções de auto-descompressão, que vão rodar antes das instruções originais do executável. Assim, o código do executável passa a se comportar quase da mesma forma, porém se descomprimindo antes de fazer o que foi programado para fazer.

O compilador padrão do pacote de instalação do AutoHotkey (Ahk2Exe) possui uma flag para uso de um packer (Use MPress if present). Essa flag funciona da seguinte forma: se o packer mpress.exe estiver localizado na mesma pasta do compilador (que normalmente fica em c:/arquivos de programas/autohotkey/compiler), e a flag estiver marcada, ele compila e depois passa o packer no executável.

O uso do packer diminui o tamanho final do arquivo e também impede a leitura do texto do script (pois tudo vira código de máquina).

Essa proteção não é perfeita, mas já tira 99% da chance de um curioso encontrar o código (precisaria de um certo conhecimento de engenharia reversa de software e também de como operar alguns softwares específicos para recuperar o código de dentro de um executável compilado com um packer).

O MPress é um programa gratuito que pode ser baixado direto do site dedicado.

:arrow: Originalmente o MPress vinha junto do pacote de instalação do AutoHotkey, mas foi tomada a decisão de removê-lo porque ele causa muitos falso-positivos com anti-virus (isso porque os desenvolvedores de vírus gostam de usar packers para diminuir o tamanho do executável ao máximo, facilitando sua transmissão via rede).

2. Use um obfuscador.

Outra opção que você teria seria usar um obfuscador. Um obfuscador é um script que embaralha o código de outro script até um ponto onde ele seja (quase) impossível de ler por um ser humano (embora a máquina, devido à sua velocidade de interpretação, continue lendo normalmente). Você pode usar um obfuscador de terceiros (a comunidade já desenvolveu alguns) ou pode fazer um você mesmo, sendo critativo e seguindo as normas de sintaxe da linguagem. Também é possível obfuscar manualmente um código se quiser.

Exemplo de código obfuscado (sim, você pode executar o código abaixo. É um exemplo feito pelo usuário Uberi):

Code: Select all

#:="chr",#@:=(#_:=(##:=($:=(#$:=(_:=!"")<<_)<<_)<<_)<<_)<<#$,@:=#_<<_|#@,_#:=%#%(@|#$|_),__:=%#%(@|$|_),_@:=%#%(@|#_|#$|_),_$:=%#%(#@|_),@#:=%#%(@|_),@_:=%#%(@|##|$|#$|_),@@:=%#%(@|#_|$|_),@$:=%#%(@|#_|$),$#:=%#%(@|##|$|#$),$_:=%#%(@|#_|#$),$@:=%#%(@|##|#$|_),$$:=%#%(#@|##),###:=%#%(@|$),##_:=%#%(@|##|$),%###%%##_%%##_%%_#%%@#%%##_%%##_%(%#%(#@|##|$|_) __ _@ _@ @# %#%(@|$|#$|_) __ %#%(#@|#$) @_ %#%(@|#_|##),%#%(#@|@|##|_) $# @$,!_,_@ @$ $_,%#%(#@|##|#$) @@ _@ @$ " " _$ $# @_ @$ %#%(@|##) __ $_ " " _$ @@ @$ @_ $$ @_ @$ $@ __ %#%(@|#_|##|_) " " $$ @# _# $@ __ $_,_@ @$ $_,"",%#%(#@|@|##|_) $# @$,!_)
:arrow: A razão de ser um obfuscador é a seguinte: mesmo que alguém obtenha seu código-fonte, será (quase) impossível trabalhar com ele. Qualquer modificação não milimetricamente calculada em um símbolo torna o código inútil. Também fica difícil descobrir onde exatamente no código precisa mexer para fazer alguma coisa específica.


3. Pense bem sobre o que quer proteger exatamente

Nem tudo vale a pena se preocupar em proteger. Qualquer programador com anos de experiência provavelmente saberá fazer quase qualquer seu script do zero sem problemas só de olhar a execução dele. Por este motivo, se você for desenvolver algo comercial, pense muito mais em um contrato de licença do que em uma proteção via código. Além disso, se o seu script tiver informações muito sensíveis, pode valer mais a pena pensar em como colocá-las em lugares onde o client não tenha acesso (servidores, etc) do que em proteger via código.

:arrow: Você pode criar rotinas de login com conexão à servidores (via web ou rede local). Isso é bem melhor para proteger senhas e dados sensíveis.

4. Não esqueça do custo !

Em 99% dos casos, a ideia de que alguém vai roubar o seu código e por isso você deve impedi-lo não passa de uma neura do programador. Uma proteção básica até que tudo bem, mas lembre-se apenas que dá trabalho e custa dinheiro construir um muro. Por isso 3 metros até que podem ajudar, mas 50 metros não passa de um desperdício: Alguém muito dedicado e com muito tempo livre vai acabar saltando de paraquedas, explodindo um buraco ou cavando por baixo se você colocar muito ouro do outro lado. Em contrapartida quase ninguém vai querer pular um muro de 3 metros se for só pra deixar de pagar uma licencinha de 80 reais...

Alcrkai
Posts: 47
Joined: 16 Mar 2021, 10:51

Re: Criptografia

Post by Alcrkai » 19 May 2021, 09:44

como usaria o obfuscador?
É só coloca ele no código?

User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Criptografia

Post by Gio » 19 May 2021, 11:47

Bom dia Alcrkai.

Não, o obfuscator é um script à parte (script_1). Ao ser executado, ele lê o código de outro script (script_2), obfusca ele e depois gera um novo script com o código obfuscado (script_2_obfuscado). Esse novo script (script_2_obfuscado), uma vez executado, deve poder executar o mesmo trabalho que o script original (script_2), ainda que suas linhas de instruções sejam individualmente muito diferentes.

Em um outro tópico de ajuda, eu respondi como utilizar o Dynamic Obfuscator L, uma das ferramentas desenvolvidas pelos usuários do fórum para este fim. Você pode conferir a explicação no link abaixo:
https://www.autohotkey.com/boards/viewtopic.php?f=69&t=73488#p317839


Além disso, aqui vai o link do tópico do Dynamic Obfuscator L:
https://www.autohotkey.com/boards/viewtopic.php?f=6&t=49887

Post Reply

Return to “Ajuda e Suporte Geral”