Onde Hospedar meus scripts para download

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

Moderator: Gio

claudiosxj
Posts: 11
Joined: 08 Dec 2020, 12:41

Onde Hospedar meus scripts para download

03 Feb 2021, 15:16

Boa tarde!

Seguinte eu tenho um script que eu espalhei aqui no trampo, bastante pessoas usam, e eu fiz uma forma de atualização automática, essa é a minha função que faz a atualização do Script na maquina da pessoa.

Code: Select all

HmcAtt(){
	
	SplashTextOn, 200, 100, CERREGANDO - %versaoAtual%, Verificando Atualização! `n`n`n %versaoAtual% - Claudio Bocato
	WinMove, CERREGANDO - %versaoAtual%, ,,300
	
	URLDownloadToFile, http drive.google.com /uc?export=download&id=1xAQ0R5zo6lOOcpiGiCO8i0KlytDtl2jt,%A_Temp%/version_new.txt  Broken Link for safety
	if ErrorLevel{	
		MsgBox, 48, Download ERROR!! (version_new.txt), Erro ao baixar Arquivo essencial.`nUsando arquivos locais existentes
	}else{
		
		FileDelete,%A_Temp%/version.txt
		FileMove, %A_Temp%/version_new.txt, %A_Temp%/version.txt
		
		FileReadLine, version_data, %A_Temp%/version.txt, 3
		FileReadLine, version_data2, %A_Temp%/data.txt, 1
		
		if(version_data != version_data2 ){
			
			URLDownloadToFile, http drive.google.com /uc?export=download&id=1GPhqnDyPObx5MOyyRqdpGkDTgOtNR2LF,  Broken Link for safety %A_Temp%/data_new.txt
			if ErrorLevel{	
				MsgBox, 48, Download ERROR!! (data_new.txt), Erro ao baixar Arquivo essencial.`nUsando arquivos locais existentes
			}else{
				
				FileDelete,%A_Temp%/data.txt
				FileMove, %A_Temp%/data_new.txt, %A_Temp%/data.txt
				
			}
		}
		
		FileReadLine, version_servidores, %A_Temp%/version.txt, 4
		FileReadLine, version_servidores2, %A_Temp%/servidores.ini, 1
		
		if(version_servidores != version_servidores2){
			
			
			
			URLDownloadToFile, http drive.google.com /uc?export=download&id=1yAHtLyG0YA_Smk6mG1-ktYcb196gBklS,  Broken Link for safety %A_Temp%/servidores_new.ini
			if ErrorLevel{	
				MsgBox, 48, Download ERROR!! (servidores_new.ini), Erro ao baixar Arquivo essencial.`nUsando arquivos locais existentes
			}else{
				
				FileDelete,%A_Temp%/servidores.ini
				FileMove, %A_Temp%/servidores_new.ini, %A_Temp%/servidores.ini
				
			}
			
			
		}
	}
	
	FileReadLine, version, %A_Temp%/version.txt, 1
	FileReadLine, link_novoHMC, %A_Temp%/version.txt, 2
	
	
	
	
	
	
	
	if (version = versaoAtual || version = "<HTML>" ) { 
		FileDelete, version.txt
		FileDelete, %versaoAntiga%.exe

		
	} else {
		URLDownloadToFile, http drive.google.com /uc?export=download&id=%link_novoHMC%,  Broken Link for safety %A_ScriptDir%/%version%.exe
		
		LABEL=VEZES_ATUALIZADO
		CONTA(LABEL)
		
		msgbox,Existe uma nova versão! `n`nversão Nova: %version%
		FileDelete, version.txt
		MsgBox, 36, Continuar?, Deseja continuar usando esta versão antiga %versaoAtual% ?? 
		IfMsgBox Yes
			return
		else
			msgbox, Abrindo a nova versão %version%!!!
		Run,%version%.exe
		ExitApp
		return
	}
	
	SplashTextOff
}
Vou tentar explicar como ele funciona e depois vou expor minha duvida
:arrow: Toda vez que o script é iniciado ele baixa um txt que fica no google drive, a onde o link é fixo e eu consigo editar o conteúdo do arquivo sem ter que trocar o link ou upar uma novo arquivo.
:arrow: Depois que esse arquivo de controle é baixado ele compara a versão dos arquivos que estão na maquina: que são esses data.txt , servidores.ini e o próprio exe que é o script compilado, se tiver divergência ele faz o download automático através do link que ele pega no arquivo de controle
:arrow: Com o google drive é possível fazer o download direto com esse link, http drive.google.com /uc?export=download&id=(aqui Broken Link for safety vocô coloca o id do arquivo que quer baixar)

Meu problema:
:arrow: Quando eu compilo o exe com Mpress e unicode o drive identifica o arquivo como malicioso e não permite que meu scrip faça o download de forma automática com aquele esse link ( http drive.google.com /uc?export=download&id=) Broken Link for safety
:arrow: Gostaria de saber como ou onde colocar meus arquivos online e baixar de forma automática :?:

:rainbow: A atualização esta funcionando perfeitamente se eu não compilar o arquivo em Mpress e Unicode, mas estou querendo vender esse scrip e queria deixa-lo seguro, como não consegui fazer isso usando google drive preciso de uma outra plataforma para hospedar esses arquivos :rainbow:
User avatar
Gio
Posts: 1248
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Onde Hospedar meus scripts para download

04 Feb 2021, 09:46

Bom dia Claudiosxj.

Se você vai atuar a nível comercial, poderia pensar em estabelecer seu próprio servidor FTP (ou SFTP). Isso te daria muito mais controle do que usar esses serviços "gratuitos".

Tendo dito isto, se você quer mesmo continuar a usar o Google Drive para esta tarefa, devo dizer que esses serviços são realmente bem chatos não só com arquivos compactados pelo Mpress, mas também com arquivos .exe em geral (ainda que não comprimidos). Até pra mandar um email com arquivo .exe anexado pode ser difícil hoje em dia nos provedores de email "grátis".

O que recomendo: Você deve primeiro verificar se os termos de uso desses serviços pelo menos permitem o que você está querendo fazer. Se eles permitirem, então você pode pensar em criptografar o arquivo executável antes de enviar.

Funciona assim: você cria um script que criptografa o arquivo executável (ou seja, opera matematicamente os valores dos bytes do arquivo EXE) para poder fazer o upload normal dele no serviço escolhido (Google Drive ou seja qual for), e depois, no seu client, você coloca uma rotina de descriptografação desse arquivo (ou seja, o client vai operar matematicamente de maneira inversa os bytes do arquivo criptografado para recuperar o arquivo EXE).

Vou te dar um exemplo pra você entender: a rotina abaixo criptografa todos os bytes de um arquivo EXE adicionando 5 ao valor numérico deles (tomando o cuidado de não ultrapassar 255, que é o valor máximo para um byte, voltando a contagem a partir de 0 quando necessário) e salvando em um novo arquivo ".XYZ". Este é um algoritmo MUITO BÁSICO de criptografia conhecido como shift cipher, e não tem muito valor como segurança contra a obtenção do código binário original, mas deve servir para o seu caso, pois você não busca esconder o executável de uma pessoa, apenas evitar a subida de um arquivo EXE funcional diretamente ao servidor.

Code: Select all

SetBatchLines, -1
#SingleInstance, Force

; Primeiro, solicitamos privilégios administrativos ao usuário para o script. Estes privilégios podem ser necessários para escrever um novo arquivo com extensão EXE
if !(A_IsAdmin)
{
	Try
	{
		Run *RunAs "%A_ScriptFullPath%"  ; Requires v1.0.92.01+
	}
	Catch
	{
		msgbox, 0x10, Erro, O acesso de administrador é necessário para a execução do aplicativo.
	}
   ExitApp
}

CAMINHO_DO_EXE := ""
msgbox, 0x4, Aviso, Deseja ENCRIPTAR um arquivo EXE?
IfMsgBox, Yes
{
	FileSelectFile, CAMINHO_DO_EXE, , %A_ScriptDir%, Selecione um arquivo executável (.exe) para ENCRIPTAR, Arquivos EXE (*.exe)
	If (FileExist(CAMINHO_DO_EXE))
	{
		encriptar(CAMINHO_DO_EXE)
		msgbox, 0, aviso, rotina concluída !
	}
}
Return


encriptar(CAMINHO_DO_EXE)
{
	oFILE_EXE := FileOpen(CAMINHO_DO_EXE, "rw")
	
	VarSetCapacity(FILE_XYZ, oFILE_EXE.Length, 0)
	
	Loop % oFILE_EXE.Length
	{
		oFILE_EXE.RawRead(CURRENT_BYTE, 1)
		NumPut(MOD(ASC(CURRENT_BYTE) + 5, 256), FILE_XYZ, oFILE_EXE.Tell() - 1)
	}
	
	FileSelectFile, CAMINHO_DO_XYZ, S, , , Arquivo XYZ (*.XYZ)
	oFILE_XYZ := FileOpen(CAMINHO_DO_XYZ . ".xyz", "rw")
	oFILE_XYZ.RawWrite(FILE_XYZ, oFILE_EXE.Length)
}
Return

Já a rotina abaixo faz o contrário: ela opera matematicamente de maneira inversa, REMOVENDO 5 de cada byte do arquivo ".XYZ" para recuperar o arquivo EXE. Esta rotina seria a que você integraria ao client:

Code: Select all

SetBatchLines, -1
#SingleInstance, Force

; Primeiro, solicitamos privilégios administrativos ao usuário para o script. Estes privilégios podem ser necessários para escrever o arquivo EXE.
if !(A_IsAdmin)
{
	Try
	{
		Run *RunAs "%A_ScriptFullPath%"  ; Requires v1.0.92.01+
	}
	Catch
	{
		msgbox, 0x10, Erro, O acesso de administrador é necessário para a execução do aplicativo.
	}
   ExitApp
}


CAMINHO_DO_XYZ := ""
msgbox, 0x4, Aviso, Deseja DECRIPTAR um arquivo XYZ?
IfMsgBox, Yes
{
	FileSelectFile, CAMINHO_DO_XYZ, , %A_ScriptDir%, Selecione um arquivo XYZ para DECRIPTAR, Arquivos XYZ (*.XYZ)
	If (FileExist(CAMINHO_DO_XYZ))
	{
		decriptar(CAMINHO_DO_XYZ)
		msgbox, 0, aviso, rotina concluída !
	}
}

Return


decriptar(CAMINHO_DO_XYZ)
{
	oFILE_XYZ := FileOpen(CAMINHO_DO_XYZ, "rw")

	VarSetCapacity(FILE_EXE, oFILE_XYZ.Length, 0)
	
	Loop % oFILE_XYZ.Length
	{
		oFILE_XYZ.RawRead(CURRENT_BYTE, 1)
		If (ASC(CURRENT_BYTE) < 5)
		{
			NUMERO_PARA_USAR := (ASC(CURRENT_BYTE) + 251)
		}
		Else if (ASC(CURRENT_BYTE) = 5)
		{
			NUMERO_PARA_USAR := 0
		}
		else
		{
			NUMERO_PARA_USAR := ASC(CURRENT_BYTE) - 5
		}
		
		NumPut(NUMERO_PARA_USAR, FILE_EXE, oFILE_XYZ.Tell() - 1)
	}
	FileSelectFile, CAMINHO_DO_EXE, S, , , Arquivo EXE (*.EXE)
	oFILE_EXE := FileOpen(CAMINHO_DO_EXE . ".exe", "rw")
	oFILE_EXE.RawWrite(FILE_EXE, oFILE_XYZ.Length)
}
Return

O nível de acesso de administrador (cujo pedido já foi incluso no código) pode ser necessário neste caso. Mas você pode tentar sem ele, dependendo das configurações do computador onde estiver o client isso pode dar certo também.

Espero ter ajudado, se tiver alguma dúvida, basta postar abaixo.

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 13 guests