Categories > WeAreDevs > Hangout >

[RELEASE] Installer/Bootstrapper (UI, not console)

Alternate

stop take my rice

vip

Posts: 712

Threads: 113

Joined: Mar, 2022

Reputation: 40

Posted

Hi everyone,

 

I was bored so I made this simple Python installer using Tkinter which allows it to have a fully functional UI instead of console based system.

 

It allows you a user to select to download/install to the current directory (meaning, the directory as to which the Python file/exe file is located) or a custom directory specified by the user.

 

The UI isn't the best but for what it is it's good, it is very easy to set up but you will need to have Python 3.9 or later installed on whichever device you plan to set it up on.

 

You can compile it with PyInstaller (or cx_freeze, but I recommend PyInstaller as it's easier) and the full instructions on how to configure it and compile it are in the source code.

 

Now, and I know this defeats the purpose of learning off of it, but I did obfuscate the source code, though the obfuscation is easily deobfuscatable to anyone who knows what they're doing. The reason I obfuscated it was to protect the credits from being removed and it being skidded, but, to anyone looking for it I am able to create you a version without the credits at the bottom.

 

Additionally, if you like this and are interested, I can make you or your exploit a customized version that can be tailored to your exploits needs. Just DM me here or on Discord (Alternate#0690).

 

Anyways, here's the source code, enjoy!

 

(and yes, the entire installer is that simple and small)

 

*NOTE: Make sure to run 'pip install tk' or 'pip3 install tk' before compiling. This IS required or an error will occur!

"""
CONFIGURATION IS BELOW, YOU MAY REMOVE THIS ONCE COMPLETE
"""

APP_NAME = "test"
# App name which will be shown on the installer

URL = "zip file url here" 
# URL of your zip file download, you can use Discord as free hosting

"""
-- What is a dynamic download link? --
If you have a Pastebin or GitHub raw link, you can use that to store the link to the actual download link for the zip file, so that way it can be retrieved by the installer easily and will always be an updated link. Useful for if the Discord/Other link expires and it's needed to change without re-setting up the installer.

IF YOU WANT A DYNAMIC DOWNLOAD LINK, UNCOMMENT THESE THREE LINES BELOW! YOU MAY ALSO DELETE OR LEAVE EMPTY THE URL VARIABLE ABOVE!
"""
#import urllib.request
#URL_ = "dynamic download url here"
#URL = urllib.request.urlopen(URL_).read().decode()

FOLDER_NAME = "folder name here" 
# The name of the folder inside zip file (to detect if it already exists)

FONT = "Helvetica" # Leave alone unless you really don't like the font lol
# Text, button, and radios text font

"""
HOW TO COMPILE TO EXE

Once you've finished configuring this, make sure you have Python installed and run 'pip install pyinstaller'

Once PyInstaller has finished installing, cd into the same directory as this script and run:

pyinstaller --onefile --noconsole --hidden-import=tkinter --hidden-import=tkinter.filedialog --hidden-import=tkinter-messagebox --hidden-import=tkinter-font main.py

*NOTE: If that command doesn't work, you can also try 'python -m PyInstaller --onefile --noconsole --hidden-import=tkinter --hidden-import=tkinter.filedialog --hidden-import=tkinter-messagebox --hidden-import=tkinter-font main.py'

Replace main.py with whatever this script is called. Next, you will find a 'dist' folder in the same directory as this script after executing the command. If everything was successful, you should see an executable file within the 'dist' folder. That is your completed file!
"""


"""

-- !! PLEASE READ !! --

I've obfuscated the main code, this is so that people can't simply steal it and remove the credits from the UI.

If you know what you're doing, you can most likely easily deobfuscate this source, but unless you're looking to learn off of it or skid it I don't know why you would want to.

I'm available for making custom installers similar to this one, but without credits and with any specialized features to tailor to your programs need. Contact me with one of the two below options:

WRD: Alternate (DM me or reply to the release thread for this)
Discord: Alternate#0690

Thank you!
"""
import base64, codecs
magic = 'aW1wb3J0IG9zCmltcG9ydCB6aXBmaWxlCmltcG9ydCB0a2ludGVyIGFzIHRrCmltcG9ydCB1cmxsaWIucmVxdWVzdAppbXBvcnQgdGtpbnRlci5mb250IGFzIHRrRm9udApmcm9tIHRraW50ZXIgaW1wb3J0IGZpbGVkaWFsb2csIG1lc3NhZ2Vib3gKCnJvb3QgPSB0ay5UaygpCnJvb3QudGl0bGUoZiJ7QVBQX05BTUV9IEluc3RhbGxlciIpCndpZHRoPTYxNgpoZWlnaHQ9Mzc0CnJvb3QuZ2VvbWV0cnkoIjIwMHgyMDAiKQpzY3JlZW53aWR0aCA9IHJvb3Qud2luZm9fc2NyZWVud2lkdGgoKQpzY3JlZW5oZWlnaHQgPSByb290LndpbmZvX3NjcmVlbmhlaWdodCgpCmFsaWduc3RyID0gJyVkeCVkKyVkKyVkJyAlICh3aWR0aCwgaGVpZ2h0LCAoc2NyZWVud2lkdGggLSB3aWR0aCkgLyAyLCAoc2NyZWVuaGVpZ2h0IC0gaGVpZ2h0KSAvIDIpCnJvb3QuZ2VvbWV0cnkoYWxpZ25zdHIpCnJvb3QucmVzaXphYmxlKHdpZHRoPUZhbHNlLCBoZWlnaHQ9RmFsc2UpCnJhZGlvX3ZhciA9IHRrLkludFZhcigpCnJhZGlvX3Zhci5zZXQoMCkKcGF0aCA9ICIiCmluc3RhbGxlZCA9IEZhbHNlCgpkZWYgQnJvd3NlQnV0dG9uX2NvbW1hbmQoKToKICBnbG9iYWwgcGF0aAogIGRpcmVjdG9yeSA9IGZpbGVkaWFsb2cuYXNrZGlyZWN0b3J5KCkKICBwYXRoID0gZiJ7ZGlyZWN0b3J5fS8iCiAgQ3VzdG9tRGlySW5wdXQuZGVsZXRlKDAsIHRrLkVORCkKICBDdXN0b21EaXJJbnB1dC5pbnNlcnQoMCwgZGlyZWN0b3J5KQoKZGVmIEluc3RhbGxCdXR0b25fY29tbWFuZCgpOgogIGdsb2JhbCBwYXRoCiAgZ2xvYmFsIGluc3RhbGxlZAogIGdsb2JhbCBVUkwKICBnbG9iYWwgQVBQX05BTUUKICBnbG9iYWwgRk9MREVSX05BTUUKICBJbnN0YWxsQnV0dG9uLmNvbmZpZyhzdGF0ZT0iZGlzYWJsZWQiKQogIEN1c3RvbURpclJhZGlvLmNvbmZpZyhzdGF0ZT0iZGlzYWJsZWQiKQogIEN1cnJlbnREaXJSYWRpby5jb25maWcoc3RhdGU9ImRpc2FibGVkIikKICBpZiBpbnN0YWxsZWQgPT0gRmFsc2U6CiAgICB0cnk6CiAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGYie3BhdGh9e0ZPTERFUl9OQU1FfSIpOgogICAgICAgIFN0YXR1c0xhYmVsLmNvbmZpZyh0ZXh0PSJXYWl0aW5nIGZvciB1c2VyIGlucHV0Li4uIikKICAgICAgICBvcHRpb24gPSBtZXNzY'
love = 'JqyLz94YzSmn3yyp25iXPWOoUWyLJE5VTyhp3EuoTkyMPVfVTLvr0SDHS9BDH1SsFOgLKxtLJklMJSxrFOvMFOcoaA0LJkfMJDhVREiVUyiqFO3LJ50VUEiVUWynJ5mqTSfoQ8vXDbtVPNtVPNtVTyzVT5iqPOipUEco246PvNtVPNtVPNtVPOGqTS0qKAZLJWyoP5wo25znJpbqTI4qQ0vFJ5mqTSfoPOwLJ5wMJkfMJDhVvxXVPNtVPNtVPNtVRyhp3EuoTkPqKE0o24hL29hMzyaXUA0LKEyCFWho3WgLJjvXDbtVPNtVPNtVPNtD3ImqT9gETylHzSxnJ8hL29hMzyaXUA0LKEyCFWho3WgLJjvXDbtVPNtVPNtVPNtD3IlpzIhqREcpyWuMTyiYzAiozMcMlumqTS0MG0voz9loJSfVvxXVPNtVPNtVPNtVUWyqUIlotbtVPNtVPOGqTS0qKAZLJWyoP5wo25znJpbqTI4qQ0vET93ozkiLJEcozptMzyfMKZhYv4vXDbtVPNtVPO1pzkfnJVhpzIkqJImqP51pzklMKElnJI2MFuIHxjfVTLvr3OuqTu9nJ5mqTSfoTIxMzyfMF56nKNvXDbtVPNtVPOGqTS0qKAZLJWyoP5wo25znJpbqTI4qQ0vIJ56nKOjnJ5aVTMcoTImYv4hVvxXVPNtVPNtrzyjMzyfMF5nnKOTnJkyXTLar3OuqTu9nJ5mqTSfoTIxMzyfMF56nKNaYPNapvpcYzI4qUWuL3EuoTjbMvq7pTS0nU0aXDbtVPNtVPOGqTS0qKAZLJWyoP5wo25znJpbqTI4qQ0vD2kyLJ5cozptqKNhYv4vXDbtVPNtVPOipl5lMJ1iqzHbMvW7pTS0nU1coaA0LJkfMJEznJkyYaccpPVcPvNtVPNtVSA0LKE1p0kuLzIfYzAiozMcMlu0MKu0CFWWoaA0LJkfMJDhVvxXVPNtVPNtFJ5mqTSfoRW1qUEiov5wo25znJpbp3EuqTH9Vz5ipz1uoPVfVUEyrUD9VxI4nKDvXDbtVPNtVPOcoaA0LJkfMJDtCFOHpaIyPvNtVPNtVT1yp3AuM2Ivo3thp2uiq2yhMz8bVyA1L2Ayp3AzqJkfrFOcoaA0LJkfMJDvYPNvITuyVUOlo2qlLJ0tq2SmVUA1L2Ayp3AzqJkfrFOcoaA0LJkfMJDhVvxXVPNtVTI4L2IjqPOSrTAypUEco24tLKZtMKWlo3V6PvNtVPNtVSA0LKE1p0kuLzIfYzAiozMcMlu0MKu0CFWQo3IfMPOho3DtnJ5mqTSfoQbtDJ4tqJ5eoz93ovOypaWipvOiL2A1paWyMP4vXDbtVPNtVPOgMKAmLJqyLz94YaAbo3qypaWipvtvDJ4tqJ5yrUOyL3EyMPOypaWipvOiL2A1paWyMPVfVPWOovO1ozI4pTIwqTIxVTIlpz9lVT9wL3IlpzIxVTShMPO0nTHtnJ5mqTSfoPOzLJyfMJDhVvxXVPNtVPNtFJ5mqTSfoR'
god = 'J1dHRvbi5jb25maWcoc3RhdGU9Im5vcm1hbCIpCiAgICAgIEN1c3RvbURpclJhZGlvLmNvbmZpZyhzdGF0ZT0ibm9ybWFsIikKICAgICAgQ3VycmVudERpclJhZGlvLmNvbmZpZyhzdGF0ZT0ibm9ybWFsIikKICBlbHNlOgogICAgcm9vdC5kZXN0cm95KCkKICAKZGVmIHRvZ2dsZSgpOgogICAgaWYgcmFkaW9fdmFyLmdldCgpID09IDE6CiAgICAgICAgQnJvd3NlQnV0dG9uLmNvbmZpZyhzdGF0ZT0iZGlzYWJsZWQiKQogICAgICAgIEN1c3RvbURpcklucHV0LmNvbmZpZyhzdGF0ZT0iZGlzYWJsZWQiKQogICAgZWxzZToKICAgICAgICBCcm93c2VCdXR0b24uY29uZmlnKHN0YXRlPSJub3JtYWwiKQogICAgICAgIEN1c3RvbURpcklucHV0LmNvbmZpZyhzdGF0ZT0ibm9ybWFsIikKCmFwcExhYmVsPXRrLkxhYmVsKHJvb3QsIGFuY2hvcj0iY2VudGVyIiwgZm9udD10a0ZvbnQuRm9udChmYW1pbHk9Rk9OVCwgc2l6ZT0xOCksIHRleHQ9ZiJXZWxjb21lIHRvIHRoZSB7QVBQX05BTUV9IGluc3RhbGxlciEiKQphcHBMYWJlbC5wbGFjZSh4PTMyMCwgeT00MCwgd2lkdGg9NTQ4LCBoZWlnaHQ9NTYsIGFuY2hvcj10ay5DRU5URVIpCmNyZWRpdExhYmVsPXRrLkxhYmVsKHJvb3QsIGZvbnQ9dGtGb250LkZvbnQoZmFtaWx5PUZPTlQsIHNpemU9MTApLCB0ZXh0PSJNYWRlIGJ5IEFsdGVybmF0ZSBvbiBmb3J1bS53ZWFyZWRldnMubmV0IikKY3JlZGl0TGFiZWwucGxhY2UoeD0yOTAsIHk9MzUwLCBhbmNob3I9dGsuQ0VOVEVSKQpjb25maWdMYWJlbD10ay5MYWJlbChyb290LCBmb250PXRrRm9udC5Gb250KGZhbWlseT1GT05ULCBzaXplPTEwKSwgdGV4dD0iUGxlYXNlIHNlbGVjdCB5b3VyIGluc3RhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVuIHByZXNzIHRoZSAnSW5zdGFsbCcgYnV0dG9uLiIpCmNvbmZpZ0xhYmVsLnBsYWNlKHg9MzIwLCB5PTcwLGFuY2hvcj10ay5DRU5URVIpCmluc3RhbGxMYWJlbD10ay5MYWJlbChyb290LCBmb250PXRrRm9udC5Gb250KGZhbWlseT1GT05ULCBzaXplPTEwKSwgdGV4dD0iSW5zdGFsbGF0aW9uIFBhdGg6IikKaW5zdGFsbExhYmVsLnBsYWNlKHg9MzAwLCB5PTEyMCwgYW5jaG9yPXRrLkNFTlRFUikKQ3VzdG9tRGlyUmFkaW89dGsuUmFkaW9idXR0b24ocm9vdCwgZm9'
destiny = 'hqQ10n0MioaDhEz9hqPuzLJ1coUx9Ex9BIPjtp2y6MG0kZPxfVUEyrUD9VxA1p3EioFOxnKWyL3EipaxvYPO2LKWcLJWfMG1lLJEco192LKVfVUMuoUIyCGVfVTAioJ1uozD9qT9aM2kyXDcQqKA0o21RnKWFLJEcol5joTSwMFu4CGZjZPjtrG0kAmNfVTShL2uipw10nl5QEH5HEIVcPxA1paWyoaERnKWFLJEcom10nl5FLJEco2W1qUEiovulo290YPOzo250CKEeEz9hqP5To250XTMuoJyfrG1TG05HYPOmnKcyCGRjXFjtqTI4qQ0vFJ5mqTSfoPOcovOwqKWlMJ50VTEcpzIwqT9lrFNbpzIwo21gMJ5xMJDcVvjtqzSlnJSvoTH9pzSxnJ9sqzSlYPO2LJk1MG0kYPOwo21gLJ5xCKEiM2qfMFxXD3IlpzIhqREcpyWuMTyiYaOfLJAyXUt9ZmNjYPO5CGR1ZPjtLJ5wnT9lCKEeYxASGyESHvxXD3ImqT9gETylFJ5jqKD9qTfhEJ50paxbpz9iqPjtMz9hqQ10n0MioaDhEz9hqPuzLJ1coUx9Ex9BIPjtp2y6MG0kZPxfVTWipzEypaqcMUEbCFVkpUtvYPO0MKu0CFWQqKA0o20tETylMJA0o3W5VSOuqTtvYPOmqTS0MG0vMTymLJWfMJDvXDcQqKA0o21RnKWWoaO1qP5joTSwMFu4CGV3ZPjtrG0lZQNfVTShL2uipw10nl5QEH5HEIVcPxWlo3qmMHW1qUEiow10nl5PqKE0o24bpz9iqPjtLzp9VvAyMzIzMJLvYPOzo250CKEeEz9hqP5To250XTMuoJyfrG1TG05HYPOmnKcyCGRjXFjtqTI4qQ0vDaWiq3AyVvjtL29goJShMQ1Ppz93p2IPqKE0o25sL29goJShMPjtp3EuqTH9VzEcp2SvoTIxVvxXDaWiq3AyDaI0qT9hYaOfLJAyXUt9AQRjYPO5CGVjZPjtLJ5wnT9lCKEeYxASGyESHvxXFJ5mqTSfoRW1qUEiow10nl5PqKE0o24bpz9iqPjtLzp9VvAyMzIzMJLvYPOzo250CKEeEz9hqP5To250XTMuoJyfrG1TG05HYPOmnKcyCGRjXFjtqTI4qQ0vFJ5mqTSfoPVfVTAioJ1uozD9FJ5mqTSfoRW1qUEioy9wo21gLJ5xXDcWoaA0LJkfDaI0qT9hYaOfLJAyXUt9Zwx1YPO5CGZkZPjtLJ5wnT9lCKEeYxASGyESHvxXH3EuqUImGTSvMJj9qTfhGTSvMJjbpz9iqPjtMz9hqQ10n0MioaDhEz9hqPuzLJ1coUx9Ex9BIPjtp2y6MG0kZvxfVUEyrUD9Vxyhp3EuoTjtH3EuqUImVvxXH3EuqUImGTSvMJjhpTkuL2HbrQ0lBGHfVUx9ZwpjYPOuozAbo3V9qTfhD0IBIRIFXDbXD3IlpzIhqREcpyWuMTyiYaAyoTIwqPtcPaWio3DhoJScozkio3NbXD=='
joy = '\x72\x6f\x74\x31\x33'
trust = eval('\x6d\x61\x67\x69\x63') + eval('\x63\x6f\x64\x65\x63\x73\x2e\x64\x65\x63\x6f\x64\x65\x28\x6c\x6f\x76\x65\x2c\x20\x6a\x6f\x79\x29') + eval('\x67\x6f\x64') + eval('\x63\x6f\x64\x65\x63\x73\x2e\x64\x65\x63\x6f\x64\x65\x28\x64\x65\x73\x74\x69\x6e\x79\x2c\x20\x6a\x6f\x79\x29')
eval(compile(base64.b64decode(eval('\x74\x72\x75\x73\x74')),'<string>','exec'))
  • 0

Added

Remember to install Tkinter before compiling to an executable!

pip install tk

OR

pip3 install tk

  • 0

we are dead

Posts: 533

Threads: 41

Joined: May, 2020

Reputation: 4

Replied

Sir this is hangout

  • 0

nltr | Xaml & C# Developer Former Fluxus Administrator
------------------------------------------------------------------------------------
💜 Developer of Kronos 💜

Senior Dev of Orbit

Discord

Method

Contributor

Posts: 116

Threads: 12

Joined: Mar, 2023

Reputation: 5

Replied

Nice. Keep up the great work.

  • 0

Alternate

stop take my rice

vip

Posts: 712

Threads: 113

Joined: Mar, 2022

Reputation: 40

Replied

@intristic_roast

I see your point, though it would be much worse for me to leave it unobfuscated. With obfuscation, unless you deobfuscate it there's no way to remove the credits referring to me, meaning it is much harder to "skid" as referring to blatantly stealing code without crediting the owner.

 

Additionally, I will more than happily share the full unobfuscated source with anyone and everyone I know will actually use it to learn and won't skid it. But I'm still learning Tkinter too, so I'm sure there are other better sources to learn off.

  • 0

Added

@ItsNitro

Sorry Python category doesn't get much love :(

  • 0

we are dead

Posts: 533

Threads: 41

Joined: May, 2020

Reputation: 4

Replied

Idk why write a console bootstrapper in python but here is some cookies for your effort 🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪

  • 0

nltr | Xaml & C# Developer Former Fluxus Administrator
------------------------------------------------------------------------------------
💜 Developer of Kronos 💜

Senior Dev of Orbit

Discord

Alternate

stop take my rice

vip

Posts: 712

Threads: 113

Joined: Mar, 2022

Reputation: 40

Replied

@ItsNitro

Thank you but it's not a console bootstrapper, it has an actual UI.

  • 0

we are dead

Posts: 1316

Threads: 54

Joined: Jul, 2021

Reputation: 64

Replied

I don't know why you'd code a bootstrapper in py when you could use c# for it but, nice release

  • 0

Mail me at sirweebdev@protonmail.com if you have any questions or you want to say anything to me, I'll reply (maybe).

Alternate

stop take my rice

vip

Posts: 712

Threads: 113

Joined: Mar, 2022

Reputation: 40

Replied

@Spanksterria

Stop feeding skids :anger:

 

What AV are you using? I ran a compiled version through VirusTotal and the only anti-virus that flagged it was Avast lmao

 

Also I just realized the most useless two lines of code I forgot to take out

if path == “”:
    path = “”
  • 0

we are dead

Posts: 0

Threads: 0

Joined: ?

Reputation:

Replied

@Alternate,
funny thing i use avast and bitdefender

  • 0

Alternate

stop take my rice

vip

Posts: 712

Threads: 113

Joined: Mar, 2022

Reputation: 40

Replied

@ForbiddenDavid

Did you copy it into a Python file?

  • 0

we are dead

Posts: 0

Threads: 0

Joined: ?

Reputation:

Replied

@Alternate,
yes then i used pyinstaller

  • 0

Alternate

stop take my rice

vip

Posts: 712

Threads: 113

Joined: Mar, 2022

Reputation: 40

Replied

@Spanksterria

Lol why did it hurt your eyes though

  • 0

Added

@ForbiddenDavid

Did it work and not get flagged by Avast?

  • 0

we are dead

Next >>>

Users viewing this thread:

( Members: 0, Guests: 1, Total: 1 )