Categories > WeAreDevs > Hangout >
[RELEASE] Installer/Bootstrapper (UI, not console)
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'))
Added
Remember to install Tkinter before compiling to an executable!
pip install tk
OR
pip3 install tk
Cancel
Post
we are dead
Replied
Sir this is hangout
Cancel
Post
nltr | Wpf/C# & Cpp Developer | Former Fluxus Administrator------------------------------------------------------------------------------------💜 Developer of Kronos 💜
Replied
Nice. Keep up the great work.
Cancel
Post
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.
Cancel
Post
we are dead
Replied
Idk why write a console bootstrapper in python but here is some cookies for your effort 🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪
Cancel
Post
nltr | Wpf/C# & Cpp Developer | Former Fluxus Administrator------------------------------------------------------------------------------------💜 Developer of Kronos 💜
we are dead
Replied
I don't know why you'd code a bootstrapper in py when you could use c# for it but, nice release
Cancel
Post
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 = “”
Cancel
Post
we are dead
Replied
@ForbiddenDavid
Did you copy it into a Python file?
Cancel
Post
we are dead
Replied
@Spanksterria
Lol why did it hurt your eyes though
Cancel
Post
Added
@ForbiddenDavid
Did it work and not get flagged by Avast?
Cancel
Post
we are dead
Users viewing this thread:
( Members: 0, Guests: 1, Total: 1 )
Cancel
Post