Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Ajuda com Pyarmor na minha aplicação

Boa tarde queridos.

Preciso muito de uma ajuda com ofuscação de comandos python com a biblioteca pyarmor.

Apenas para entendimento do contexto geral do meu problema, estou desenvolvendo uma aplicação que precisa realizar algumas atividades de maneira agendada (usando o rocketry), com interface gráfica (estou usando o pyqt5).

Na fase de testes com os scripts, interface e agendamento, tudo rodou perfeitamente e executou as tarefas conforme esperado.

Depois de validar que tudo funcionava, realizei a ofuscação de cada diretório que tinha script python com o comando:

*(Criar arquivo init.py)
    -echo. > init.py
(iniciar ambiente pyarmor)
    -pyarmor init --src=. --entry=init.py projects/agendamento
(localizar diretorio para ofuscação)
    -cd projects/agendamento
(comando para ofuscação - realizado manualmente em cada diretorio)
    -pyarmor pack --clean --output=dist .*

Para cada diretório foi gerado um arquivo pytranform.dll e um arquivo pytranform.py que mantive nos diretórios após a ofuscação.

Depois fui realizar os testes e a interface gráfica rodou normal, conseguiu gravar as informações no banco de dados sqlite, mas a parte do agendamento está apresentando os seguintes problemas:

1- Rodando pelo serviço de execução, retorna : Check bootstrap restrict mode failed no momento da execução do agendamento. Sobre isso, pesquisei na internet mas não achei nenhuma resposta satisfatória, mas pelo que entendi, é um modo de restrição que está habilitado.

2- Rodando o script de agendamento pelo vscode ele apresenta esse erro:

File **"c:\BKP_V2\agendamento\drags\7_TESTE_007_24072024\7_DIARIAMENTE_24072024\7121_COM_quarta_0913.py", line 39, in weekly_task
    from modulos.Mod_T11_BackupAgendamento import T11ExecutaBackupAgend
ModuleNotFoundError: No module named 'modulos'. **

No caso do erro do vscode, ele não encontra o modulo que realiza o backup mas o modulo está no diretório.

E tem um detalhe, minha aplicação gera scripts dinamicamente para agendamento e eles precisam acessar um modulo ofuscado.

Não sei se isso seria um impedimento para o funcionamento correto, mas gostaria de pedir ajuda para solucionar minha situação.

Para execução, uso o anaconda para ambiente virtual e estou usando a versão 8.5.10 do pyarmor.

Versões utilizadas:

Python - 3.11.9
Pyarmor - 8.5.10
Rocketry - 2.5.1

Agora, gostaria de saber se alguem conseguiria me ajudar dando uma luz se estou fazendo os passos da maneira correta, porque é minha primeira experiência com ofuscação de comandos python.

Queria saber como fazer a ofuscação e se esse seria o caminho certo. e se não for por favor alguem poderia me sinalizar como poderia ser feito da maneira correta?

Agradeço desde já.

Rayra Mota

3 respostas

Oi Rayra, boa tarde! Tudo bem?

Vou tentar te ajudar da melhor forma possível. Vamos por partes:

  1. Check bootstrap restrict mode failed: esse erro geralmente está relacionado ao modo de restrição do Pyarmor. Por padrão, o Pyarmor pode habilitar algumas restrições que impedem a execução de scripts ofuscados em determinados ambientes. Para resolver isso, você pode tentar desabilitar o modo de restrição ao ofuscar seus scripts. Tente adicionar a flag --no-restrict ao comando pyarmor pack:

    pyarmor pack --clean --output=dist --no-restrict .
    
  2. ModuleNotFoundError: No module named 'modulos': agora, esse erro ocorre porque o script não consegue localizar o módulo ofuscado. Isso pode ser causado por vários motivos, incluindo problemas de caminho ou a forma como os módulos foram ofuscados. Aqui estão algumas sugestões para resolver isso:

    • Verifique os caminhos dos módulos: Certifique-se de que os caminhos dos módulos estão corretos e que eles estão acessíveis a partir do script que está sendo executado.

    • Adicione o caminho ao sys.path: No início do seu script, adicione o caminho do diretório onde os módulos ofuscados estão localizados ao sys.path. Por exemplo:

      import sys
      sys.path.append('caminho/para/os/modulos')
      
    • Verifique se os módulos estão realmente ofuscados: Certifique-se de que os módulos foram ofuscados corretamente e que os arquivos .py e .dll gerados estão no diretório correto.

    • Teste sem ofuscação: Tente rodar o script sem ofuscação para garantir que o problema não está relacionado a outra coisa.

No mais, como você mencionou que sua aplicação gera scripts dinamicamente, é importante garantir que os scripts gerados tenham acesso aos módulos ofuscados. Uma abordagem seria garantir que esses scripts dinâmicos também adicionem o caminho dos módulos ofuscados ao sys.path.

Aqui está um exemplo de como você pode fazer isso:

import sys
import os

# Adicione o caminho dos módulos ofuscados
sys.path.append(os.path.join(os.path.dirname(__file__), 'caminho/para/os/modulos'))

# Agora você pode importar os módulos
from modulos.Mod_T11_BackupAgendamento import T11ExecutaBackupAgend

E por fim, certifique-se de que todos os arquivos necessários estão no diretório correto e que os caminhos estão configurados adequadamente. A ofuscação de código pode adicionar uma camada de complexidade, então é importante testar cada etapa do processo.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Bom dia Armando.

Primeiramente obrigada pelo retorno.

Sobre o erro Check bootstrap restrict mode failed vou tentar ofuscar do modo que você indicou e retorno, mas pelo que entendi, parece que o pyarmor não abre mais de uma instância. Não sei se pode ser chamado de instancia mas seria alguma coisa semelhante pelo que entendi.

Referente ao erro de não encontrar o modulo, Os caminhos dos modulos estão corretos, os scripts estão ofuscados e os arquivos .dll e o .py que o pyarmor precisa estão normais no diretorio, tanto que a parte da interface grafica funciona normal e é o mesmo diretorio que o agendamento precisa buscar. Imagino que se fosse de fato alguma coisa no diretorio as outras rotinas não funcionariam mas o caso é que elas funcionam. O sys.path tambem está adicionado e os testes sem os scripts ofuscados funcionam normalmente.

A questão é que preciso rodar em outras maquinas windows e não posso expor o codigo fonte da aplicação, sabe.

Mas então, ontem eu pensei em mudar a logica de agendamento da minha aplicação porque não consegui resolver esse problema. Atualmente minha aplicação gera scripts dinamicos e o rocketry (lib que executa agendamentos) executa a rotina no dia e hora necessario. Mas agora, como a interface e o banco funcionam,pensei em ajustar o agendamento para buscar direto do banco sem scripts pyhton intermediarios, porque o que nao funciona na aplicação é somente a parte do agendamento. O acesso a interface e gravação no banco funcionam normalmente.

Como meu tempo está curto para resolver essa questão acredito que será necessario mudar essa parte da logica para que a aplicação não precise rodar scripts não ofuscados para acessar rotinas em scripts ofuscados.

Muito obrigada pela atenção e se essa segunda ideia funcionar eu retorno aqui e informo no forum.

Desde já super obrigada pelo seu apoio.

Rayra Mota

solução!

Boa tarde Armando. Retornei aqui porque achei importante finalizar o tema para uma futura necessidade.

Após muitas pesquisas em varias fontes de conhecimento, acabei descobrindo que a biblioteca do pyarmor não faz o que eu estava tentando fazer. Estava tentando fazer com que scripts python não ofuscados buscarem informações em scripts python ofuscados no momento da execução do agendamento da minha rotina.

Analisando junto com a comunidade, descobri que (até o presente momento em que escrevo isso) a lib pyarmor ainda não interage usando scripts ofuscados com scripts não ofuscados. Então tecnicamente eu não conseguiria realizar a ação que estava tentando devido a limitação da lib nesse quesito.

Então, para solução do meu problema, precisei ajustar a logica inteira do agendamento da minha aplicação para consumir as informações que eram obtidas pelos scripts externos para que agora obtenham diretamente do banco de dados. (Não fiz isso antes porque antes estava simulando o comportamento de uma ferramenta de orquestração que gera scripts separados - apache airflow ).

Depois desse ajuste, ofusquei novamente todos os scripts e a rotina que precisava funcionou corretamente, executando a tarefa que eu precisava no momento que eu precisava. Então presumo que o pyarmor de fato não consegue ainda fazer essa integração de scripts ofuscados e não ofuscados.

Espero que possa ajudar alguem que tenha esbarrado nessa mesma situação.

Grande abraço e obrigada mais uma vez pela tentativa de ajuda.