v1.6.1 - Thieves Build

Main Kit
* Added SecureBoot check to system checklists
* Expanded System Checklist
  * Added SecureBoot check
  * Enables RegBack
  * Enables SystemRestore
  * Windows 10 Explorer configuration
  * Unmutes audio before launching XMPlay
* New System Checklist (HW)
  * Reduced version of the System Checklist for HW check-ins
  * Enables RegBack & SystemRestore
  * System information backups
  * System summary
  * No other changes are made (i.e. Cortana, ClassicStart, etc)
* New WiFi Stability Test
* New uBlock Origin installation method for Firefox
  * It is installed via the registry, similar to Google Chrome
  * It is now installed for existing profiles
* Expanded post-d7II cleanup
* Improved ESET installation script
  * Should result in a fully 1201-configured installation
* Updated tools
  * Added Macs Fan Control
  * Added Furmark
  * Added O&O ShutUP10 (includes minimal preset to disable telemetry)
  * Added WinAIO presets
  * Replaced TreeSizeFree with WizTree
  * Updated Python to 3.7
* Disabled Caffeine (see GitHub issues #64 & #65)
* Removed Adobe Reader from Install SW Bundle
* Removed Visual C++ 2008 runtimes
* WizardKit crashes are now uploaded to 1201's Nextcloud server
* Fixed Gogs issues #4, #5, #7, #8, #10, #13, #14, #17, #18, & #21
* Fixed GitHub issues #51, #56, & #60
* Various other minor bug fixes

Linux
* Added osTicket integration
  * Enter the ticket ID and verify against the customer name
  * Prime95 CPU tests are posted along with the final temps
    * The temperature box is not filled out due to sensor variability
  * Drive results are posted for each drive tested
    * NVMe/SMART values
    * SMART built-in short-test (if available)
    * badblocks surface scan
    * I/O Benchmarks (including a PNG render of the graph)
    * Used space information for all volumes (only if all tests pass)
    * The pass/fail box is checked as appropriate
  * osTicket integration can be disabled per session if desired
* Added AMD CPU microcode and updated Intel CPU microcode
  * Includes current Meltdown/Spectre mitigations
* Added ddrescue-tui, a wrapper for ddrescue
  * Can be used to perform device-to-device and device-to-image clones
  * Can perform all three passes automatically (if certain thresholds are met)
  * Helps enforce safe usage of ddrescue to reduce drive stress
  * Shows SMART data while running (updates every 5 minutes)
  * Shows SystemD journal while running
  * NOTE: Please read the manual before adjusting advanced settings
* Improved network support for some Broadcom network devices
* Improved I/O Benchmark test in HW-Diags
  * Checks if the device is a SSD and uses the higher thresholds if so
  * Shows current read speed with graph while running
    * Speeds under 65 Mb/s are red
    * Speeds under 135 Mb/s are yellow
    * Speeds above 750 Mb/s are green
  * Shows graph along with AVG (MIN, MAX) in summary report
  * Only reads a portion of the drive, spread out evenly, to speedup the test
    * (It reads either 10 Gb or 1% of the drive, whichever is larger)
* Added SMART attribute 199/C7 as an important value in HW-Diags
  * If present and non-zero it prompts for an override to continue testing
    * This includes the question "Have you tried swapping the drive cable?"
* The hostname is now set using the current IP and a reverse DNS lookup
  * Useful for test-stations with static DHCP leases and DNS entries
* Added option to resume previous hw-diags `tmux` session
  * This allows you to more easily "move" the session to/from a SSH session
* Added a VNC server which runs at startup (unless booting CLI/nox)
* mount-all-volumes now supports non-encrypted CoreStorage volumes
* Added _limited_ support for HiDPI devices
* Fixed WizardKit UFD detection
  * The should be auto-excluded from HW-Diags again
* Restored missing photorec-sort script
* Removed HDT from legacy boot menu (see GitHub issue #57)
* Fixed issue where the IP address was not shown in Conky
* Fixed Gogs issues #1, #2, #3, #8, #9, #12, #15, #19, #20, & #22
* Fixed GitHub issues #39, #41, #43, #44, #45, #46, #47, #48, #49, #50, #52, #53, #54, #55, & #61
* Various other minor bug fixes

WinPE
* Updated Python to 3.7

Misc
* HDT has been disabled due to an upstream bug
This commit is contained in:
2Shirt 2018-10-10 18:43:38 -06:00
commit 31b029c828
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C
304 changed files with 16940 additions and 1110 deletions

36
.bin/1201_Root_CA.crt Normal file
View file

@ -0,0 +1,36 @@
-----BEGIN CERTIFICATE-----
MIIGTzCCBDegAwIBAgIBfDANBgkqhkiG9w0BAQsFADCBsDELMAkGA1UEBhMCVVMx
DzANBgNVBAgTBk9yZWdvbjERMA8GA1UEBxMIUG9ydGxhbmQxHTAbBgNVBAoTFDEy
MDEgQ29tcHV0ZXIgUmVwYWlyMSMwIQYDVQQLExoxMjAxIENlcnRpZmljYXRlIEF1
dGhvcml0eTEVMBMGA1UEAxMMMTIwMSBSb290IENBMSIwIAYJKoZIhvcNAQkBFhNt
YW5hZ2VtZW50QDEyMDEuY29tMB4XDTE4MDgyMDA2MDEwMFoXDTM4MDgyMDA2MDEw
MFowgbAxCzAJBgNVBAYTAlVTMQ8wDQYDVQQIEwZPcmVnb24xETAPBgNVBAcTCFBv
cnRsYW5kMR0wGwYDVQQKExQxMjAxIENvbXB1dGVyIFJlcGFpcjEjMCEGA1UECxMa
MTIwMSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFTATBgNVBAMTDDEyMDEgUm9vdCBD
QTEiMCAGCSqGSIb3DQEJARYTbWFuYWdlbWVudEAxMjAxLmNvbTCCAiIwDQYJKoZI
hvcNAQEBBQADggIPADCCAgoCggIBANGYohJk5/CC/p14R7EpnhdEUF7Wvlnt8yuF
dtuyStlIGkLxPMlj9hQfoLDplQqlKBefTaI3WwrI/Hndso+jStLKgtRWRdyNB34K
AWqT04zXYGicdi3fqaMhEC4SPyX1tRXU2e9kjtIJ21AZx2F40NUjfOMKLVymZgXm
gkG1oA/BSzE8vIidrd/lJPwo0u+EYFa87y+9SHS93Ze1AVoTVqUzSMkjqt+6YIzJ
4XBD7UBvps0Mnd18HMUlXHFXusUL1K921W3wDVcMlNIIA8MJjQk+aVS/1EGSn+81
C+r40x64lYkyh0ZUAHkVXUC/BUfa0SKx1Nfa4mSvtyPnUCb7Dir8MkTDKgopGCok
KmW+VvE2H8AEPCbcctFmhdip19laYxzyDhZ5wiQN6AOg64cWvDf6/uT9hyPvxkj1
ps5vWElryzawTE7h1BI8liMqwsG1Y7cc6D0PABxPsp4iR8pde0oZtpLnEvejRodo
zz3BGvZjq+pHtRMjL+yiDtdAL+K+7/e7gNCQBIGsphahWIOf7TczWVgMNclTNxl3
WZjKkOEs7j+prRTDvffV6H32+Tk5TwgMsfvnY4a37CkJ0L0d1JhWj9wO+gESfg3W
8yvt3hfcj3NOUMJWhJstqlIeX8dj7vVcMhjNvYJxabJmJgk+DNlHe55fXDGJ1CLO
E0EbRTyBAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFM+hXjFx
6BldZFBQW1Pn/Yp3vbw+MAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcw
HgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOC
AgEALWcnu3auMSnSSF/kOiLvJ4RAnHZebGYNcUWM14u1K1/XtTB7AFzQIHX7BcDH
m/z4UEyhl9EdR5Bgf2Szuk+8+LyGqcdAdbPoK+bmcwwL8lufDnlIYBThKIBfU2Xw
vw41972B+HH5r1TZXve1EdJaLyImbxmq5s41oH7djGC+sowtyGuVqP7RBguXBGiJ
At1yfdPWVaxLmE8QFknkIvpgTmELpxasTfvgnQBenA3Ts0Z2hwN4796hLbRzGsb8
4hKWAfQDP0klzXKRRyVeAueXxj/FcNZilYxv15MqMc4qrUiW0hXHluQM1yceNjNZ
SE4Igi1Ap71L4PpgkHIDfZD908UexGGkql+p4EWrpnXUYWTa0sHg1bFKQntgpyFg
86Ug0Q7ZNhImENzeigZknL0ceIdaNUCs7UPrkqpUSJR2yujp1JC3tX1LgKZw8B3J
fQx/8h3zzNuz5dVtr1wUJaUD0nGhMIRBEXb2t4jupEISSTN1pkHPcbNzhAQXjVUA
CJxnnz3jmyGsNCoQf7NWfaN6RSRTWehsC6m7JvPvoU2EZoQkSlNOv4xZuFpEx0u7
MFDtC1cSGPH7YwYXPVc45xAMC6Ni8mvq93oT89XZNHIqE8/T8aPHLwYFgu1b1r/A
L8oMEnG5s8tG3n0DcFoOYsaIzVeP0r7B7e3zKui6DQLuu9E=
-----END CERTIFICATE-----

View file

@ -150,7 +150,6 @@ goto Exit
:LaunchOffice :LaunchOffice
call "%bin%\Scripts\init_client_dir.cmd" /Office call "%bin%\Scripts\init_client_dir.cmd" /Office
set "_odt=False" set "_odt=False"
if %L_PATH% equ 2013 (set "_odt=True")
if %L_PATH% equ 2016 (set "_odt=True") if %L_PATH% equ 2016 (set "_odt=True")
if "%_odt%" == "True" ( if "%_odt%" == "True" (
goto LaunchOfficeODT goto LaunchOfficeODT
@ -280,9 +279,9 @@ rem Create VB script
mkdir "%bin%\tmp" 2>nul mkdir "%bin%\tmp" 2>nul
echo Set UAC = CreateObject^("Shell.Application"^) > "%bin%\tmp\Elevate.vbs" echo Set UAC = CreateObject^("Shell.Application"^) > "%bin%\tmp\Elevate.vbs"
if defined L_NCMD ( if defined L_NCMD (
echo UAC.ShellExecute "%PYTHON%", """%script%""", "", "runas", 3 >> "%bin%\tmp\Elevate.vbs" echo UAC.ShellExecute "%PYTHON%", """%script%"" %L_ARGS%", "", "runas", 3 >> "%bin%\tmp\Elevate.vbs"
) else ( ) else (
echo UAC.ShellExecute "%CON%", "-run ""%PYTHON%"" ""%script%"" -new_console:n", "", "runas", 1 >> "%bin%\tmp\Elevate.vbs" echo UAC.ShellExecute "%CON%", "-run ""%PYTHON%"" ""%script%"" %L_ARGS% -new_console:n", "", "runas", 1 >> "%bin%\tmp\Elevate.vbs"
) )
rem Run rem Run
@ -291,9 +290,9 @@ goto Exit
:LaunchPyScriptUser :LaunchPyScriptUser
if defined L_NCMD ( if defined L_NCMD (
start "" "%PYTHON%" "%script%" || goto ErrorUnknown start "" "%PYTHON%" "%script%" %L_ARGS% || goto ErrorUnknown
) else ( ) else (
start "" "%CON%" -run "%PYTHON%" "%script%" -new_console:n || goto ErrorUnknown start "" "%CON%" -run "%PYTHON%" "%script%" %L_ARGS% -new_console:n || goto ErrorUnknown
) )
goto Exit goto Exit
@ -333,7 +332,7 @@ echo. Executable Working Dir Program Args [L_7ZIP] [L_ELEV] [L__CLI]
echo. Folder Folder '.' [L_7ZIP] echo. Folder Folder '.' [L_7ZIP]
echo. Office Year Product [L_7ZIP] echo. Office Year Product [L_7ZIP]
echo. PSScript Scripts Script [L_7ZIP] [L_ELEV] [L_NCMD] echo. PSScript Scripts Script [L_7ZIP] [L_ELEV] [L_NCMD]
echo. PyScript Scripts Script [L_7ZIP] [L_ELEV] [L_NCMD] echo. PyScript Scripts Script Args [L_7ZIP] [L_ELEV] [L_NCMD]
echo. QuickBooks Year Product [L_7ZIP] echo. QuickBooks Year Product [L_7ZIP]
echo. echo.
echo.L_7ZIP: Extra arguments for 7-Zip (in the :ExtractCBin label) echo.L_7ZIP: Extra arguments for 7-Zip (in the :ExtractCBin label)
@ -493,4 +492,4 @@ goto Exit
:Exit :Exit
popd popd
endlocal endlocal
exit /b %errorlevel% exit /b %errorlevel%

View file

@ -17,7 +17,7 @@ call :SetTitle Launcher
rem EXTRA_CODE rem EXTRA_CODE
:DefineLaunch :DefineLaunch
:: See %bin%\SCripts\Launch.cmd for details under :Usage label :: See %bin%\Scripts\Launch.cmd for details under :Usage label
set L_TYPE= set L_TYPE=
set L_PATH= set L_PATH=
set L_ITEM= set L_ITEM=
@ -110,4 +110,4 @@ goto Exit
:: Cleanup and exit :: :: Cleanup and exit ::
:Exit :Exit
endlocal endlocal
exit /b %errorlevel% exit /b %errorlevel%

View file

@ -39,7 +39,7 @@ if __name__ == '__main__':
selection = menu_select( selection = menu_select(
'{}: Windows Activation Menu'.format(KIT_NAME_FULL), '{}: Windows Activation Menu'.format(KIT_NAME_FULL),
main_entries=activation_methods, action_entries=actions) main_entries=activation_methods, action_entries=actions)
if (selection.isnumeric()): if (selection.isnumeric()):
result = try_and_print( result = try_and_print(
message = activation_methods[int(selection)-1]['Name'], message = activation_methods[int(selection)-1]['Name'],

View file

@ -35,7 +35,7 @@ class feature(Structure):
_fields_ = [("name", c_char_p), _fields_ = [("name", c_char_p),
("number", c_int), ("number", c_int),
("type", c_int)] ("type", c_int)]
# sensors_feature_type # sensors_feature_type
IN = 0x00 IN = 0x00
FAN = 0x01 FAN = 0x01
@ -71,10 +71,10 @@ COMPUTE_MAPPING = 4
def init(cfg_file = None): def init(cfg_file = None):
file = _libc.fopen(cfg_file.encode("utf-8"), "r") if cfg_file is not None else None file = _libc.fopen(cfg_file.encode("utf-8"), "r") if cfg_file is not None else None
if _hdl.sensors_init(file) != 0: if _hdl.sensors_init(file) != 0:
raise Exception("sensors_init failed") raise Exception("sensors_init failed")
if file is not None: if file is not None:
_libc.fclose(file) _libc.fclose(file)
@ -84,10 +84,10 @@ def cleanup():
def parse_chip_name(orig_name): def parse_chip_name(orig_name):
ret = chip_name() ret = chip_name()
err= _hdl.sensors_parse_chip_name(orig_name.encode("utf-8"), byref(ret)) err= _hdl.sensors_parse_chip_name(orig_name.encode("utf-8"), byref(ret))
if err < 0: if err < 0:
raise Exception(strerror(err)) raise Exception(strerror(err))
return ret return ret
def strerror(errnum): def strerror(errnum):
@ -101,10 +101,10 @@ def get_detected_chips(match, nr):
@return: (chip, next nr to query) @return: (chip, next nr to query)
""" """
_nr = c_int(nr) _nr = c_int(nr)
if match is not None: if match is not None:
match = byref(match) match = byref(match)
chip = _hdl.sensors_get_detected_chips(match, byref(_nr)) chip = _hdl.sensors_get_detected_chips(match, byref(_nr))
chip = chip.contents if bool(chip) else None chip = chip.contents if bool(chip) else None
return chip, _nr.value return chip, _nr.value
@ -115,10 +115,10 @@ def chip_snprintf_name(chip, buffer_size=200):
""" """
ret = create_string_buffer(buffer_size) ret = create_string_buffer(buffer_size)
err = _hdl.sensors_snprintf_chip_name(ret, buffer_size, byref(chip)) err = _hdl.sensors_snprintf_chip_name(ret, buffer_size, byref(chip))
if err < 0: if err < 0:
raise Exception(strerror(err)) raise Exception(strerror(err))
return ret.value.decode("utf-8") return ret.value.decode("utf-8")
def do_chip_sets(chip): def do_chip_sets(chip):
@ -128,7 +128,7 @@ def do_chip_sets(chip):
err = _hdl.sensors_do_chip_sets(byref(chip)) err = _hdl.sensors_do_chip_sets(byref(chip))
if err < 0: if err < 0:
raise Exception(strerror(err)) raise Exception(strerror(err))
def get_adapter_name(bus): def get_adapter_name(bus):
return _hdl.sensors_get_adapter_name(byref(bus)).decode("utf-8") return _hdl.sensors_get_adapter_name(byref(bus)).decode("utf-8")
@ -177,60 +177,60 @@ class ChipIterator:
def __init__(self, match = None): def __init__(self, match = None):
self.match = parse_chip_name(match) if match is not None else None self.match = parse_chip_name(match) if match is not None else None
self.nr = 0 self.nr = 0
def __iter__(self): def __iter__(self):
return self return self
def __next__(self): def __next__(self):
chip, self.nr = get_detected_chips(self.match, self.nr) chip, self.nr = get_detected_chips(self.match, self.nr)
if chip is None: if chip is None:
raise StopIteration raise StopIteration
return chip return chip
def __del__(self): def __del__(self):
if self.match is not None: if self.match is not None:
free_chip_name(self.match) free_chip_name(self.match)
def next(self): # python2 compability def next(self): # python2 compability
return self.__next__() return self.__next__()
class FeatureIterator: class FeatureIterator:
def __init__(self, chip): def __init__(self, chip):
self.chip = chip self.chip = chip
self.nr = 0 self.nr = 0
def __iter__(self): def __iter__(self):
return self return self
def __next__(self): def __next__(self):
feature, self.nr = get_features(self.chip, self.nr) feature, self.nr = get_features(self.chip, self.nr)
if feature is None: if feature is None:
raise StopIteration raise StopIteration
return feature return feature
def next(self): # python2 compability def next(self): # python2 compability
return self.__next__() return self.__next__()
class SubFeatureIterator: class SubFeatureIterator:
def __init__(self, chip, feature): def __init__(self, chip, feature):
self.chip = chip self.chip = chip
self.feature = feature self.feature = feature
self.nr = 0 self.nr = 0
def __iter__(self): def __iter__(self):
return self return self
def __next__(self): def __next__(self):
subfeature, self.nr = get_all_subfeatures(self.chip, self.feature, self.nr) subfeature, self.nr = get_all_subfeatures(self.chip, self.feature, self.nr)
if subfeature is None: if subfeature is None:
raise StopIteration raise StopIteration
return subfeature return subfeature
def next(self): # python2 compability def next(self): # python2 compability
return self.__next__() return self.__next__()

View file

@ -557,7 +557,9 @@ mount "${WINPE_ISO}" /mnt/WinPE -r >> "${LOG_FILE}" 2>&1
echo "Copying Linux files..." echo "Copying Linux files..."
rsync ${RSYNC_ARGS} /mnt/Linux/* /mnt/Dest/ >> "${LOG_FILE}" 2>&1 rsync ${RSYNC_ARGS} /mnt/Linux/* /mnt/Dest/ >> "${LOG_FILE}" 2>&1
sed -i "s/${ISO_LABEL}/${UFD_LABEL}/" /mnt/Dest/EFI/boot/refind.conf sed -i "s/${ISO_LABEL}/${UFD_LABEL}/" /mnt/Dest/EFI/boot/refind.conf
sed -i "s/#UFD#//" /mnt/Dest/EFI/boot/refind.conf
sed -i "s/${ISO_LABEL}/${UFD_LABEL}/" /mnt/Dest/arch/boot/syslinux/*cfg sed -i "s/${ISO_LABEL}/${UFD_LABEL}/" /mnt/Dest/arch/boot/syslinux/*cfg
sed -i "s/#UFD#//" /mnt/Dest/arch/boot/syslinux/*cfg
echo "Copying WinPE files..." echo "Copying WinPE files..."
rsync ${RSYNC_ARGS} /mnt/WinPE/{Boot,bootmgr{,.efi},en-us,sources} /mnt/Dest/ >> "${LOG_FILE}" 2>&1 rsync ${RSYNC_ARGS} /mnt/WinPE/{Boot,bootmgr{,.efi},en-us,sources} /mnt/Dest/ >> "${LOG_FILE}" 2>&1

View file

@ -11,6 +11,7 @@ $Bin = (Get-Item $WD).Parent.FullName
$Root = (Get-Item $Bin -Force).Parent.FullName $Root = (Get-Item $Bin -Force).Parent.FullName
$Temp = "$Bin\tmp" $Temp = "$Bin\tmp"
$System32 = "{0}\System32" -f $Env:SystemRoot $System32 = "{0}\System32" -f $Env:SystemRoot
$SysWOW64 = "{0}\SysWOW64" -f $Env:SystemRoot
Push-Location "$WD" Push-Location "$WD"
$Host.UI.RawUI.BackgroundColor = "black" $Host.UI.RawUI.BackgroundColor = "black"
$Host.UI.RawUI.ForegroundColor = "white" $Host.UI.RawUI.ForegroundColor = "white"
@ -82,25 +83,25 @@ if ($MyInvocation.InvocationName -ne ".") {
DownloadFile -Path $Path -Name "7z-extra.7z" -Url "https://www.7-zip.org/a/7z1805-extra.7z" DownloadFile -Path $Path -Name "7z-extra.7z" -Url "https://www.7-zip.org/a/7z1805-extra.7z"
# ConEmu # ConEmu
$Url = "https://github.com/Maximus5/ConEmu/releases/download/v18.05.06/ConEmuPack.180506.7z" $Url = "https://github.com/Maximus5/ConEmu/releases/download/v18.06.26/ConEmuPack.180626.7z"
DownloadFile -Path $Path -Name "ConEmuPack.7z" -Url $Url DownloadFile -Path $Path -Name "ConEmuPack.7z" -Url $Url
# Notepad++ # Notepad++
$Url = "https://notepad-plus-plus.org/repository/7.x/7.5.6/npp.7.5.6.bin.minimalist.7z" $Url = "https://notepad-plus-plus.org/repository/7.x/7.5.8/npp.7.5.8.bin.minimalist.7z"
DownloadFile -Path $Path -Name "npp.7z" -Url $Url DownloadFile -Path $Path -Name "npp.7z" -Url $Url
# Python # Python
$Url = "https://www.python.org/ftp/python/3.6.5/python-3.6.5-embed-win32.zip" $Url = "https://www.python.org/ftp/python/3.7.0/python-3.7.0-embed-win32.zip"
DownloadFile -Path $Path -Name "python32.zip" -Url $Url DownloadFile -Path $Path -Name "python32.zip" -Url $Url
$Url = "https://www.python.org/ftp/python/3.6.5/python-3.6.5-embed-amd64.zip" $Url = "https://www.python.org/ftp/python/3.7.0/python-3.7.0-embed-amd64.zip"
DownloadFile -Path $Path -Name "python64.zip" -Url $Url DownloadFile -Path $Path -Name "python64.zip" -Url $Url
# Python: psutil # Python: psutil
$DownloadPage = "https://pypi.org/project/psutil/" $DownloadPage = "https://pypi.org/project/psutil/"
$RegEx = "href=.*-cp36-cp36m-win32.whl" $RegEx = "href=.*-cp37-cp37m-win32.whl"
$Url = FindDynamicUrl $DownloadPage $RegEx $Url = FindDynamicUrl $DownloadPage $RegEx
DownloadFile -Path $Path -Name "psutil32.whl" -Url $Url DownloadFile -Path $Path -Name "psutil32.whl" -Url $Url
$RegEx = "href=.*-cp36-cp36m-win_amd64.whl" $RegEx = "href=.*-cp37-cp37m-win_amd64.whl"
$Url = FindDynamicUrl $DownloadPage $RegEx $Url = FindDynamicUrl $DownloadPage $RegEx
DownloadFile -Path $Path -Name "psutil64.whl" -Url $Url DownloadFile -Path $Path -Name "psutil64.whl" -Url $Url
@ -112,12 +113,25 @@ if ($MyInvocation.InvocationName -ne ".") {
$Url = FindDynamicUrl -SourcePage $DownloadPage -RegEx $RegEx $Url = FindDynamicUrl -SourcePage $DownloadPage -RegEx $RegEx
DownloadFile -Path $Path -Name $Name -Url $Url DownloadFile -Path $Path -Name $Name -Url $Url
} }
# Visual C++ Runtimes
$Url = "https://aka.ms/vs/15/release/vc_redist.x86.exe"
DownloadFile -Path $Path -Name "vcredist_x86.exe" -Url $Url
$Url = "https://aka.ms/vs/15/release/vc_redist.x64.exe"
DownloadFile -Path $Path -Name "vcredist_x64.exe" -Url $Url
## Bail ## ## Bail ##
# If errors were encountered during downloads # If errors were encountered during downloads
if ($DownloadErrors -gt 0) { if ($DownloadErrors -gt 0) {
Abort Abort
} }
## Install ##
# Visual C++ Runtimes
$ArgumentList = @("/install", "/passive", "/norestart")
Start-Process -FilePath "$Temp\vcredist_x86.exe" -ArgumentList $ArgumentList -Wait
Start-Process -FilePath "$Temp\vcredist_x64.exe" -ArgumentList $ArgumentList -Wait
Remove-Item "$Temp\vcredist*.exe"
## Extract ## ## Extract ##
# 7-Zip # 7-Zip
@ -192,6 +206,13 @@ if ($MyInvocation.InvocationName -ne ".") {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red" Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
} }
} }
try {
Copy-Item -Path "$System32\vcruntime140.dll" -Destination "$Bin\Python\x64\vcruntime140.dll" -Force
Copy-Item -Path "$SysWOW64\vcruntime140.dll" -Destination "$Bin\Python\x32\vcruntime140.dll" -Force
}
catch {
Write-Host (" ERROR: Failed to copy Visual C++ Runtime DLLs." ) -ForegroundColor "Red"
}
Remove-Item "$Temp\python*.zip" Remove-Item "$Temp\python*.zip"
Remove-Item "$Temp\*.whl" Remove-Item "$Temp\*.whl"

View file

@ -17,6 +17,7 @@ $Date = Get-Date -UFormat "%Y-%m-%d"
$Host.UI.RawUI.BackgroundColor = "Black" $Host.UI.RawUI.BackgroundColor = "Black"
$Host.UI.RawUI.ForegroundColor = "White" $Host.UI.RawUI.ForegroundColor = "White"
$HostSystem32 = "{0}\System32" -f $Env:SystemRoot $HostSystem32 = "{0}\System32" -f $Env:SystemRoot
$HostSysWOW64 = "{0}\SysWOW64" -f $Env:SystemRoot
$DISM = "{0}\DISM.exe" -f $Env:DISMRoot $DISM = "{0}\DISM.exe" -f $Env:DISMRoot
#Enable TLS 1.2 #Enable TLS 1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
@ -136,20 +137,19 @@ if ($MyInvocation.InvocationName -ne ".") {
@("bluescreenview32.zip", "http://www.nirsoft.net/utils/bluescreenview.zip"), @("bluescreenview32.zip", "http://www.nirsoft.net/utils/bluescreenview.zip"),
@("bluescreenview64.zip", "http://www.nirsoft.net/utils/bluescreenview-x64.zip"), @("bluescreenview64.zip", "http://www.nirsoft.net/utils/bluescreenview-x64.zip"),
# ConEmu # ConEmu
@("ConEmuPack.7z", "https://github.com/Maximus5/ConEmu/releases/download/v18.05.06/ConEmuPack.180506.7z"), @("ConEmuPack.7z", "https://github.com/Maximus5/ConEmu/releases/download/v18.06.26/ConEmuPack.180626.7z"),
# Fast Copy # Fast Copy
@("fastcopy32.zip", "http://ftp.vector.co.jp/69/93/2323/FastCopy341.zip"), @("fastcopy.zip", "http://ftp.vector.co.jp/70/64/2323/FastCopy354_installer.zip"),
@("fastcopy64.zip", "http://ftp.vector.co.jp/69/93/2323/FastCopy341_x64.zip"),
# HWiNFO # HWiNFO
@("hwinfo.zip", "http://app.oldfoss.com:81/download/HWiNFO/hwi_582.zip"), @("hwinfo.zip", "http://app.oldfoss.com:81/download/HWiNFO/hwi_588.zip"),
# Killer Network Drivers # Killer Network Drivers
@( @(
"killerinf.zip", "killerinf.zip",
("http://www.killernetworking.com"+(FindDynamicUrl "http://www.killernetworking.com/driver-downloads/item/killer-drivers-inf" "Download Killer-Ethernet").replace('&amp;', '&')) ("http://www.killernetworking.com"+(FindDynamicUrl "http://www.killernetworking.com/driver-downloads/item/killer-drivers-inf" "Download Killer-Ethernet").replace('&amp;', '&'))
), ),
# Notepad++ # Notepad++
@("npp_x86.7z", "https://notepad-plus-plus.org/repository/7.x/7.5.6/npp.7.5.6.bin.minimalist.7z"), @("npp_x86.7z", "https://notepad-plus-plus.org/repository/7.x/7.5.8/npp.7.5.8.bin.minimalist.7z"),
@("npp_amd64.7z", "https://notepad-plus-plus.org/repository/7.x/7.5.6/npp.7.5.6.bin.minimalist.x64.7z"), @("npp_amd64.7z", "https://notepad-plus-plus.org/repository/7.x/7.5.8/npp.7.5.8.bin.minimalist.x64.7z"),
# NT Password Editor # NT Password Editor
@("ntpwed.zip", "http://cdslow.org.ru/files/ntpwedit/ntpwed07.zip"), @("ntpwed.zip", "http://cdslow.org.ru/files/ntpwedit/ntpwed07.zip"),
# Prime95 # Prime95
@ -159,16 +159,16 @@ if ($MyInvocation.InvocationName -ne ".") {
@("produkey32.zip", "http://www.nirsoft.net/utils/produkey.zip"), @("produkey32.zip", "http://www.nirsoft.net/utils/produkey.zip"),
@("produkey64.zip", "http://www.nirsoft.net/utils/produkey-x64.zip"), @("produkey64.zip", "http://www.nirsoft.net/utils/produkey-x64.zip"),
# Python # Python
@("python32.zip", "https://www.python.org/ftp/python/3.6.5/python-3.6.5-embed-win32.zip"), @("python32.zip", "https://www.python.org/ftp/python/3.7.0/python-3.7.0-embed-win32.zip"),
@("python64.zip", "https://www.python.org/ftp/python/3.6.5/python-3.6.5-embed-amd64.zip"), @("python64.zip", "https://www.python.org/ftp/python/3.7.0/python-3.7.0-embed-amd64.zip"),
# Python: psutil # Python: psutil
@( @(
"psutil64.whl", "psutil64.whl",
(FindDynamicUrl "https://pypi.org/project/psutil/" "href=.*-cp36-cp36m-win_amd64.whl") (FindDynamicUrl "https://pypi.org/project/psutil/" "href=.*-cp37-cp37m-win_amd64.whl")
), ),
@( @(
"psutil32.whl", "psutil32.whl",
(FindDynamicUrl "https://pypi.org/project/psutil/" "href=.*-cp36-cp36m-win32.whl") (FindDynamicUrl "https://pypi.org/project/psutil/" "href=.*-cp37-cp37m-win32.whl")
), ),
# Q-Dir # Q-Dir
@("qdir32.zip", "https://www.softwareok.com/Download/Q-Dir_Portable.zip"), @("qdir32.zip", "https://www.softwareok.com/Download/Q-Dir_Portable.zip"),
@ -178,6 +178,9 @@ if ($MyInvocation.InvocationName -ne ".") {
@("testdisk64.zip", "https://www.cgsecurity.org/testdisk-7.1-WIP.win64.zip"), @("testdisk64.zip", "https://www.cgsecurity.org/testdisk-7.1-WIP.win64.zip"),
# VirtIO drivers # VirtIO drivers
@("virtio-win.iso", "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso"), @("virtio-win.iso", "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso"),
# Visual C++ Runtimes
@("vcredist_x86.exe", "https://aka.ms/vs/15/release/vc_redist.x86.exe"),
@("vcredist_x64.exe", "https://aka.ms/vs/15/release/vc_redist.x64.exe"),
# wimlib-imagex # wimlib-imagex
@("wimlib32.zip", "https://wimlib.net/downloads/wimlib-1.12.0-windows-i686-bin.zip"), @("wimlib32.zip", "https://wimlib.net/downloads/wimlib-1.12.0-windows-i686-bin.zip"),
@("wimlib64.zip", "https://wimlib.net/downloads/wimlib-1.12.0-windows-x86_64-bin.zip") @("wimlib64.zip", "https://wimlib.net/downloads/wimlib-1.12.0-windows-x86_64-bin.zip")
@ -191,6 +194,13 @@ if ($MyInvocation.InvocationName -ne ".") {
if ($DownloadErrors -gt 0) { if ($DownloadErrors -gt 0) {
Abort Abort
} }
## Install ##
# Visual C++ Runtimes
Write-Host "Installing: Visual C++ Runtimes"
$ArgumentList = @("/install", "/passive", "/norestart")
Start-Process -FilePath "$Temp\vcredist_x86.exe" -ArgumentList $ArgumentList -Wait
Start-Process -FilePath "$Temp\vcredist_x64.exe" -ArgumentList $ArgumentList -Wait
## Extract ## ## Extract ##
# 7-Zip # 7-Zip
@ -255,20 +265,30 @@ if ($MyInvocation.InvocationName -ne ".") {
# Fast Copy # Fast Copy
Write-Host "Extracting: FastCopy" Write-Host "Extracting: FastCopy"
try { try {
# Extract Installer
$ArgumentList = @( $ArgumentList = @(
"x", "$Temp\fastcopy64.zip", "-o$Build\bin\amd64\FastCopy", "e", "$Temp\fastcopy.zip", "-o$Temp",
"-aoa", "-bso0", "-bse0", "-bsp0", "-aoa", "-bso0", "-bse0", "-bsp0")
"-x!setup.exe", "-x!*.dll")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
# Extract 64-bit
$ArgumentList = @( $ArgumentList = @(
"e", "$Temp\fastcopy32.zip", "-o$Build\bin\x86\FastCopy", "/NOSUBDIR", "/DIR=$Build\bin\amd64\FastCopy",
"-aoa", "-bso0", "-bse0", "-bsp0", "/EXTRACT64")
"-x!setup.exe", "-x!*.dll") Start-Process -FilePath "$TEMP\FastCopy354_installer.exe" -ArgumentList $ArgumentList -NoNewWindow -Wait
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait Remove-Item "$Build\bin\amd64\FastCopy\setup.exe" -Force
# Extract 32-bit
$ArgumentList = @(
"/NOSUBDIR", "/DIR=$Build\bin\x86\FastCopy",
"/EXTRACT32")
Start-Process -FilePath "$TEMP\FastCopy354_installer.exe" -ArgumentList $ArgumentList -NoNewWindow -Wait
Remove-Item "$Build\bin\x86\FastCopy\setup.exe" -Force
} }
catch { catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red" Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
} }
# Killer Network Driver # Killer Network Driver
Write-Host "Extracting: Killer Network Driver" Write-Host "Extracting: Killer Network Driver"
@ -414,6 +434,12 @@ if ($MyInvocation.InvocationName -ne ".") {
catch { catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red" Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
} }
try {
Copy-Item -Path "$HostSystem32\vcruntime140.dll" -Destination "$Build\bin\amd64\python\vcruntime140.dll" -Force
}
catch {
Write-Host (" ERROR: Failed to copy Visual C++ Runtime DLL." ) -ForegroundColor "Red"
}
# Python (x32) # Python (x32)
Write-Host "Extracting: Python (x32)" Write-Host "Extracting: Python (x32)"
@ -431,6 +457,12 @@ if ($MyInvocation.InvocationName -ne ".") {
catch { catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red" Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
} }
try {
Copy-Item -Path "$HostSysWOW64\vcruntime140.dll" -Destination "$Build\bin\x86\python\vcruntime140.dll" -Force
}
catch {
Write-Host (" ERROR: Failed to copy Visual C++ Runtime DLL." ) -ForegroundColor "Red"
}
# Q-Dir # Q-Dir
Write-Host "Extracting: Q-Dir" Write-Host "Extracting: Q-Dir"

View file

@ -10,7 +10,7 @@ from functions.cleanup import *
from functions.data import * from functions.data import *
init_global_vars() init_global_vars()
os.system('title {}: CBS Cleanup'.format(KIT_NAME_FULL)) os.system('title {}: CBS Cleanup'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\CBS Cleanup.log'.format(**global_vars) set_log_file('CBS Cleanup.log')
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -20,18 +20,18 @@ if __name__ == '__main__':
folder_path = r'{}\Backups'.format(KIT_NAME_SHORT) folder_path = r'{}\Backups'.format(KIT_NAME_SHORT)
dest = select_destination(folder_path=folder_path, dest = select_destination(folder_path=folder_path,
prompt='Which disk are we using for temp data and backup?') prompt='Which disk are we using for temp data and backup?')
# Show details # Show details
print_info('{}: CBS Cleanup Tool\n'.format(KIT_NAME_FULL)) print_info('{}: CBS Cleanup Tool\n'.format(KIT_NAME_FULL))
show_data('Backup / Temp path:', dest) show_data('Backup / Temp path:', dest)
print_standard('\n') print_standard('\n')
if (not ask('Proceed with CBS cleanup?')): if (not ask('Proceed with CBS cleanup?')):
abort() abort()
# Run Cleanup # Run Cleanup
try_and_print(message='Running cleanup...', function=cleanup_cbs, try_and_print(message='Running cleanup...', function=cleanup_cbs,
cs='Done', dest_folder=dest) cs='Done', dest_folder=dest)
# Done # Done
print_standard('\nDone.') print_standard('\nDone.')
pause("Press Enter to exit...") pause("Press Enter to exit...")

View file

@ -9,7 +9,7 @@ sys.path.append(os.getcwd())
from functions.repairs import * from functions.repairs import *
init_global_vars() init_global_vars()
os.system('title {}: Check Disk Tool'.format(KIT_NAME_FULL)) os.system('title {}: Check Disk Tool'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\Check Disk.log'.format(**global_vars) set_log_file('Check Disk.log')
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -45,7 +45,7 @@ if __name__ == '__main__':
cs=cs, other_results=other_results, repair=repair) cs=cs, other_results=other_results, repair=repair)
else: else:
abort() abort()
# Done # Done
print_success('Done.') print_success('Done.')
pause("Press Enter to exit...") pause("Press Enter to exit...")

43
.bin/Scripts/ddrescue-tui Executable file
View file

@ -0,0 +1,43 @@
#!/bin/bash
#
## Wizard Kit: ddrescue TUI Launcher
SESSION_NAME="ddrescue-tui"
WINDOW_NAME="GNU ddrescue TUI"
MENU="ddrescue-tui-menu"
function ask() {
while :; do
read -p "$1 " -r answer
if echo "$answer" | egrep -iq '^(y|yes|sure)$'; then
return 0
elif echo "$answer" | egrep -iq '^(n|no|nope)$'; then
return 1
fi
done
}
die () {
echo "$0:" "$@" >&2
exit 1
}
# Check for running session
if tmux list-session | grep -q "$SESSION_NAME"; then
echo "WARNING: tmux session $SESSION_NAME already exists."
echo ""
if ask "Kill current session?"; then
tmux kill-session -t "$SESSION_NAME" || \
die "Failed to kill session: $SESSION_NAME"
else
echo "Aborted."
echo ""
echo -n "Press Enter to exit... "
read -r
exit 0
fi
fi
# Start session
tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" $*

63
.bin/Scripts/ddrescue-tui-menu Executable file
View file

@ -0,0 +1,63 @@
#!/bin/python3
#
## Wizard Kit: TUI for ddrescue cloning and imaging
import os
import sys
# Init
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
from functions.ddrescue import *
from functions.hw_diags import *
init_global_vars()
if __name__ == '__main__':
try:
# Prep
clear_screen()
args = list(sys.argv)
run_mode = ''
source_path = None
dest_path = None
# Parse args
try:
script_name = os.path.basename(args.pop(0))
run_mode = str(args.pop(0)).lower()
source_path = args.pop(0)
dest_path = args.pop(0)
except IndexError:
# We'll set the missing paths later
pass
# Show usage
if re.search(r'-+(h|help)', str(sys.argv), re.IGNORECASE):
show_usage(script_name)
exit_script()
# Start cloning/imaging
if run_mode in ('clone', 'image'):
menu_ddrescue(source_path, dest_path, run_mode)
else:
if not re.search(r'^-*(h|help\?)', run_mode, re.IGNORECASE):
print_error('Invalid mode.')
# Done
print_standard('\nDone.')
pause("Press Enter to exit...")
exit_script()
except GenericAbort:
abort()
except GenericError as ge:
msg = 'Generic Error'
if str(ge):
msg = str(ge)
print_error(msg)
abort()
except SystemExit:
pass
except:
major_exception()
# vim: sts=4 sw=4 ts=4

View file

@ -0,0 +1,39 @@
#!/bin/python3
#
## Wizard Kit: SMART attributes display for ddrescue TUI
import os
import sys
import time
# Init
os.chdir(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(os.getcwd())
from functions.hw_diags import *
#init_global_vars()
if __name__ == '__main__':
try:
# Prep
clear_screen()
dev_path = sys.argv[1]
devs = scan_disks(True, dev_path)
# Warn if SMART unavailable
if dev_path not in devs:
print_error('SMART data not available')
exit_script()
# Initial screen
dev = devs[dev_path]
clear_screen()
show_disk_details(dev, only_attributes=True)
# Done
exit_script()
except SystemExit:
pass
except:
major_exception()
# vim: sts=4 sw=4 ts=4

View file

@ -9,7 +9,7 @@ sys.path.append(os.getcwd())
from functions.repairs import * from functions.repairs import *
init_global_vars() init_global_vars()
os.system('title {}: DISM helper Tool'.format(KIT_NAME_FULL)) os.system('title {}: DISM helper Tool'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\DISM helper tool.log'.format(**global_vars) set_log_file('DISM Helper.log')
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -46,7 +46,7 @@ if __name__ == '__main__':
other_results=other_results, repair=repair) other_results=other_results, repair=repair)
else: else:
abort() abort()
# Done # Done
print_success('Done.') print_success('Done.')
pause("Press Enter to exit...") pause("Press Enter to exit...")

12
.bin/Scripts/echo-and-hold Executable file
View file

@ -0,0 +1,12 @@
#!/bin/bash
#
## Wizard Kit: "echo" text to screen and "hold" by waiting for user input
function usage {
echo "Usage: $(basename "$0") \"text\""
echo " e.g. $(basename "$0") \"Some text to show\""
}
echo -en "$@" && read -r __dont_care
exit 0

View file

@ -59,7 +59,7 @@ def windows_is_activated():
['cscript', '//nologo', SLMGR, '/xpr'], check=False, ['cscript', '//nologo', SLMGR, '/xpr'], check=False,
stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout=subprocess.PIPE, stderr=subprocess.PIPE)
activation_string = activation_string.stdout.decode() activation_string = activation_string.stdout.decode()
return bool(activation_string and 'permanent' in activation_string) return bool(activation_string and 'permanent' in activation_string)
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -16,7 +16,7 @@ def backup_partition(disk, par):
"""Create a backup image of a partition.""" """Create a backup image of a partition."""
if par.get('Image Exists', False) or par['Number'] in disk['Bad Partitions']: if par.get('Image Exists', False) or par['Number'] in disk['Bad Partitions']:
raise GenericAbort raise GenericAbort
cmd = [ cmd = [
global_vars['Tools']['wimlib-imagex'], global_vars['Tools']['wimlib-imagex'],
'capture', 'capture',
@ -48,7 +48,7 @@ def get_volume_display_name(mountpoint):
serial_number = None serial_number = None
max_component_length = None max_component_length = None
file_system_flags = None file_system_flags = None
vol_info = kernel32.GetVolumeInformationW( vol_info = kernel32.GetVolumeInformationW(
ctypes.c_wchar_p(mountpoint), ctypes.c_wchar_p(mountpoint),
vol_name_buffer, vol_name_buffer,
@ -59,16 +59,16 @@ def get_volume_display_name(mountpoint):
fs_name_buffer, fs_name_buffer,
ctypes.sizeof(fs_name_buffer) ctypes.sizeof(fs_name_buffer)
) )
name = '{} "{}"'.format(name, vol_name_buffer.value) name = '{} "{}"'.format(name, vol_name_buffer.value)
except: except:
pass pass
return name return name
def prep_disk_for_backup(destination, disk, backup_prefix): def prep_disk_for_backup(destination, disk, backup_prefix):
"""Gather details about the disk and its partitions. """Gather details about the disk and its partitions.
This includes partitions that can't be backed up, This includes partitions that can't be backed up,
whether backups already exist on the BACKUP_SERVER, whether backups already exist on the BACKUP_SERVER,
partition names/sizes/used space, etc.""" partition names/sizes/used space, etc."""
@ -83,7 +83,7 @@ def prep_disk_for_backup(destination, disk, backup_prefix):
if disk['Valid Partitions'] <= 0: if disk['Valid Partitions'] <= 0:
print_error('ERROR: No partitions can be backed up for this disk') print_error('ERROR: No partitions can be backed up for this disk')
raise GenericAbort raise GenericAbort
# Prep partitions # Prep partitions
for par in disk['Partitions']: for par in disk['Partitions']:
display = '{size} {fs}'.format( display = '{size} {fs}'.format(
@ -91,7 +91,7 @@ def prep_disk_for_backup(destination, disk, backup_prefix):
width = width, width = width,
size = par['Size'], size = par['Size'],
fs = par['FileSystem']) fs = par['FileSystem'])
if par['Number'] in disk['Bad Partitions']: if par['Number'] in disk['Bad Partitions']:
# Set display string using partition description & OS type # Set display string using partition description & OS type
display = '* {display}\t\t{q}{name}{q}\t{desc} ({os})'.format( display = '* {display}\t\t{q}{name}{q}\t{desc} ({os})'.format(
@ -120,7 +120,7 @@ def prep_disk_for_backup(destination, disk, backup_prefix):
display = '+ {}'.format(display) display = '+ {}'.format(display)
else: else:
display = ' {}'.format(display) display = ' {}'.format(display)
# Append rest of Display String for valid/clobber partitions # Append rest of Display String for valid/clobber partitions
display += ' (Used: {used})\t{q}{name}{q}'.format( display += ' (Used: {used})\t{q}{name}{q}'.format(
used = par['Used Space'], used = par['Used Space'],
@ -128,7 +128,7 @@ def prep_disk_for_backup(destination, disk, backup_prefix):
name = par['Name']) name = par['Name'])
# For all partitions # For all partitions
par['Display String'] = display par['Display String'] = display
# Set description for bad partitions # Set description for bad partitions
warnings = '\n' warnings = '\n'
if disk['Bad Partitions']: if disk['Bad Partitions']:
@ -148,7 +148,7 @@ def select_backup_destination(auto_select=True):
actions = [ actions = [
{'Name': 'Main Menu', 'Letter': 'M'}, {'Name': 'Main Menu', 'Letter': 'M'},
] ]
# Add local disks # Add local disks
for d in psutil.disk_partitions(): for d in psutil.disk_partitions():
if re.search(r'^{}'.format(global_vars['Env']['SYSTEMDRIVE']), d.mountpoint, re.IGNORECASE): if re.search(r'^{}'.format(global_vars['Env']['SYSTEMDRIVE']), d.mountpoint, re.IGNORECASE):
@ -161,7 +161,7 @@ def select_backup_destination(auto_select=True):
get_volume_display_name(d.mountpoint)), get_volume_display_name(d.mountpoint)),
'Letter': re.sub(r'^(\w):\\.*$', r'\1', d.mountpoint), 'Letter': re.sub(r'^(\w):\\.*$', r'\1', d.mountpoint),
}) })
# Size check # Size check
for dest in destinations: for dest in destinations:
if 'IP' in dest: if 'IP' in dest:
@ -175,11 +175,11 @@ def select_backup_destination(auto_select=True):
if not destinations: if not destinations:
print_warning('No backup destinations found.') print_warning('No backup destinations found.')
raise GenericAbort raise GenericAbort
# Skip menu? # Skip menu?
if len(destinations) == 1 and auto_select: if len(destinations) == 1 and auto_select:
return destinations[0] return destinations[0]
selection = menu_select( selection = menu_select(
title = 'Where are we backing up to?', title = 'Where are we backing up to?',
main_entries = destinations, main_entries = destinations,

View file

@ -2,6 +2,8 @@
from functions.common import * from functions.common import *
from operator import itemgetter
# Define other_results for later try_and_print # Define other_results for later try_and_print
browser_data = {} browser_data = {}
other_results = { other_results = {
@ -46,6 +48,9 @@ UBO_CHROME_REG = r'Software\Wow6432Node\Google\Chrome\Extensions\cjpalhdl
UBO_EXTRA_CHROME = 'https://chrome.google.com/webstore/detail/ublock-origin-extra/pgdnlhfefecpicbbihgmbmffkjpaplco?hl=en' UBO_EXTRA_CHROME = 'https://chrome.google.com/webstore/detail/ublock-origin-extra/pgdnlhfefecpicbbihgmbmffkjpaplco?hl=en'
UBO_EXTRA_CHROME_REG = r'Software\Wow6432Node\Google\Chrome\Extensions\pgdnlhfefecpicbbihgmbmffkjpaplco' UBO_EXTRA_CHROME_REG = r'Software\Wow6432Node\Google\Chrome\Extensions\pgdnlhfefecpicbbihgmbmffkjpaplco'
UBO_MOZILLA = 'https://addons.mozilla.org/en-us/firefox/addon/ublock-origin/' UBO_MOZILLA = 'https://addons.mozilla.org/en-us/firefox/addon/ublock-origin/'
UBO_MOZZILA_PATH = r'{}\Mozilla Firefox\distribution\extensions\ublock_origin.xpi'.format(os.environ.get('PROGRAMFILES'))
UBO_MOZILLA_REG = r'Software\Mozilla\Firefox\Extensions'
UBO_MOZILLA_REG_NAME = 'uBlock0@raymondhill.net'
UBO_OPERA = 'https://addons.opera.com/en/extensions/details/ublock/?display=en' UBO_OPERA = 'https://addons.opera.com/en/extensions/details/ublock/?display=en'
SUPPORTED_BROWSERS = { SUPPORTED_BROWSERS = {
'Internet Explorer': { 'Internet Explorer': {
@ -98,16 +103,63 @@ SUPPORTED_BROWSERS = {
}, },
} }
def archive_all_users():
"""Create backups for all browsers for all users."""
users_root = r'{}\Users'.format(global_vars['Env']['SYSTEMDRIVE'])
user_envs = []
# Build list of valid users
for user_name in os.listdir(users_root):
valid_user = True
if user_name in ('Default', 'Default User'):
# Skip default users
continue
user_path = os.path.join(users_root, user_name)
appdata_local = os.path.join(user_path, r'AppData\Local')
appdata_roaming = os.path.join(user_path, r'AppData\Roaming')
valid_user &= os.path.exists(appdata_local)
valid_user &= os.path.exists(appdata_roaming)
if valid_user:
user_envs.append({
'USERNAME': user_name,
'USERPROFILE': user_path,
'APPDATA': appdata_roaming,
'LOCALAPPDATA': appdata_local})
# Backup browsers for all valid users
print_info('Backing up browsers')
for fake_env in sorted(user_envs, key=itemgetter('USERPROFILE')):
print_standard(' {}'.format(fake_env['USERNAME']))
for b_k, b_v in sorted(SUPPORTED_BROWSERS.items()):
if b_k == 'Mozilla Firefox Dev':
continue
source_path = b_v['user_data_path'].format(**fake_env)
if not os.path.exists(source_path):
continue
source_items = source_path + '*'
archive_path = r'{BackupDir}\Browsers ({USERNAME})\{Date}'.format(
**global_vars, **fake_env)
os.makedirs(archive_path, exist_ok=True)
archive_path += r'\{}.7z'.format(b_k)
cmd = [
global_vars['Tools']['SevenZip'],
'a', '-aoa', '-bso0', '-bse0', '-mx=1',
archive_path, source_items]
try_and_print(message='{}...'.format(b_k),
function=run_program, cmd=cmd)
print_standard(' ')
def archive_browser(name): def archive_browser(name):
"""Create backup of Browser saved in the BackupDir.""" """Create backup of Browser saved in the BackupDir."""
source = '{}*'.format(browser_data[name]['user_data_path']) source = '{}*'.format(browser_data[name]['user_data_path'])
dest = r'{BackupDir}\Browsers ({USERNAME})'.format( dest = r'{BackupDir}\Browsers ({USERNAME})\{Date}'.format(
**global_vars, **global_vars['Env']) **global_vars, **global_vars['Env'])
archive = r'{}\{}.7z'.format(dest, name) archive = r'{}\{}.7z'.format(dest, name)
os.makedirs(dest, exist_ok=True) os.makedirs(dest, exist_ok=True)
cmd = [ cmd = [
global_vars['Tools']['SevenZip'], global_vars['Tools']['SevenZip'],
'a', '-aoa', '-bso0', '-bse0', '-mx=1', 'a', '-aoa', '-bso0', '-bse0', '-mx=1',
'-mhe=on', '-p{}'.format(ARCHIVE_PASSWORD),
archive, source] archive, source]
run_program(cmd) run_program(cmd)
@ -135,7 +187,7 @@ def clean_chromium_profile(profile):
def clean_internet_explorer(**kwargs): def clean_internet_explorer(**kwargs):
"""Uses the built-in function to reset IE and sets the homepage. """Uses the built-in function to reset IE and sets the homepage.
NOTE: kwargs set but unused as a workaround.""" NOTE: kwargs set but unused as a workaround."""
kill_process('iexplore.exe') kill_process('iexplore.exe')
run_program(['rundll32.exe', 'inetcpl.cpl,ResetIEtoDefaults'], check=False) run_program(['rundll32.exe', 'inetcpl.cpl,ResetIEtoDefaults'], check=False)
@ -179,11 +231,11 @@ def clean_mozilla_profile(profile):
def get_browser_details(name): def get_browser_details(name):
"""Get installation status and profile details for all supported browsers.""" """Get installation status and profile details for all supported browsers."""
browser = SUPPORTED_BROWSERS[name].copy() browser = SUPPORTED_BROWSERS[name].copy()
# Update user_data_path # Update user_data_path
browser['user_data_path'] = browser['user_data_path'].format( browser['user_data_path'] = browser['user_data_path'].format(
**global_vars['Env']) **global_vars['Env'])
# Find executable (if multiple files are found, the last one is used) # Find executable (if multiple files are found, the last one is used)
exe_path = None exe_path = None
num_installs = 0 num_installs = 0
@ -194,7 +246,7 @@ def get_browser_details(name):
if os.path.exists(test_path): if os.path.exists(test_path):
num_installs += 1 num_installs += 1
exe_path = test_path exe_path = test_path
# Find profile(s) # Find profile(s)
profiles = [] profiles = []
if browser['base'] == 'ie': if browser['base'] == 'ie':
@ -222,12 +274,12 @@ def get_browser_details(name):
profiles.extend( profiles.extend(
get_mozilla_profiles( get_mozilla_profiles(
search_path=browser['user_data_path'], dev=dev)) search_path=browser['user_data_path'], dev=dev))
elif 'Opera' in name: elif 'Opera' in name:
if os.path.exists(browser['user_data_path']): if os.path.exists(browser['user_data_path']):
profiles.append( profiles.append(
{'name': 'Default', 'path': browser['user_data_path']}) {'name': 'Default', 'path': browser['user_data_path']})
# Get homepages # Get homepages
if browser['base'] == 'ie': if browser['base'] == 'ie':
# IE is set to only have one profile above # IE is set to only have one profile above
@ -236,14 +288,14 @@ def get_browser_details(name):
for profile in profiles: for profile in profiles:
prefs_path = r'{path}\prefs.js'.format(**profile) prefs_path = r'{path}\prefs.js'.format(**profile)
profile['homepages'] = get_mozilla_homepages(prefs_path=prefs_path) profile['homepages'] = get_mozilla_homepages(prefs_path=prefs_path)
# Add to browser_data # Add to browser_data
browser_data[name] = browser browser_data[name] = browser
browser_data[name].update({ browser_data[name].update({
'exe_path': exe_path, 'exe_path': exe_path,
'profiles': profiles, 'profiles': profiles,
}) })
# Raise installation warnings (if any) # Raise installation warnings (if any)
if num_installs == 0: if num_installs == 0:
raise NotInstalledError raise NotInstalledError
@ -285,6 +337,9 @@ def get_ie_homepages():
homepages.append(main_page) homepages.append(main_page)
if len(extra_pages) > 0: if len(extra_pages) > 0:
homepages.extend(extra_pages) homepages.extend(extra_pages)
# Remove all curly braces
homepages = [h.replace('{', '').replace('}', '') for h in homepages]
return homepages return homepages
def get_mozilla_homepages(prefs_path): def get_mozilla_homepages(prefs_path):
@ -299,7 +354,7 @@ def get_mozilla_homepages(prefs_path):
homepages = search.group(1).split('|') homepages = search.group(1).split('|')
except Exception: except Exception:
pass pass
return homepages return homepages
def get_mozilla_profiles(search_path, dev=False): def get_mozilla_profiles(search_path, dev=False):
@ -326,9 +381,11 @@ def get_mozilla_profiles(search_path, dev=False):
return profiles return profiles
def install_adblock(indent=8, width=32): def install_adblock(indent=8, width=32, just_firefox=False):
"""Install adblock for all supported browsers.""" """Install adblock for all supported browsers."""
for browser in sorted(browser_data): for browser in sorted(browser_data):
if just_firefox and browser_data[browser]['base'] != 'mozilla':
continue
exe_path = browser_data[browser].get('exe_path', None) exe_path = browser_data[browser].get('exe_path', None)
function=run_program function=run_program
if not exe_path: if not exe_path:
@ -356,7 +413,7 @@ def install_adblock(indent=8, width=32):
winreg.QueryValue(HKLM, UBO_EXTRA_CHROME_REG) winreg.QueryValue(HKLM, UBO_EXTRA_CHROME_REG)
except FileNotFoundError: except FileNotFoundError:
urls.append(UBO_EXTRA_CHROME) urls.append(UBO_EXTRA_CHROME)
if len(urls) == 0: if len(urls) == 0:
urls = ['chrome://extensions'] urls = ['chrome://extensions']
elif 'Opera' in browser: elif 'Opera' in browser:
@ -364,21 +421,24 @@ def install_adblock(indent=8, width=32):
else: else:
urls.append(UBO_CHROME) urls.append(UBO_CHROME)
urls.append(UBO_EXTRA_CHROME) urls.append(UBO_EXTRA_CHROME)
elif browser_data[browser]['base'] == 'mozilla': elif browser_data[browser]['base'] == 'mozilla':
# Assume UBO is not installed first and change if it is # Check for system extensions
urls.append(UBO_MOZILLA) try:
if browser == 'Mozilla Firefox': with winreg.OpenKey(HKLM, UBO_MOZILLA_REG) as key:
ubo = browser_data[browser]['exe_path'].replace( winreg.QueryValueEx(key, UBO_MOZILLA_REG_NAME)
'firefox.exe', except FileNotFoundError:
r'distribution\extensions\uBlock0@raymondhill.net') urls = [UBO_MOZILLA]
if os.path.exists(ubo): else:
if os.path.exists(UBO_MOZZILA_PATH):
urls = ['about:addons'] urls = ['about:addons']
else:
urls = [UBO_MOZILLA]
elif browser_data[browser]['base'] == 'ie': elif browser_data[browser]['base'] == 'ie':
urls.append(IE_GALLERY) urls.append(IE_GALLERY)
function=popen_program function=popen_program
# By using check=False we're skipping any return codes so # By using check=False we're skipping any return codes so
# it should only fail if the program can't be run # it should only fail if the program can't be run
# (or can't be found). # (or can't be found).
@ -391,7 +451,7 @@ def install_adblock(indent=8, width=32):
def list_homepages(indent=8, width=32): def list_homepages(indent=8, width=32):
"""List current homepages for reference.""" """List current homepages for reference."""
for browser in [k for k, v in sorted(browser_data.items()) if v['exe_path']]: for browser in [k for k, v in sorted(browser_data.items()) if v['exe_path']]:
# Skip Chromium-based browsers # Skip Chromium-based browsers
if browser_data[browser]['base'] == 'chromium': if browser_data[browser]['base'] == 'chromium':
@ -401,7 +461,7 @@ def list_homepages(indent=8, width=32):
end='', flush=True) end='', flush=True)
print_warning('Not implemented', timestamp=False) print_warning('Not implemented', timestamp=False)
continue continue
# All other browsers # All other browsers
print_info('{indent}{browser:<{width}}'.format( print_info('{indent}{browser:<{width}}'.format(
indent=' '*indent, width=width, browser=browser+'...')) indent=' '*indent, width=width, browser=browser+'...'))
@ -435,9 +495,11 @@ def reset_browsers(indent=8, width=32):
indent=indent, width=width, function=function, indent=indent, width=width, function=function,
other_results=other_results, profile=profile) other_results=other_results, profile=profile)
def scan_for_browsers(): def scan_for_browsers(just_firefox=False):
"""Scan system for any supported browsers.""" """Scan system for any supported browsers."""
for name in sorted(SUPPORTED_BROWSERS): for name, details in sorted(SUPPORTED_BROWSERS.items()):
if just_firefox and details['base'] != 'mozilla':
continue
try_and_print(message='{}...'.format(name), try_and_print(message='{}...'.format(name),
function=get_browser_details, cs='Detected', function=get_browser_details, cs='Detected',
other_results=other_results, name=name) other_results=other_results, name=name)

View file

@ -1,12 +1,55 @@
# Wizard Kit: Functions - Cleanup # Wizard Kit: Functions - Cleanup
from functions.common import * from functions.setup import *
# STATIC VARIABLES
D7_HKCR_CLEANUP = {
r'batfile\shell\!!RunWithParms': {'Recurse': True},
r'batfile\shell\{0001B4FD-9EA3-4D90-A79E-FD14BA3AB01D}': {'Recurse': True},
r'cmdfile\shell\!!RunWithParms': {'Recurse': True},
r'cmdfile\shell\{0001B4FD-9EA3-4D90-A79E-FD14BA3AB01D}': {'Recurse': True},
r'exefile\shell\!!RunWithParms': {'Recurse': True},
r'exefile\shell\ResourceHacker': {'Recurse': True},
r'regfile\shell\!!RunWithParms': {'Recurse': True},
r'regfile\shell\{0001B4FD-9EA3-4D90-A79E-FD14BA3AB01D}': {'Recurse': True},
}
D7_HKCU_CLEANUP = {
r'Software\Malwarebytes': {'Recurse': False},
}
D7_HKLM_CLEANUP = {
r'Software\Emsisoft': {'Recurse': False},
}
HKU = winreg.HKEY_USERS
HKCR = winreg.HKEY_CLASSES_ROOT
HKCU = winreg.HKEY_CURRENT_USER
HKLM = winreg.HKEY_LOCAL_MACHINE
UAC_DEFAULTS_WIN7 = {
r'Software\Microsoft\Windows\CurrentVersion\Policies\System': {
'DWORD Items': {
'ConsentPromptBehaviorAdmin': 5,
'EnableLUA': 1,
'PromptOnSecureDesktop': 1,
},
},
}
UAC_DEFAULTS_WIN10 = {
r'Software\Microsoft\Windows\CurrentVersion\Policies\System': {
'DWORD Items': {
'ConsentPromptBehaviorAdmin': 5,
'ConsentPromptBehaviorUser': 3,
'EnableInstallerDetection': 1,
'EnableLUA': 1,
'EnableVirtualization': 1,
'PromptOnSecureDesktop': 1,
},
},
}
def cleanup_adwcleaner(): def cleanup_adwcleaner():
"""Move AdwCleaner folders into the ClientDir.""" """Move AdwCleaner folders into the ClientDir."""
source_path = r'{SYSTEMDRIVE}\AdwCleaner'.format(**global_vars['Env']) source_path = r'{SYSTEMDRIVE}\AdwCleaner'.format(**global_vars['Env'])
source_quarantine = r'{}\Quarantine'.format(source_path) source_quarantine = r'{}\Quarantine'.format(source_path)
# Quarantine # Quarantine
if os.path.exists(source_quarantine): if os.path.exists(source_quarantine):
os.makedirs(global_vars['QuarantineDir'], exist_ok=True) os.makedirs(global_vars['QuarantineDir'], exist_ok=True)
@ -14,27 +57,24 @@ def cleanup_adwcleaner():
**global_vars) **global_vars)
dest_name = non_clobber_rename(dest_name) dest_name = non_clobber_rename(dest_name)
shutil.move(source_quarantine, dest_name) shutil.move(source_quarantine, dest_name)
# Delete source folder if empty # Delete source folder if empty
try: delete_empty_folders(source_path)
os.rmdir(source_path)
except OSError:
pass
# Main folder # Main folder
if os.path.exists(source_path): if os.path.exists(source_path):
os.makedirs(global_vars['ProgBackupDir'], exist_ok=True) os.makedirs(global_vars['LogDir'], exist_ok=True)
dest_name = r'{ProgBackupDir}\AdwCleaner_{Date-Time}'.format( dest_name = r'{LogDir}\Tools\AdwCleaner'.format(
**global_vars) **global_vars)
dest_name = non_clobber_rename(dest_name) dest_name = non_clobber_rename(dest_name)
shutil.move(source_path, dest_name) shutil.move(source_path, dest_name)
def cleanup_cbs(dest_folder): def cleanup_cbs(dest_folder):
"""Safely cleanup a known CBS archive bug under Windows 7. """Safely cleanup a known CBS archive bug under Windows 7.
If a CbsPersist file is larger than 2 Gb then the auto archive feature If a CbsPersist file is larger than 2 Gb then the auto archive feature
continually fails and will fill up the system drive with temp files. continually fails and will fill up the system drive with temp files.
This function moves the temp files and CbsPersist file to a temp folder, This function moves the temp files and CbsPersist file to a temp folder,
compresses the CbsPersist files with 7-Zip, and then opens the temp folder compresses the CbsPersist files with 7-Zip, and then opens the temp folder
for the user to manually save the backup files and delete the temp files. for the user to manually save the backup files and delete the temp files.
@ -43,7 +83,7 @@ def cleanup_cbs(dest_folder):
temp_folder = r'{backup_folder}\Temp'.format(backup_folder=backup_folder) temp_folder = r'{backup_folder}\Temp'.format(backup_folder=backup_folder)
os.makedirs(backup_folder, exist_ok=True) os.makedirs(backup_folder, exist_ok=True)
os.makedirs(temp_folder, exist_ok=True) os.makedirs(temp_folder, exist_ok=True)
# Move files into temp folder # Move files into temp folder
cbs_path = r'{SYSTEMROOT}\Logs\CBS'.format(**global_vars['Env']) cbs_path = r'{SYSTEMROOT}\Logs\CBS'.format(**global_vars['Env'])
for entry in os.scandir(cbs_path): for entry in os.scandir(cbs_path):
@ -59,7 +99,7 @@ def cleanup_cbs(dest_folder):
dest_name = r'{}\{}'.format(temp_folder, entry.name) dest_name = r'{}\{}'.format(temp_folder, entry.name)
dest_name = non_clobber_rename(dest_name) dest_name = non_clobber_rename(dest_name)
shutil.move(entry.path, dest_name) shutil.move(entry.path, dest_name)
# Compress CbsPersist files with 7-Zip # Compress CbsPersist files with 7-Zip
cmd = [ cmd = [
global_vars['Tools']['SevenZip'], global_vars['Tools']['SevenZip'],
@ -68,11 +108,88 @@ def cleanup_cbs(dest_folder):
r'{}\CbsPersist*'.format(temp_folder)] r'{}\CbsPersist*'.format(temp_folder)]
run_program(cmd) run_program(cmd)
def cleanup_d7ii():
"""Sort d7II logs and remove temp items."""
d7_path = r'{}\d7II'.format(global_vars['ClientDir'])
d7_reports = r'{} Reports'.format(d7_path)
d7_temp = r'{}\Temp'.format(d7_path)
# Logs & Reports
if os.path.exists(d7_reports):
for entry in os.scandir(d7_reports):
r = re.match(r'(\d+)-(\d+)-(\d+)', entry.name)
d7_date = '{}-{:02d}-{:02d}'.format(
r.group(1), int(r.group(2)), int(r.group(3)))
d7_mlogs = r'{}\Malware Logs'.format(entry.path)
log_dest = r'{SYSTEMDRIVE}\{prefix}\Logs\{date}'.format(
prefix=KIT_NAME_SHORT,
date=d7_date,
**global_vars['Env'])
os.makedirs(r'{}\d7II'.format(log_dest), exist_ok=True)
os.makedirs(r'{}\Tools'.format(log_dest), exist_ok=True)
# Malware Logs
if os.path.exists(d7_mlogs):
m_report = 'MalwareScan_Report.txt'
for m_entry in os.scandir(d7_mlogs):
if m_entry.name == m_report:
dest_path = r'{}\d7II\{}'.format(log_dest, m_entry.name)
else:
dest_path = r'{}\Tools\{}'.format(log_dest, m_entry.name)
dest_path = non_clobber_rename(dest_path)
shutil.move(m_entry.path, dest_path)
# Other items
for o_entry in os.scandir(entry.path):
dest_path = r'{log_dest}\d7II\{name}'.format(
log_dest=log_dest,
name=o_entry.name)
dest_path = non_clobber_rename(dest_path)
# Just remove empty folders
if o_entry.is_dir():
try:
os.rmdir(o_entry.path)
except OSError:
pass
else:
continue
# Move item
shutil.move(o_entry.path, dest_path)
# Remove folder
delete_empty_folders(entry.path)
# Registry Items
for key, settings in D7_HKCR_CLEANUP.items():
delete_registry_key(HKCR, key, recurse=settings['Recurse'])
for key, settings in D7_HKCU_CLEANUP.items():
delete_registry_key(HKCU, key, recurse=settings['Recurse'])
for key, settings in D7_HKLM_CLEANUP.items():
delete_registry_key(HKLM, key, recurse=settings['Recurse'])
# Temp items
if os.path.exists(d7_path):
if os.path.exists(d7_temp):
shutil.rmtree(d7_temp)
try:
os.rmdir(d7_path)
except OSError:
pass
# Restore default UAC settings
if global_vars['OS']['Version'] == '10':
write_registry_settings(UAC_DEFAULTS_WIN10, all_users=True)
else:
# Haven't checked Win8 settings, only applying minimum set
write_registry_settings(UAC_DEFAULTS_WIN7, all_users=True)
def cleanup_desktop(): def cleanup_desktop():
"""Move known backup files and reports into the ClientDir.""" """Move known backup files and reports into the ClientDir."""
dest_folder = r'{ProgBackupDir}\Desktop_{Date-Time}'.format(**global_vars) dest_folder = r'{LogDir}\Tools'.format(**global_vars)
os.makedirs(dest_folder, exist_ok=True) os.makedirs(dest_folder, exist_ok=True)
desktop_path = r'{USERPROFILE}\Desktop'.format(**global_vars['Env']) desktop_path = r'{USERPROFILE}\Desktop'.format(**global_vars['Env'])
for entry in os.scandir(desktop_path): for entry in os.scandir(desktop_path):
# JRT, RKill, Shortcut cleaner # JRT, RKill, Shortcut cleaner
@ -80,12 +197,93 @@ def cleanup_desktop():
dest_name = r'{}\{}'.format(dest_folder, entry.name) dest_name = r'{}\{}'.format(dest_folder, entry.name)
dest_name = non_clobber_rename(dest_name) dest_name = non_clobber_rename(dest_name)
shutil.move(entry.path, dest_name) shutil.move(entry.path, dest_name)
# Remove dir if empty # Remove dir if empty
delete_empty_folders(dest_folder)
def cleanup_emsisoft():
"""Remove EmsisoftCmd files from drive root."""
source_path = r'{}\EmsisoftCmd'.format(global_vars['Env']['SYSTEMDRIVE'])
source_quarantine = r'{}\Quarantine'.format(source_path)
# Quarantine
if os.path.exists(source_quarantine):
os.makedirs(global_vars['QuarantineDir'], exist_ok=True)
dest_name = r'{QuarantineDir}\Emsisoft_{Date-Time}'.format(
**global_vars)
dest_name = non_clobber_rename(dest_name)
shutil.move(source_quarantine, dest_name)
# Remove program
if os.path.exists(source_path):
shutil.rmtree(source_path)
def cleanup_regbackups():
"""Move d7ii regbackups into backup folder."""
source_path = r'{}\Support\RegBackups'.format(
global_vars['Env']['SYSTEMDRIVE'])
# Bail early
if not os.path.exists(source_path):
return
# Make dest folder
dest_dir = r'{BackupDir}\Registry\{Date}'.format(**global_vars)
os.makedirs(dest_dir, exist_ok=True)
# Move to backup folder
for entry in os.scandir(source_path):
dest_path = r'{dest}\{name}'.format(dest=dest_dir, name=entry.name)
dest_path = non_clobber_rename(dest_path)
shutil.move(entry.path, dest_path)
# Delete source folders if empty
delete_empty_folders(r'{}\Support'.format(
global_vars['Env']['SYSTEMDRIVE']))
def delete_empty_folders(folder_path):
"""Delete all empty folders in path (depth first)."""
if not os.path.exists(folder_path) or not os.path.isdir(folder_path):
# Bail early (silently)
return
# Delete empty subfolders first
for item in os.scandir(folder_path):
if item.is_dir():
delete_empty_folders(item.path)
# Remove top folder
try: try:
os.rmdir(dest_folder) os.rmdir(folder_path)
except OSError: except OSError:
pass pass
def delete_registry_key(hive, key, recurse=False):
"""Delete a registry key and all it's subkeys."""
access = winreg.KEY_ALL_ACCESS
try:
if recurse:
# Delete all subkeys first
with winreg.OpenKeyEx(hive, key, 0, access) as k:
key_info = winreg.QueryInfoKey(k)
for x in range(key_info[0]):
subkey = r'{}\{}'.format(key, winreg.EnumKey(k, 0))
delete_registry_key(hive, subkey)
# Delete key
winreg.DeleteKey(hive, key)
except FileNotFoundError:
# Ignore
pass
def delete_registry_value(hive, key, value):
"""Delete a registry value."""
access = winreg.KEY_ALL_ACCESS
with winreg.OpenKeyEx(hive, key, 0, access) as k:
winreg.DeleteValue(k, value)
if __name__ == '__main__': if __name__ == '__main__':
print("This file is not meant to be called directly.") print("This file is not meant to be called directly.")
# vim: sts=4 sw=4 ts=4

View file

@ -32,7 +32,8 @@ COLORS = {
'BLUE': '\033[34m' 'BLUE': '\033[34m'
} }
try: try:
HKU = winreg.HKEY_USERS HKU = winreg.HKEY_USERS
HKCR = winreg.HKEY_CLASSES_ROOT
HKCU = winreg.HKEY_CURRENT_USER HKCU = winreg.HKEY_CURRENT_USER
HKLM = winreg.HKEY_LOCAL_MACHINE HKLM = winreg.HKEY_LOCAL_MACHINE
except NameError: except NameError:
@ -64,12 +65,24 @@ class NotInstalledError(Exception):
class NoProfilesError(Exception): class NoProfilesError(Exception):
pass pass
class OSInstalledLegacyError(Exception):
pass
class PathNotFoundError(Exception): class PathNotFoundError(Exception):
pass pass
class UnsupportedOSError(Exception): class UnsupportedOSError(Exception):
pass pass
class SecureBootDisabledError(Exception):
pass
class SecureBootNotAvailError(Exception):
pass
class SecureBootUnknownError(Exception):
pass
# General functions # General functions
def abort(): def abort():
"""Abort script.""" """Abort script."""
@ -155,14 +168,13 @@ def exit_script(return_value=0):
# Remove dirs (if empty) # Remove dirs (if empty)
for dir in ['BackupDir', 'LogDir', 'TmpDir']: for dir in ['BackupDir', 'LogDir', 'TmpDir']:
try: try:
dir = global_vars[dir] os.rmdir(global_vars[dir])
os.rmdir(dir)
except Exception: except Exception:
pass pass
# Open Log (if it exists) # Open Log (if it exists)
log = global_vars.get('LogFile', '') log = global_vars.get('LogFile', '')
if log and os.path.exists(log) and psutil.WINDOWS: if log and os.path.exists(log) and psutil.WINDOWS and ENABLED_OPEN_LOGS:
try: try:
extract_item('NotepadPlusPlus', silent=True) extract_item('NotepadPlusPlus', silent=True)
popen_program( popen_program(
@ -197,6 +209,30 @@ def extract_item(item, filter='', silent=False):
if not silent: if not silent:
print_warning('WARNING: Errors encountered while exctracting data') print_warning('WARNING: Errors encountered while exctracting data')
def get_process(name=None):
"""Get process by name, returns psutil.Process obj."""
proc = None
if not name:
raise GenericError
for p in psutil.process_iter():
try:
if p.name() == name:
proc = p
except psutil._exceptions.NoSuchProcess:
# Process finished during iteration? Going to ignore
pass
return proc
def get_simple_string(prompt='Enter string'):
"""Get string from user (minimal allowed character set) and return as str."""
simple_string = None
while simple_string is None:
_input = input('{}: '.format(prompt))
if re.match(r"^(\w|-| |\.|')+$", _input, re.ASCII):
simple_string = _input.strip()
return simple_string
def get_ticket_number(): def get_ticket_number():
"""Get TicketNumber from user, save in LogDir, and return as str.""" """Get TicketNumber from user, save in LogDir, and return as str."""
if not ENABLED_TICKET_NUMBERS: if not ENABLED_TICKET_NUMBERS:
@ -213,15 +249,6 @@ def get_ticket_number():
f.write(ticket_number) f.write(ticket_number)
return ticket_number return ticket_number
def get_simple_string(prompt='Enter string'):
"""Get string from user (only alphanumeric/space chars) and return as str."""
simple_string = None
while simple_string is None:
_input = input('{}: '.format(prompt))
if re.match(r'^(\w|-| )+$', _input, re.ASCII):
simple_string = _input.strip()
return simple_string
def human_readable_size(size, decimals=0): def human_readable_size(size, decimals=0):
"""Convert size in bytes to a human-readable format and return a str.""" """Convert size in bytes to a human-readable format and return a str."""
# Prep string formatting # Prep string formatting
@ -234,6 +261,8 @@ def human_readable_size(size, decimals=0):
size = int(size) size = int(size)
except ValueError: except ValueError:
size = convert_to_bytes(size) size = convert_to_bytes(size)
except TypeError:
size = -1
# Verify we have a valid size # Verify we have a valid size
if size < 0: if size < 0:
@ -254,7 +283,7 @@ def human_readable_size(size, decimals=0):
units = 'Kb' units = 'Kb'
else: else:
units = ' b' units = ' b'
# Return # Return
return '{size:>{width}.{decimals}f} {units}'.format( return '{size:>{width}.{decimals}f} {units}'.format(
size=size, width=width, decimals=decimals, units=units) size=size, width=width, decimals=decimals, units=units)
@ -445,7 +474,7 @@ def run_program(cmd, args=[], check=True, pipe=True, shell=False):
def set_title(title='~Some Title~'): def set_title(title='~Some Title~'):
"""Set title. """Set title.
Used for window title and menu titles.""" Used for window title and menu titles."""
global_vars['Title'] = title global_vars['Title'] = title
os.system('title {}'.format(title)) os.system('title {}'.format(title))
@ -470,6 +499,8 @@ def sleep(seconds=2):
def stay_awake(): def stay_awake():
"""Prevent the system from sleeping or hibernating.""" """Prevent the system from sleeping or hibernating."""
# DISABLED due to VCR2008 dependency
return
# Bail if caffeine is already running # Bail if caffeine is already running
for proc in psutil.process_iter(): for proc in psutil.process_iter():
if proc.name() == 'caffeine.exe': if proc.name() == 'caffeine.exe':
@ -477,7 +508,7 @@ def stay_awake():
# Extract and run # Extract and run
extract_item('Caffeine', silent=True) extract_item('Caffeine', silent=True)
try: try:
popen_program(global_vars['Tools']['Caffeine']) popen_program([global_vars['Tools']['Caffeine']])
except Exception: except Exception:
print_error('ERROR: No caffeine available.') print_error('ERROR: No caffeine available.')
print_warning('Please set the power setting to High Performance.') print_warning('Please set the power setting to High Performance.')
@ -549,7 +580,7 @@ def try_and_print(message='Trying...',
def upload_crash_details(): def upload_crash_details():
"""Upload log and runtime data to the CRASH_SERVER. """Upload log and runtime data to the CRASH_SERVER.
Intended for uploading to a public Nextcloud share.""" Intended for uploading to a public Nextcloud share."""
if not ENABLED_UPLOAD_DATA: if not ENABLED_UPLOAD_DATA:
raise GenericError raise GenericError
@ -558,6 +589,8 @@ def upload_crash_details():
if 'LogFile' in global_vars and global_vars['LogFile']: if 'LogFile' in global_vars and global_vars['LogFile']:
if ask('Upload crash details to {}?'.format(CRASH_SERVER['Name'])): if ask('Upload crash details to {}?'.format(CRASH_SERVER['Name'])):
with open(global_vars['LogFile']) as f: with open(global_vars['LogFile']) as f:
certificate_authority = r'{}\{}'.format(
global_vars['BinDir'], ROOT_CA_NAME)
data = '''{} data = '''{}
############################# #############################
Runtime Details: Runtime Details:
@ -572,9 +605,11 @@ global_vars: {}'''.format(f.read(), sys.argv, global_vars)
CRASH_SERVER['Url'], CRASH_SERVER['Url'],
global_vars.get('Date-Time', 'Unknown Date-Time'), global_vars.get('Date-Time', 'Unknown Date-Time'),
filename) filename)
r = requests.put(url, data=data, r = requests.put(
headers = {'X-Requested-With': 'XMLHttpRequest'}, url, data=data,
auth = (CRASH_SERVER['User'], CRASH_SERVER['Pass'])) headers={'X-Requested-With': 'XMLHttpRequest'},
auth=(CRASH_SERVER['User'], CRASH_SERVER['Pass']),
verify=certificate_authority)
# Raise exception if upload NS # Raise exception if upload NS
if not r.ok: if not r.ok:
raise Exception raise Exception
@ -631,7 +666,7 @@ def init_global_vars():
def check_os(): def check_os():
"""Set OS specific variables.""" """Set OS specific variables."""
tmp = {} tmp = {}
# Query registry # Query registry
path = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion' path = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion'
with winreg.OpenKey(HKLM, path) as key: with winreg.OpenKey(HKLM, path) as key:
@ -680,7 +715,7 @@ def check_os():
tmp['DisplayName'] = '{} x{}'.format(tmp['Name'], tmp['Arch']) tmp['DisplayName'] = '{} x{}'.format(tmp['Name'], tmp['Arch'])
if tmp['Notes']: if tmp['Notes']:
tmp['DisplayName'] += ' ({})'.format(tmp['Notes']) tmp['DisplayName'] += ' ({})'.format(tmp['Notes'])
global_vars['OS'] = tmp global_vars['OS'] = tmp
def check_tools(): def check_tools():
@ -697,7 +732,7 @@ def check_tools():
def clean_env_vars(): def clean_env_vars():
"""Remove conflicting global_vars and env variables. """Remove conflicting global_vars and env variables.
This fixes an issue where both global_vars and This fixes an issue where both global_vars and
global_vars['Env'] are expanded at the same time.""" global_vars['Env'] are expanded at the same time."""
for key in global_vars.keys(): for key in global_vars.keys():
@ -723,6 +758,9 @@ def make_tmp_dirs():
"""Make temp directories.""" """Make temp directories."""
os.makedirs(global_vars['BackupDir'], exist_ok=True) os.makedirs(global_vars['BackupDir'], exist_ok=True)
os.makedirs(global_vars['LogDir'], exist_ok=True) os.makedirs(global_vars['LogDir'], exist_ok=True)
os.makedirs(r'{}\{}'.format(
global_vars['LogDir'], KIT_NAME_FULL), exist_ok=True)
os.makedirs(r'{}\Tools'.format(global_vars['LogDir']), exist_ok=True)
os.makedirs(global_vars['TmpDir'], exist_ok=True) os.makedirs(global_vars['TmpDir'], exist_ok=True)
def set_common_vars(): def set_common_vars():
@ -738,11 +776,9 @@ def set_common_vars():
**global_vars) **global_vars)
global_vars['ClientDir'] = r'{SYSTEMDRIVE}\{prefix}'.format( global_vars['ClientDir'] = r'{SYSTEMDRIVE}\{prefix}'.format(
prefix=KIT_NAME_SHORT, **global_vars['Env']) prefix=KIT_NAME_SHORT, **global_vars['Env'])
global_vars['BackupDir'] = r'{ClientDir}\Backups\{Date}'.format( global_vars['BackupDir'] = r'{ClientDir}\Backups'.format(
**global_vars) **global_vars)
global_vars['LogDir'] = r'{ClientDir}\Info\{Date}'.format( global_vars['LogDir'] = r'{ClientDir}\Logs\{Date}'.format(
**global_vars)
global_vars['ProgBackupDir'] = r'{ClientDir}\Backups'.format(
**global_vars) **global_vars)
global_vars['QuarantineDir'] = r'{ClientDir}\Quarantine'.format( global_vars['QuarantineDir'] = r'{ClientDir}\Quarantine'.format(
**global_vars) **global_vars)
@ -751,7 +787,7 @@ def set_common_vars():
def set_linux_vars(): def set_linux_vars():
"""Set common variables in a Linux environment. """Set common variables in a Linux environment.
These assume we're running under a WK-Linux build.""" These assume we're running under a WK-Linux build."""
result = run_program(['mktemp', '-d']) result = run_program(['mktemp', '-d'])
global_vars['TmpDir'] = result.stdout.decode().strip() global_vars['TmpDir'] = result.stdout.decode().strip()
@ -765,5 +801,12 @@ def set_linux_vars():
'SevenZip': '7z', 'SevenZip': '7z',
} }
def set_log_file(log_name):
"""Sets global var LogFile and creates path as needed."""
folder_path = r'{}\{}'.format(global_vars['LogDir'], KIT_NAME_FULL)
log_file = r'{}\{}'.format(folder_path, log_name)
os.makedirs(folder_path, exist_ok=True)
global_vars['LogFile'] = log_file
if __name__ == '__main__': if __name__ == '__main__':
print("This file is not meant to be called directly.") print("This file is not meant to be called directly.")

View file

@ -126,11 +126,11 @@ def cleanup_transfer(dest_path):
if not os.path.exists(dest_path): if not os.path.exists(dest_path):
# Bail if dest_path was empty and removed # Bail if dest_path was empty and removed
raise Exception raise Exception
# Fix attributes # Fix attributes
cmd = ['attrib', '-a', '-h', '-r', '-s', dest_path] cmd = ['attrib', '-a', '-h', '-r', '-s', dest_path]
run_program(cmd, check=False) run_program(cmd, check=False)
for root, dirs, files in os.walk(dest_path, topdown=False): for root, dirs, files in os.walk(dest_path, topdown=False):
for name in dirs: for name in dirs:
# Remove empty directories and junction points # Remove empty directories and junction points
@ -153,6 +153,69 @@ def cleanup_transfer(dest_path):
except Exception: except Exception:
pass pass
def find_core_storage_volumes(device_path=None):
"""Try to create block devices for any Apple CoreStorage volumes."""
corestorage_uuid = '53746f72-6167-11aa-aa11-00306543ecac'
dmsetup_cmd_file = '{TmpDir}/dmsetup_command'.format(**global_vars)
# Get CoreStorage devices
cmd = [
'lsblk', '--json', '--list', '--paths',
'--output', 'NAME,PARTTYPE']
if device_path:
cmd.append(device_path)
result = run_program(cmd)
json_data = json.loads(result.stdout.decode())
devs = json_data.get('blockdevices', [])
devs = [d for d in devs if d.get('parttype', '') == corestorage_uuid]
if devs:
print_standard(' ')
print_standard('Detected CoreStorage partition{}'.format(
'' if len(devs) == 1 else 's'))
print_standard(' Scanning for inner volume(s)....')
# Search for inner volumes and setup dev mappers
for dev in devs:
dev_path = dev.get('name', '')
if not dev_path:
# Can't setup block device without the dev path
continue
dev_name = re.sub(r'.*/', '', dev_path)
log_path = '{LogDir}/testdisk_{dev_name}.log'.format(
dev_name=dev_name, **global_vars)
# Run TestDisk
cmd = [
'sudo', 'testdisk',
'/logname', log_path, '/debug', '/log',
'/cmd', dev_path, 'partition_none,analyze']
result = run_program(cmd, check=False)
if result.returncode:
# i.e. return code is non-zero
continue
if not os.path.exists(log_path):
# TestDisk failed to write log
continue
# Check log for found volumes
cs_vols = {}
with open(log_path, 'r') as f:
for line in f.readlines():
r = re.match(
r'^.*echo "([^"]+)" . dmsetup create test(\d)$',
line.strip(),
re.IGNORECASE)
if r:
cs_name = 'CoreStorage_{}_{}'.format(dev_name, r.group(2))
cs_vols[cs_name] = r.group(1)
# Create mapper device(s)
for name, dm_cmd in sorted(cs_vols.items()):
with open(dmsetup_cmd_file, 'w') as f:
f.write(dm_cmd)
cmd = ['sudo', 'dmsetup', 'create', name, dmsetup_cmd_file]
run_program(cmd, check=False)
def fix_path_sep(path_str): def fix_path_sep(path_str):
"""Replace non-native and duplicate dir separators, returns str.""" """Replace non-native and duplicate dir separators, returns str."""
return re.sub(r'(\\|/)+', lambda s: os.sep, path_str) return re.sub(r'(\\|/)+', lambda s: os.sep, path_str)
@ -187,14 +250,20 @@ def get_mounted_volumes():
mounted_volumes.extend(item.get('children', [])) mounted_volumes.extend(item.get('children', []))
return {item['source']: item for item in mounted_volumes} return {item['source']: item for item in mounted_volumes}
def mount_all_volumes(): def mount_volumes(all_devices=True, device_path=None, read_write=False):
"""Mount all detected filesystems.""" """Mount all detected filesystems."""
report = {} report = {}
cmd = [
'lsblk', '--json', '--paths',
'--output', 'NAME,FSTYPE,LABEL,UUID,PARTTYPE,TYPE,SIZE']
if not all_devices and device_path:
# Only mount volumes for specific device
cmd.append(device_path)
# Check for Apple CoreStorage volumes first
find_core_storage_volumes(device_path)
# Get list of block devices # Get list of block devices
cmd = [
'lsblk', '-J', '-p',
'-o', 'NAME,FSTYPE,LABEL,UUID,PARTTYPE,TYPE,SIZE']
result = run_program(cmd) result = run_program(cmd)
json_data = json.loads(result.stdout.decode()) json_data = json.loads(result.stdout.decode())
devs = json_data.get('blockdevices', []) devs = json_data.get('blockdevices', [])
@ -202,11 +271,14 @@ def mount_all_volumes():
# Get list of volumes # Get list of volumes
volumes = {} volumes = {}
for dev in devs: for dev in devs:
if not dev.get('children', []):
volumes.update({dev['name']: dev})
for child in dev.get('children', []): for child in dev.get('children', []):
volumes.update({child['name']: child}) if not child.get('children', []):
volumes.update({child['name']: child})
for grandchild in child.get('children', []): for grandchild in child.get('children', []):
volumes.update({grandchild['name']: grandchild}) volumes.update({grandchild['name']: grandchild})
# Get list of mounted volumes # Get list of mounted volumes
mounted_volumes = get_mounted_volumes() mounted_volumes = get_mounted_volumes()
@ -233,8 +305,11 @@ def mount_all_volumes():
vol_data['show_data']['warning'] = True vol_data['show_data']['warning'] = True
else: else:
# Mount volume # Mount volume
cmd = ['udevil', 'mount',
'-o', 'rw' if read_write else 'ro',
vol_path]
try: try:
run_program(['udevil', 'mount', '-o', 'ro', vol_path]) run_program(cmd)
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
vol_data['show_data']['data'] = 'Failed to mount' vol_data['show_data']['data'] = 'Failed to mount'
vol_data['show_data']['error'] = True vol_data['show_data']['error'] = True
@ -242,11 +317,16 @@ def mount_all_volumes():
mounted_volumes = get_mounted_volumes() mounted_volumes = get_mounted_volumes()
# Format pretty result string # Format pretty result string
if vol_data['show_data']['data'] != 'Failed to mount': if vol_data['show_data']['data'] == 'Failed to mount':
vol_data['mount_point'] = None
else:
size_used = human_readable_size( size_used = human_readable_size(
mounted_volumes[vol_path]['used']) mounted_volumes[vol_path]['used'])
size_avail = human_readable_size( size_avail = human_readable_size(
mounted_volumes[vol_path]['avail']) mounted_volumes[vol_path]['avail'])
vol_data['size_avail'] = size_avail
vol_data['size_used'] = size_used
vol_data['mount_point'] = mounted_volumes[vol_path]['target']
vol_data['show_data']['data'] = 'Mounted on {}'.format( vol_data['show_data']['data'] = 'Mounted on {}'.format(
mounted_volumes[vol_path]['target']) mounted_volumes[vol_path]['target'])
vol_data['show_data']['data'] = '{:40} ({} used, {} free)'.format( vol_data['show_data']['data'] = '{:40} ({} used, {} free)'.format(
@ -277,7 +357,7 @@ def mount_backup_shares(read_write=False):
if server['Mounted']: if server['Mounted']:
print_warning(mounted_str) print_warning(mounted_str)
continue continue
mount_network_share(server, read_write) mount_network_share(server, read_write)
def mount_network_share(server, read_write=False): def mount_network_share(server, read_write=False):
@ -339,12 +419,12 @@ def run_fast_copy(items, dest):
"""Copy items to dest using FastCopy.""" """Copy items to dest using FastCopy."""
if not items: if not items:
raise Exception raise Exception
cmd = [global_vars['Tools']['FastCopy'], *FAST_COPY_ARGS] cmd = [global_vars['Tools']['FastCopy'], *FAST_COPY_ARGS]
cmd.append(r'/logfile={}\FastCopy.log'.format(global_vars['LogDir'])) cmd.append(r'/logfile={LogDir}\Tools\FastCopy.log'.format(**global_vars))
cmd.extend(items) cmd.extend(items)
cmd.append('/to={}\\'.format(dest)) cmd.append('/to={}\\'.format(dest))
run_program(cmd) run_program(cmd)
def run_wimextract(source, items, dest): def run_wimextract(source, items, dest):
@ -411,7 +491,7 @@ def list_source_items(source_obj, rel_path=None):
def scan_source(source_obj, dest_path, rel_path='', interactive=True): def scan_source(source_obj, dest_path, rel_path='', interactive=True):
"""Scan source for files/folders to transfer, returns list. """Scan source for files/folders to transfer, returns list.
This will scan the root and (recursively) any Windows.old folders.""" This will scan the root and (recursively) any Windows.old folders."""
selected_items = [] selected_items = []
win_olds = [] win_olds = []
@ -488,7 +568,7 @@ def scan_source(source_obj, dest_path, rel_path='', interactive=True):
'{}{}{}'.format(dest_path, os.sep, old.name), '{}{}{}'.format(dest_path, os.sep, old.name),
rel_path=old.name, rel_path=old.name,
interactive=False)) interactive=False))
# Done # Done
return selected_items return selected_items
@ -632,7 +712,7 @@ def select_source(backup_prefix):
item.name, # Image file item.name, # Image file
), ),
'Source': item}) 'Source': item})
# Check for local sources # Check for local sources
print_standard('Scanning for local sources...') print_standard('Scanning for local sources...')
set_thread_error_mode(silent=True) # Prevents "No disk" popups set_thread_error_mode(silent=True) # Prevents "No disk" popups
@ -672,7 +752,7 @@ def select_source(backup_prefix):
' Local', d.mountpoint, item.name), ' Local', d.mountpoint, item.name),
'Sort': r'{}{}'.format(d.mountpoint, item.name), 'Sort': r'{}{}'.format(d.mountpoint, item.name),
'Source': item}) 'Source': item})
set_thread_error_mode(silent=False) # Return to normal set_thread_error_mode(silent=False) # Return to normal
# Build Menu # Build Menu
@ -700,7 +780,7 @@ def select_source(backup_prefix):
umount_backup_shares() umount_backup_shares()
pause("Press Enter to exit...") pause("Press Enter to exit...")
exit_script() exit_script()
# Sanity check # Sanity check
if selected_source.is_file(): if selected_source.is_file():
# Image-Based # Image-Based
@ -708,7 +788,7 @@ def select_source(backup_prefix):
print_error('ERROR: Unsupported image: {}'.format( print_error('ERROR: Unsupported image: {}'.format(
selected_source.path)) selected_source.path))
raise GenericError raise GenericError
# Done # Done
return selected_source return selected_source
@ -716,7 +796,7 @@ def select_volume(title='Select disk', auto_select=True):
"""Select disk from attached disks. returns dict.""" """Select disk from attached disks. returns dict."""
actions = [{'Name': 'Quit', 'Letter': 'Q'}] actions = [{'Name': 'Quit', 'Letter': 'Q'}]
disks = [] disks = []
# Build list of disks # Build list of disks
set_thread_error_mode(silent=True) # Prevents "No disk" popups set_thread_error_mode(silent=True) # Prevents "No disk" popups
for d in psutil.disk_partitions(): for d in psutil.disk_partitions():
@ -737,11 +817,11 @@ def select_volume(title='Select disk', auto_select=True):
info['Display Name'] = '{} ({})'.format(info['Name'], free) info['Display Name'] = '{} ({})'.format(info['Name'], free)
disks.append(info) disks.append(info)
set_thread_error_mode(silent=False) # Return to normal set_thread_error_mode(silent=False) # Return to normal
# Skip menu? # Skip menu?
if len(disks) == 1 and auto_select: if len(disks) == 1 and auto_select:
return disks[0] return disks[0]
# Show menu # Show menu
selection = menu_select(title, main_entries=disks, action_entries=actions) selection = menu_select(title, main_entries=disks, action_entries=actions)
if selection == 'Q': if selection == 'Q':
@ -751,12 +831,12 @@ def select_volume(title='Select disk', auto_select=True):
def set_thread_error_mode(silent=True): def set_thread_error_mode(silent=True):
"""Disable or Enable Windows error message dialogs. """Disable or Enable Windows error message dialogs.
Disable when scanning for disks to avoid popups for empty cardreaders, etc Disable when scanning for disks to avoid popups for empty cardreaders, etc
""" """
# Code borrowed from: https://stackoverflow.com/a/29075319 # Code borrowed from: https://stackoverflow.com/a/29075319
kernel32 = ctypes.WinDLL('kernel32') kernel32 = ctypes.WinDLL('kernel32')
if silent: if silent:
kernel32.SetThreadErrorMode(SEM_FAIL, ctypes.byref(SEM_NORMAL)) kernel32.SetThreadErrorMode(SEM_FAIL, ctypes.byref(SEM_NORMAL))
else: else:

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,7 @@
# Wizard Kit: Functions - Diagnostics # Wizard Kit: Functions - Diagnostics
import ctypes
from functions.common import * from functions.common import *
# STATIC VARIABLES # STATIC VARIABLES
@ -30,12 +32,71 @@ def check_connection():
result = try_and_print(message='Ping test...', function=ping, cs='OK') result = try_and_print(message='Ping test...', function=ping, cs='OK')
if result['CS']: if result['CS']:
break break
if not ask('ERROR: System appears offline, try again?'):
if ask('Continue anyway?'):
break
else:
abort()
def check_secure_boot_status(show_alert=False):
"""Checks UEFI Secure Boot status via PowerShell."""
boot_mode = get_boot_mode()
cmd = ['PowerShell', '-Command', 'Confirm-SecureBootUEFI']
result = run_program(cmd, check=False)
# Check results
if result.returncode == 0:
out = result.stdout.decode()
if 'True' in out:
# It's on, do nothing
return
elif 'False' in out:
if show_alert:
show_alert_box('Secure Boot DISABLED')
raise SecureBootDisabledError
else: else:
if not ask('ERROR: System appears offline, try again?'): if show_alert:
if ask('Continue anyway?'): show_alert_box('Secure Boot status UNKNOWN')
break raise SecureBootUnknownError
else: else:
abort() if boot_mode != 'UEFI':
if (show_alert and
global_vars['OS']['Version'] in ('8', '8.1', '10')):
# OS supports Secure Boot
show_alert_box('Secure Boot DISABLED\n\nOS installed LEGACY')
raise OSInstalledLegacyError
else:
# Check error message
err = result.stderr.decode()
if 'Cmdlet not supported' in err:
if show_alert:
show_alert_box('Secure Boot UNAVAILABLE?')
raise SecureBootNotAvailError
else:
if show_alert:
show_alert_box('Secure Boot ERROR')
raise GenericError
def get_boot_mode():
"""Check if Windows is booted in UEFI or Legacy mode, returns str."""
kernel = ctypes.windll.kernel32
firmware_type = ctypes.c_uint()
# Get value from kernel32 API
try:
kernel.GetFirmwareType(ctypes.byref(firmware_type))
except:
# Just set to zero
firmware_type = ctypes.c_uint(0)
# Set return value
type_str = 'Unknown'
if firmware_type.value == 1:
type_str = 'Legacy'
elif firmware_type.value == 2:
type_str = 'UEFI'
return type_str
def run_autoruns(): def run_autoruns():
"""Run AutoRuns in the background with VirusTotal checks enabled.""" """Run AutoRuns in the background with VirusTotal checks enabled."""
@ -61,11 +122,23 @@ def run_hwinfo_sensors():
f.write('SummaryOnly=0\n') f.write('SummaryOnly=0\n')
popen_program(global_vars['Tools']['HWiNFO']) popen_program(global_vars['Tools']['HWiNFO'])
def run_nircmd(*cmd):
"""Run custom NirCmd."""
extract_item('NirCmd', silent=True)
cmd = [global_vars['Tools']['NirCmd'], *cmd]
run_program(cmd, check=False)
def run_xmplay(): def run_xmplay():
"""Run XMPlay to test audio.""" """Run XMPlay to test audio."""
extract_item('XMPlay', silent=True) extract_item('XMPlay', silent=True)
cmd = [global_vars['Tools']['XMPlay'], cmd = [global_vars['Tools']['XMPlay'],
r'{BinDir}\XMPlay\music.7z'.format(**global_vars)] r'{BinDir}\XMPlay\music.7z'.format(**global_vars)]
# Unmute audio first
extract_item('NirCmd', silent=True)
run_nircmd('mutesysvolume', '0')
# Open XMPlay
popen_program(cmd) popen_program(cmd)
def run_hitmanpro(): def run_hitmanpro():
@ -74,7 +147,7 @@ def run_hitmanpro():
cmd = [ cmd = [
global_vars['Tools']['HitmanPro'], global_vars['Tools']['HitmanPro'],
'/quiet', '/noinstall', '/noupload', '/quiet', '/noinstall', '/noupload',
r'/log={LogDir}\hitman.xml'.format(**global_vars)] r'/log={LogDir}\Tools\HitmanPro.txt'.format(**global_vars)]
popen_program(cmd) popen_program(cmd)
def run_process_killer(): def run_process_killer():
@ -92,23 +165,25 @@ def run_rkill():
extract_item('RKill', silent=True) extract_item('RKill', silent=True)
cmd = [ cmd = [
global_vars['Tools']['RKill'], global_vars['Tools']['RKill'],
'-l', r'{LogDir}\RKill.log'.format(**global_vars), '-s', '-l', r'{LogDir}\Tools\RKill.log'.format(**global_vars),
'-new_console:n', '-new_console:s33V'] '-new_console:n', '-new_console:s33V']
run_program(cmd, check=False) run_program(cmd, check=False)
wait_for_process('RKill') wait_for_process('RKill')
kill_process('notepad.exe')
# RKill cleanup # RKill cleanup
desktop_path = r'{USERPROFILE}\Desktop'.format(**global_vars['Env']) desktop_path = r'{USERPROFILE}\Desktop'.format(**global_vars['Env'])
if os.path.exists(desktop_path): if os.path.exists(desktop_path):
for item in os.scandir(desktop_path): for item in os.scandir(desktop_path):
if re.search(r'^RKill', item.name, re.IGNORECASE): if re.search(r'^RKill', item.name, re.IGNORECASE):
dest = re.sub(r'^(.*)\.', '\1_{Date-Time}.'.format( dest = r'{LogDir}\Tools\{name}'.format(
**global_vars), item.name)
dest = r'{ClientDir}\Info\{name}'.format(
name=dest, **global_vars) name=dest, **global_vars)
dest = non_clobber_rename(dest) dest = non_clobber_rename(dest)
shutil.move(item.path, dest) shutil.move(item.path, dest)
def show_alert_box(message, title='Wizard Kit Warning'):
"""Show Windows alert box with message."""
message_box = ctypes.windll.user32.MessageBoxW
message_box(None, message, title, 0x00001030)
if __name__ == '__main__': if __name__ == '__main__':
print("This file is not meant to be called directly.") print("This file is not meant to be called directly.")

View file

@ -14,13 +14,13 @@ REGEX_DISK_RAW = re.compile(r'Disk ID: 00000000', re.IGNORECASE)
def assign_volume_letters(): def assign_volume_letters():
"""Assign a volume letter to all available volumes.""" """Assign a volume letter to all available volumes."""
remove_volume_letters() remove_volume_letters()
# Write script # Write script
script = [] script = []
for vol in get_volumes(): for vol in get_volumes():
script.append('select volume {}'.format(vol['Number'])) script.append('select volume {}'.format(vol['Number']))
script.append('assign') script.append('assign')
# Run # Run
run_diskpart(script) run_diskpart(script)
@ -35,7 +35,7 @@ def get_boot_mode():
boot_mode = 'UEFI' boot_mode = 'UEFI'
except: except:
boot_mode = 'Unknown' boot_mode = 'Unknown'
return boot_mode return boot_mode
def get_disk_details(disk): def get_disk_details(disk):
@ -44,7 +44,7 @@ def get_disk_details(disk):
script = [ script = [
'select disk {}'.format(disk['Number']), 'select disk {}'.format(disk['Number']),
'detail disk'] 'detail disk']
# Run # Run
try: try:
result = run_diskpart(script) result = run_diskpart(script)
@ -60,13 +60,13 @@ def get_disk_details(disk):
tmp = [s.split(':') for s in tmp if ':' in s] tmp = [s.split(':') for s in tmp if ':' in s]
# Add key/value pairs to the details variable and return dict # Add key/value pairs to the details variable and return dict
details.update({key.strip(): value.strip() for (key, value) in tmp}) details.update({key.strip(): value.strip() for (key, value) in tmp})
return details return details
def get_disks(): def get_disks():
"""Get list of attached disks using DiskPart.""" """Get list of attached disks using DiskPart."""
disks = [] disks = []
try: try:
# Run script # Run script
result = run_diskpart(['list disk']) result = run_diskpart(['list disk'])
@ -79,7 +79,7 @@ def get_disks():
num = tmp[0] num = tmp[0]
size = human_readable_size(tmp[1]) size = human_readable_size(tmp[1])
disks.append({'Number': num, 'Size': size}) disks.append({'Number': num, 'Size': size})
return disks return disks
def get_partition_details(disk, partition): def get_partition_details(disk, partition):
@ -89,7 +89,7 @@ def get_partition_details(disk, partition):
'select disk {}'.format(disk['Number']), 'select disk {}'.format(disk['Number']),
'select partition {}'.format(partition['Number']), 'select partition {}'.format(partition['Number']),
'detail partition'] 'detail partition']
# Diskpart details # Diskpart details
try: try:
# Run script # Run script
@ -111,14 +111,14 @@ def get_partition_details(disk, partition):
tmp = [s.split(':') for s in tmp if ':' in s] tmp = [s.split(':') for s in tmp if ':' in s]
# Add key/value pairs to the details variable and return dict # Add key/value pairs to the details variable and return dict
details.update({key.strip(): value.strip() for (key, value) in tmp}) details.update({key.strip(): value.strip() for (key, value) in tmp})
# Get MBR type / GPT GUID for extra details on "Unknown" partitions # Get MBR type / GPT GUID for extra details on "Unknown" partitions
guid = partition_uids.lookup_guid(details.get('Type')) guid = partition_uids.lookup_guid(details.get('Type'))
if guid: if guid:
details.update({ details.update({
'Description': guid.get('Description', '')[:29], 'Description': guid.get('Description', '')[:29],
'OS': guid.get('OS', 'Unknown')[:27]}) 'OS': guid.get('OS', 'Unknown')[:27]})
if 'Letter' in details: if 'Letter' in details:
# Disk usage # Disk usage
try: try:
@ -128,7 +128,7 @@ def get_partition_details(disk, partition):
details['Error'] = err.strerror details['Error'] = err.strerror
else: else:
details['Used Space'] = human_readable_size(tmp.used) details['Used Space'] = human_readable_size(tmp.used)
# fsutil details # fsutil details
cmd = [ cmd = [
'fsutil', 'fsutil',
@ -151,14 +151,14 @@ def get_partition_details(disk, partition):
tmp = [s.split(':') for s in tmp if ':' in s] tmp = [s.split(':') for s in tmp if ':' in s]
# Add key/value pairs to the details variable and return dict # Add key/value pairs to the details variable and return dict
details.update({key.strip(): value.strip() for (key, value) in tmp}) details.update({key.strip(): value.strip() for (key, value) in tmp})
# Set Volume Name # Set Volume Name
details['Name'] = details.get('Volume Name', '') details['Name'] = details.get('Volume Name', '')
# Set FileSystem Type # Set FileSystem Type
if details.get('FileSystem', '') not in ['RAW', 'Unknown']: if details.get('FileSystem', '') not in ['RAW', 'Unknown']:
details['FileSystem'] = details.get('File System Name', 'Unknown') details['FileSystem'] = details.get('File System Name', 'Unknown')
return details return details
def get_partitions(disk): def get_partitions(disk):
@ -167,7 +167,7 @@ def get_partitions(disk):
script = [ script = [
'select disk {}'.format(disk['Number']), 'select disk {}'.format(disk['Number']),
'list partition'] 'list partition']
try: try:
# Run script # Run script
result = run_diskpart(script) result = run_diskpart(script)
@ -181,7 +181,7 @@ def get_partitions(disk):
num = tmp[0] num = tmp[0]
size = human_readable_size(tmp[1]) size = human_readable_size(tmp[1])
partitions.append({'Number': num, 'Size': size}) partitions.append({'Number': num, 'Size': size})
return partitions return partitions
def get_table_type(disk): def get_table_type(disk):
@ -190,7 +190,7 @@ def get_table_type(disk):
script = [ script = [
'select disk {}'.format(disk['Number']), 'select disk {}'.format(disk['Number']),
'uniqueid disk'] 'uniqueid disk']
try: try:
result = run_diskpart(script) result = run_diskpart(script)
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
@ -203,7 +203,7 @@ def get_table_type(disk):
part_type = 'MBR' part_type = 'MBR'
elif REGEX_DISK_RAW.search(output): elif REGEX_DISK_RAW.search(output):
part_type = 'RAW' part_type = 'RAW'
return part_type return part_type
def get_volumes(): def get_volumes():
@ -218,7 +218,7 @@ def get_volumes():
output = result.stdout.decode().strip() output = result.stdout.decode().strip()
for tmp in re.findall(r'Volume (\d+)\s+([A-Za-z]?)\s+', output): for tmp in re.findall(r'Volume (\d+)\s+([A-Za-z]?)\s+', output):
vols.append({'Number': tmp[0], 'Letter': tmp[1]}) vols.append({'Number': tmp[0], 'Letter': tmp[1]})
return vols return vols
def is_bad_partition(par): def is_bad_partition(par):
@ -229,7 +229,7 @@ def prep_disk_for_formatting(disk=None):
"""Gather details about the disk and its partitions.""" """Gather details about the disk and its partitions."""
disk['Format Warnings'] = '\n' disk['Format Warnings'] = '\n'
width = len(str(len(disk['Partitions']))) width = len(str(len(disk['Partitions'])))
# Bail early # Bail early
if disk is None: if disk is None:
raise Exception('Disk not provided.') raise Exception('Disk not provided.')
@ -242,7 +242,7 @@ def prep_disk_for_formatting(disk=None):
else: else:
if (ask("Setup Windows to use BIOS/Legacy booting?")): if (ask("Setup Windows to use BIOS/Legacy booting?")):
disk['Use GPT'] = False disk['Use GPT'] = False
# Set Display and Warning Strings # Set Display and Warning Strings
if len(disk['Partitions']) == 0: if len(disk['Partitions']) == 0:
disk['Format Warnings'] += 'No partitions found\n' disk['Format Warnings'] += 'No partitions found\n'
@ -252,7 +252,7 @@ def prep_disk_for_formatting(disk=None):
width = width, width = width,
size = partition['Size'], size = partition['Size'],
fs = partition['FileSystem']) fs = partition['FileSystem'])
if is_bad_partition(partition): if is_bad_partition(partition):
# Set display string using partition description & OS type # Set display string using partition description & OS type
display += '\t\t{q}{name}{q}\t{desc} ({os})'.format( display += '\t\t{q}{name}{q}\t{desc} ({os})'.format(
@ -290,13 +290,13 @@ def remove_volume_letters(keep=None):
"""Remove all assigned volume letters using DiskPart.""" """Remove all assigned volume letters using DiskPart."""
if not keep: if not keep:
keep = '' keep = ''
script = [] script = []
for vol in get_volumes(): for vol in get_volumes():
if vol['Letter'].upper() != keep.upper(): if vol['Letter'].upper() != keep.upper():
script.append('select volume {}'.format(vol['Number'])) script.append('select volume {}'.format(vol['Number']))
script.append('remove noerr') script.append('remove noerr')
# Run script # Run script
try: try:
run_diskpart(script) run_diskpart(script)
@ -306,12 +306,12 @@ def remove_volume_letters(keep=None):
def run_diskpart(script): def run_diskpart(script):
"""Run DiskPart script.""" """Run DiskPart script."""
tempfile = r'{}\diskpart.script'.format(global_vars['Env']['TMP']) tempfile = r'{}\diskpart.script'.format(global_vars['Env']['TMP'])
# Write script # Write script
with open(tempfile, 'w') as f: with open(tempfile, 'w') as f:
for line in script: for line in script:
f.write('{}\n'.format(line)) f.write('{}\n'.format(line))
# Run script # Run script
cmd = [ cmd = [
r'{}\Windows\System32\diskpart.exe'.format( r'{}\Windows\System32\diskpart.exe'.format(
@ -335,7 +335,7 @@ def scan_disks():
# Get partition info for disk # Get partition info for disk
disk['Partitions'] = get_partitions(disk) disk['Partitions'] = get_partitions(disk)
for partition in disk['Partitions']: for partition in disk['Partitions']:
# Get partition details # Get partition details
partition.update(get_partition_details(disk, partition)) partition.update(get_partition_details(disk, partition))
@ -364,12 +364,12 @@ def select_disk(title='Which disk?', disks=[]):
fs = partition['FileSystem']) fs = partition['FileSystem'])
if partition['Name']: if partition['Name']:
p_name += '\t"{}"'.format(partition['Name']) p_name += '\t"{}"'.format(partition['Name'])
# Show unsupported partition(s) # Show unsupported partition(s)
if is_bad_partition(partition): if is_bad_partition(partition):
p_name = '{YELLOW}{p_name}{CLEAR}'.format( p_name = '{YELLOW}{p_name}{CLEAR}'.format(
p_name=p_name, **COLORS) p_name=p_name, **COLORS)
display_name += '\n\t\t\t{}'.format(p_name) display_name += '\n\t\t\t{}'.format(p_name)
if not disk['Partitions']: if not disk['Partitions']:
display_name += '\n\t\t\t{}No partitions found.{}'.format( display_name += '\n\t\t\t{}No partitions found.{}'.format(

File diff suppressed because it is too large Load diff

View file

@ -68,7 +68,8 @@ def backup_file_list():
def backup_power_plans(): def backup_power_plans():
"""Export current power plans.""" """Export current power plans."""
os.makedirs(r'{BackupDir}\Power Plans'.format(**global_vars), exist_ok=True) os.makedirs(r'{BackupDir}\Power Plans\{Date}'.format(
**global_vars), exist_ok=True)
plans = run_program(['powercfg', '/L']) plans = run_program(['powercfg', '/L'])
plans = plans.stdout.decode().splitlines() plans = plans.stdout.decode().splitlines()
plans = [p for p in plans if re.search(r'^Power Scheme', p)] plans = [p for p in plans if re.search(r'^Power Scheme', p)]
@ -76,22 +77,24 @@ def backup_power_plans():
guid = re.sub(r'Power Scheme GUID:\s+([0-9a-f\-]+).*', r'\1', p) guid = re.sub(r'Power Scheme GUID:\s+([0-9a-f\-]+).*', r'\1', p)
name = re.sub( name = re.sub(
r'Power Scheme GUID:\s+[0-9a-f\-]+\s+\(([^\)]+)\).*', r'\1', p) r'Power Scheme GUID:\s+[0-9a-f\-]+\s+\(([^\)]+)\).*', r'\1', p)
out = r'{BackupDir}\Power Plans\{name}.pow'.format( out = r'{BackupDir}\Power Plans\{Date}\{name}.pow'.format(
name=name, **global_vars) name=name, **global_vars)
if not os.path.exists(out): if not os.path.exists(out):
cmd = ['powercfg', '-export', out, guid] cmd = ['powercfg', '-export', out, guid]
run_program(cmd, check=False) run_program(cmd, check=False)
def backup_registry(): def backup_registry(overwrite=False):
"""Backup registry including user hives.""" """Backup registry including user hives."""
extract_item('erunt', silent=True) extract_item('erunt', silent=True)
cmd = [ cmd = [
global_vars['Tools']['ERUNT'], global_vars['Tools']['ERUNT'],
r'{BackupDir}\Registry'.format(**global_vars), r'{BackupDir}\Registry\{Date}'.format(**global_vars),
'sysreg', 'sysreg',
'curuser', 'curuser',
'otherusers', 'otherusers',
'/noprogresswindow'] '/noprogresswindow']
if overwrite:
cmd.append('/noconfirmdelete')
run_program(cmd) run_program(cmd)
def get_folder_size(path): def get_folder_size(path):
@ -162,7 +165,7 @@ def get_installed_office():
def get_shell_path(folder, user='current'): def get_shell_path(folder, user='current'):
"""Get shell path using SHGetKnownFolderPath via knownpaths, returns str. """Get shell path using SHGetKnownFolderPath via knownpaths, returns str.
NOTE: Only works for the current user. NOTE: Only works for the current user.
Code based on https://gist.github.com/mkropat/7550097 Code based on https://gist.github.com/mkropat/7550097
""" """
@ -175,14 +178,14 @@ def get_shell_path(folder, user='current'):
except AttributeError: except AttributeError:
# Unknown folder ID, ignore and return None # Unknown folder ID, ignore and return None
pass pass
if folderid: if folderid:
try: try:
path = knownpaths.get_path(folderid, getattr(knownpaths.UserHandle, user)) path = knownpaths.get_path(folderid, getattr(knownpaths.UserHandle, user))
except PathNotFoundError: except PathNotFoundError:
# Folder not found, ignore and return None # Folder not found, ignore and return None
pass pass
return path return path
def get_user_data_paths(user): def get_user_data_paths(user):
@ -196,7 +199,7 @@ def get_user_data_paths(user):
'Extra Folders': {}, 'Extra Folders': {},
} }
unload_hive = False unload_hive = False
if user['Name'] == global_vars['Env']['USERNAME']: if user['Name'] == global_vars['Env']['USERNAME']:
# We can use SHGetKnownFolderPath for the current user # We can use SHGetKnownFolderPath for the current user
paths['Profile']['Path'] = get_shell_path('Profile') paths['Profile']['Path'] = get_shell_path('Profile')
@ -212,7 +215,7 @@ def get_user_data_paths(user):
except Exception: except Exception:
# Profile path not found, leaving as None. # Profile path not found, leaving as None.
pass pass
# Shell folders (Prep) # Shell folders (Prep)
if not reg_path_exists(HKU, hive_path) and paths['Profile']['Path']: if not reg_path_exists(HKU, hive_path) and paths['Profile']['Path']:
# User not logged-in, loading hive # User not logged-in, loading hive
@ -226,7 +229,7 @@ def get_user_data_paths(user):
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
# Failed to load user hive # Failed to load user hive
pass pass
# Shell folders # Shell folders
shell_folders = r'{}\{}'.format(hive_path, REG_SHELL_FOLDERS) shell_folders = r'{}\{}'.format(hive_path, REG_SHELL_FOLDERS)
if (reg_path_exists(HKU, hive_path) if (reg_path_exists(HKU, hive_path)
@ -252,7 +255,7 @@ def get_user_data_paths(user):
if (folder not in paths['Shell Folders'] if (folder not in paths['Shell Folders']
and os.path.exists(folder_path)): and os.path.exists(folder_path)):
paths['Shell Folders'][folder] = {'Path': folder_path} paths['Shell Folders'][folder] = {'Path': folder_path}
# Extra folders # Extra folders
if paths['Profile']['Path']: if paths['Profile']['Path']:
for folder in EXTRA_FOLDERS: for folder in EXTRA_FOLDERS:
@ -260,12 +263,12 @@ def get_user_data_paths(user):
folder=folder, **paths['Profile']) folder=folder, **paths['Profile'])
if os.path.exists(folder_path): if os.path.exists(folder_path):
paths['Extra Folders'][folder] = {'Path': folder_path} paths['Extra Folders'][folder] = {'Path': folder_path}
# Shell folders (cleanup) # Shell folders (cleanup)
if unload_hive: if unload_hive:
cmd = ['reg', 'unload', r'HKU\{}'.format(TMP_HIVE_PATH)] cmd = ['reg', 'unload', r'HKU\{}'.format(TMP_HIVE_PATH)]
run_program(cmd, check=False) run_program(cmd, check=False)
# Done # Done
return paths return paths
@ -277,7 +280,7 @@ def get_user_folder_sizes(users):
with winreg.OpenKey(HKCU, with winreg.OpenKey(HKCU,
r'Software\Sysinternals\Du', access=winreg.KEY_WRITE) as key: r'Software\Sysinternals\Du', access=winreg.KEY_WRITE) as key:
winreg.SetValueEx(key, 'EulaAccepted', 0, winreg.REG_DWORD, 1) winreg.SetValueEx(key, 'EulaAccepted', 0, winreg.REG_DWORD, 1)
for u in users: for u in users:
u.update(get_user_data_paths(u)) u.update(get_user_data_paths(u))
if u['Profile']['Path']: if u['Profile']['Path']:
@ -292,7 +295,7 @@ def get_user_folder_sizes(users):
def get_user_list(): def get_user_list():
"""Get user list via WMIC, returns list of dicts.""" """Get user list via WMIC, returns list of dicts."""
users = [] users = []
# Get user info from WMI # Get user info from WMI
cmd = ['wmic', 'useraccount', 'get', '/format:csv'] cmd = ['wmic', 'useraccount', 'get', '/format:csv']
try: try:
@ -300,10 +303,10 @@ def get_user_list():
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
# Meh, return empty list to avoid a full crash # Meh, return empty list to avoid a full crash
return users return users
entries = out.stdout.decode().splitlines() entries = out.stdout.decode().splitlines()
entries = [e.strip().split(',') for e in entries if e.strip()] entries = [e.strip().split(',') for e in entries if e.strip()]
# Add user(s) to dict # Add user(s) to dict
keys = entries[0] keys = entries[0]
for e in entries[1:]: for e in entries[1:]:
@ -314,10 +317,10 @@ def get_user_list():
# Assume SIDs ending with 1000+ are "Standard" and others are "System" # Assume SIDs ending with 1000+ are "Standard" and others are "System"
e['Type'] = 'Standard' if re.search(r'-1\d+$', e['SID']) else 'System' e['Type'] = 'Standard' if re.search(r'-1\d+$', e['SID']) else 'System'
users.append(e) users.append(e)
# Sort list # Sort list
users.sort(key=itemgetter('Name')) users.sort(key=itemgetter('Name'))
# Done # Done
return users return users
@ -368,26 +371,38 @@ def run_aida64():
'/TEXT', '/SILENT', '/SAFEST'] '/TEXT', '/SILENT', '/SAFEST']
run_program(cmd, check=False) run_program(cmd, check=False)
def run_bleachbit(): def run_bleachbit(cleaners=None, preview=True):
"""Run BleachBit preview and save log. """Run BleachBit preview and save log.
This is a preview so no files should be deleted.""" If preview is True then no files should be deleted."""
if not os.path.exists(global_vars['LogDir']+r'\BleachBit.log'): error_path = r'{}\Tools\BleachBit.err'.format(global_vars['LogDir'])
extract_item('BleachBit', silent=True) log_path = error_path.replace('err', 'log')
cmd = [global_vars['Tools']['BleachBit'], '--preview', '--preset'] extract_item('BleachBit', silent=True)
out = run_program(cmd, check=False)
# Save stderr # Safety check
if out.stderr.decode().splitlines(): if not cleaners:
with open(global_vars['LogDir']+r'\BleachBit.err', 'a', # Disable cleaning and use preset config
encoding='utf-8') as f: cleaners = ['--preset']
for line in out.stderr.decode().splitlines(): preview = True
f.write(line.strip() + '\n')
# Save stdout # Run
with open(global_vars['LogDir']+r'\BleachBit.log', 'a', cmd = [
encoding='utf-8') as f: global_vars['Tools']['BleachBit'],
for line in out.stdout.decode().splitlines(): '--preview' if preview else '--clean']
cmd.extend(cleaners)
out = run_program(cmd, check=False)
# Save stderr
if out.stderr.decode().splitlines():
with open(error_path, 'a', encoding='utf-8') as f:
for line in out.stderr.decode().splitlines():
f.write(line.strip() + '\n') f.write(line.strip() + '\n')
# Save stdout
with open(log_path, 'a', encoding='utf-8') as f:
for line in out.stdout.decode().splitlines():
f.write(line.strip() + '\n')
def show_disk_usage(disk): def show_disk_usage(disk):
"""Show free and used space for a specified disk.""" """Show free and used space for a specified disk."""
print_standard('{:5}'.format(disk.device.replace('/', ' ')), print_standard('{:5}'.format(disk.device.replace('/', ' ')),
@ -459,7 +474,7 @@ def show_os_name():
def show_temp_files_size(): def show_temp_files_size():
"""Show total size of temp files identified by BleachBit.""" """Show total size of temp files identified by BleachBit."""
size = None size = None
with open(r'{LogDir}\BleachBit.log'.format(**global_vars), 'r') as f: with open(r'{LogDir}\Tools\BleachBit.log'.format(**global_vars), 'r') as f:
for line in f.readlines(): for line in f.readlines():
if re.search(r'^disk space to be recovered:', line, re.IGNORECASE): if re.search(r'^disk space to be recovered:', line, re.IGNORECASE):
size = re.sub(r'.*: ', '', line.strip()) size = re.sub(r'.*: ', '', line.strip())

View file

@ -3,6 +3,7 @@
## Wizard Kit: Functions - Network ## Wizard Kit: Functions - Network
import os import os
import shutil
import sys import sys
# Init # Init
@ -25,14 +26,9 @@ def connect_to_network():
# Bail if currently connected # Bail if currently connected
if is_connected(): if is_connected():
return return
# LAN
if 'en' in net_ifs:
# Reload the tg3/broadcom driver (known fix for some Dell systems)
try_and_print(message='Reloading drivers...', function=reload_tg3)
# WiFi # WiFi
if not is_connected() and 'wl' in net_ifs: if 'wl' in net_ifs:
cmd = [ cmd = [
'nmcli', 'dev', 'wifi', 'nmcli', 'dev', 'wifi',
'connect', WIFI_SSID, 'connect', WIFI_SSID,
@ -71,13 +67,6 @@ def speedtest():
output = [(a, float(b), c) for a, b, c in output] output = [(a, float(b), c) for a, b, c in output]
return ['{:10}{:6.2f} {}'.format(*line) for line in output] return ['{:10}{:6.2f} {}'.format(*line) for line in output]
def reload_tg3():
"""Reload tg3 module as a workaround for some Dell systems."""
run_program(['sudo', 'modprobe', '-r', 'tg3'])
run_program(['sudo', 'modprobe', 'broadcom'])
run_program(['sudo', 'modprobe', 'tg3'])
sleep(5)
if __name__ == '__main__': if __name__ == '__main__':
print("This file is not meant to be called directly.") print("This file is not meant to be called directly.")

View file

@ -39,7 +39,7 @@ def extract_keys():
keys[product] = [] keys[product] = []
if key not in keys[product]: if key not in keys[product]:
keys[product].append(key) keys[product].append(key)
# Done # Done
return keys return keys

View file

@ -24,11 +24,11 @@ def run_chkdsk_scan():
raise GenericError raise GenericError
# Save stderr # Save stderr
with open(r'{LogDir}\CHKDSK.err'.format(**global_vars), 'a') as f: with open(r'{LogDir}\Tools\CHKDSK.err'.format(**global_vars), 'a') as f:
for line in out.stderr.decode().splitlines(): for line in out.stderr.decode().splitlines():
f.write(line.strip() + '\n') f.write(line.strip() + '\n')
# Save stdout # Save stdout
with open(r'{LogDir}\CHKDSK.log'.format(**global_vars), 'a') as f: with open(r'{LogDir}\Tools\CHKDSK.log'.format(**global_vars), 'a') as f:
for line in out.stdout.decode().splitlines(): for line in out.stdout.decode().splitlines():
f.write(line.strip() + '\n') f.write(line.strip() + '\n')
@ -50,7 +50,7 @@ def run_dism(repair=False):
cmd = [ cmd = [
'DISM', '/Online', 'DISM', '/Online',
'/Cleanup-Image', '/RestoreHealth', '/Cleanup-Image', '/RestoreHealth',
r'/LogPath:"{LogDir}\DISM_RestoreHealth.log"'.format( r'/LogPath:"{LogDir}\Tools\DISM_RestoreHealth.log"'.format(
**global_vars), **global_vars),
'-new_console:n', '-new_console:s33V'] '-new_console:n', '-new_console:s33V']
else: else:
@ -58,7 +58,7 @@ def run_dism(repair=False):
cmd = [ cmd = [
'DISM', '/Online', 'DISM', '/Online',
'/Cleanup-Image', '/ScanHealth', '/Cleanup-Image', '/ScanHealth',
r'/LogPath:"{LogDir}\DISM_ScanHealth.log"'.format( r'/LogPath:"{LogDir}\Tools\DISM_ScanHealth.log"'.format(
**global_vars), **global_vars),
'-new_console:n', '-new_console:s33V'] '-new_console:n', '-new_console:s33V']
run_program(cmd, pipe=False, check=False, shell=True) run_program(cmd, pipe=False, check=False, shell=True)
@ -67,7 +67,7 @@ def run_dism(repair=False):
cmd = [ cmd = [
'DISM', '/Online', 'DISM', '/Online',
'/Cleanup-Image', '/CheckHealth', '/Cleanup-Image', '/CheckHealth',
r'/LogPath:"{LogDir}\DISM_CheckHealth.log"'.format(**global_vars)] r'/LogPath:"{LogDir}\Tools\DISM_CheckHealth.log"'.format(**global_vars)]
result = run_program(cmd, shell=True).stdout.decode() result = run_program(cmd, shell=True).stdout.decode()
# Check result # Check result
if 'no component store corruption detected' not in result.lower(): if 'no component store corruption detected' not in result.lower():
@ -93,11 +93,11 @@ def run_sfc_scan():
'/scannow'] '/scannow']
out = run_program(cmd, check=False) out = run_program(cmd, check=False)
# Save stderr # Save stderr
with open(r'{LogDir}\SFC.err'.format(**global_vars), 'a') as f: with open(r'{LogDir}\Tools\SFC.err'.format(**global_vars), 'a') as f:
for line in out.stderr.decode('utf-8', 'ignore').splitlines(): for line in out.stderr.decode('utf-8', 'ignore').splitlines():
f.write(line.strip() + '\n') f.write(line.strip() + '\n')
# Save stdout # Save stdout
with open(r'{LogDir}\SFC.log'.format(**global_vars), 'a') as f: with open(r'{LogDir}\Tools\SFC.log'.format(**global_vars), 'a') as f:
for line in out.stdout.decode('utf-8', 'ignore').splitlines(): for line in out.stdout.decode('utf-8', 'ignore').splitlines():
f.write(line.strip() + '\n') f.write(line.strip() + '\n')
# Check result # Check result
@ -116,7 +116,7 @@ def run_tdsskiller():
**global_vars), exist_ok=True) **global_vars), exist_ok=True)
cmd = [ cmd = [
global_vars['Tools']['TDSSKiller'], global_vars['Tools']['TDSSKiller'],
'-l', r'{LogDir}\TDSSKiller.log'.format(**global_vars), '-l', r'{LogDir}\Tools\TDSSKiller.log'.format(**global_vars),
'-qpath', r'{QuarantineDir}\TDSSKiller'.format(**global_vars), '-qpath', r'{QuarantineDir}\TDSSKiller'.format(**global_vars),
'-accepteula', '-accepteulaksn', '-accepteula', '-accepteulaksn',
'-dcexact', '-tdlfs'] '-dcexact', '-tdlfs']

View file

@ -1,10 +1,17 @@
# Wizard Kit: Functions - Setup # Wizard Kit: Functions - Setup
from functions.common import * from functions.common import *
from functions.update import *
from settings.sources import *
# STATIC VARIABLES # STATIC VARIABLES
HKU = winreg.HKEY_USERS
HKCR = winreg.HKEY_CLASSES_ROOT
HKCU = winreg.HKEY_CURRENT_USER HKCU = winreg.HKEY_CURRENT_USER
HKLM = winreg.HKEY_LOCAL_MACHINE HKLM = winreg.HKEY_LOCAL_MACHINE
MOZILLA_FIREFOX_UBO_PATH = r'{}\{}\ublock_origin.xpi'.format(
os.environ.get('PROGRAMFILES'),
r'Mozilla Firefox\distribution\extensions')
OTHER_RESULTS = { OTHER_RESULTS = {
'Error': { 'Error': {
'CalledProcessError': 'Unknown Error', 'CalledProcessError': 'Unknown Error',
@ -25,16 +32,38 @@ SETTINGS_CLASSIC_START = {
}, },
}, },
} }
SETTINGS_ESET = {
r'Software\ESET\ESET Security\CurrentVersion\gui\UI_CONFIG': {
'DWORD Items': {
'FullScreenMode': 0,
'ShowDesktopAlert': 0,
'ShowSplash': 0,
},
},
}
SETTINGS_EXPLORER_SYSTEM_HW = {
# Enable RegBack
r'System\CurrentControlSet\Control\Session Manager\Configuration Manager': {
'DWORD Items': {'EnablePeriodicBackup': 1},
},
}
SETTINGS_EXPLORER_SYSTEM = { SETTINGS_EXPLORER_SYSTEM = {
# Disable Location Tracking
r'Software\Microsoft\Windows NT\CurrentVersion\Sensor\Overrides\{BFA794E4-F964-4FDB-90F6-51056BFE4B44}': {
'DWORD Items': {'SensorPermissionState': 0},
},
r'System\CurrentControlSet\Services\lfsvc\Service\Configuration': {
'Status': {'Value': 0},
},
# Disable Telemetry # Disable Telemetry
r'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection': { r'Software\Microsoft\Windows\CurrentVersion\Policies\DataCollection': {
'DWORD Items': {'AllowTelemetry': 0}, 'DWORD Items': {'AllowTelemetry': 0},
}, },
r'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection': { r'Software\Microsoft\Windows\CurrentVersion\Policies\DataCollection': {
'DWORD Items': {'AllowTelemetry': 0}, 'DWORD Items': {'AllowTelemetry': 0},
'WOW64_32': True, 'WOW64_32': True,
}, },
r'SOFTWARE\Policies\Microsoft\Windows\DataCollection': { r'Software\Policies\Microsoft\Windows\DataCollection': {
'DWORD Items': {'AllowTelemetry': 0}, 'DWORD Items': {'AllowTelemetry': 0},
}, },
# Disable Wi-Fi Sense # Disable Wi-Fi Sense
@ -44,27 +73,23 @@ SETTINGS_EXPLORER_SYSTEM = {
r'Software\Microsoft\PolicyManager\default\WiFi\AllowAutoConnectToWiFiSenseHotspots': { r'Software\Microsoft\PolicyManager\default\WiFi\AllowAutoConnectToWiFiSenseHotspots': {
'DWORD Items': {'Value': 0}, 'DWORD Items': {'Value': 0},
}, },
# Disable Location Tracking # Enable RegBack
r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Sensor\Overrides\{BFA794E4-F964-4FDB-90F6-51056BFE4B44}': { r'System\CurrentControlSet\Control\Session Manager\Configuration Manager': {
'DWORD Items': {'SensorPermissionState': 0}, 'DWORD Items': {'EnablePeriodicBackup': 1},
},
r'System\CurrentControlSet\Services\lfsvc\Service\Configuration': {
'Status': {'Value': 0},
}, },
} }
SETTINGS_EXPLORER_USER = { SETTINGS_EXPLORER_USER = {
# Disable Cortana # Disable silently installed apps
r'Software\Microsoft\Personalization\Settings': { r'Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager': {
'DWORD Items': {'AcceptedPrivacyPolicy': 0}, 'DWORD Items': {'SilentInstalledAppsEnabled': 0},
}, },
r'Software\Microsoft\InputPersonalization': { # Disable Tips and Tricks
'DWORD Items': { r'Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager': {
'RestrictImplicitTextCollection': 1, 'DWORD Items': {'SoftLandingEnabled ': 0},
'RestrictImplicitInkCollection': 1
},
}, },
r'Software\Microsoft\InputPersonalization\TrainedDataStore': { # Hide People bar
'DWORD Items': {'HarvestContacts': 1}, r'Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People': {
'DWORD Items': {'PeopleBand': 0},
}, },
# Hide Search button / box # Hide Search button / box
r'Software\Microsoft\Windows\CurrentVersion\Search': { r'Software\Microsoft\Windows\CurrentVersion\Search': {
@ -76,9 +101,6 @@ SETTINGS_EXPLORER_USER = {
}, },
} }
SETTINGS_GOOGLE_CHROME = { SETTINGS_GOOGLE_CHROME = {
r'Software\Google\Chrome\Extensions': {
'WOW64_32': True,
},
r'Software\Google\Chrome\Extensions\cjpalhdlnbpafiamejdnhcphjbkeiagm': { r'Software\Google\Chrome\Extensions\cjpalhdlnbpafiamejdnhcphjbkeiagm': {
'SZ Items': { 'SZ Items': {
'update_url': 'https://clients2.google.com/service/update2/crx'}, 'update_url': 'https://clients2.google.com/service/update2/crx'},
@ -90,11 +112,20 @@ SETTINGS_GOOGLE_CHROME = {
'WOW64_32': True, 'WOW64_32': True,
}, },
} }
SETTINGS_MOZILLA_FIREFOX_32 = {
r'Software\Mozilla\Firefox\Extensions': {
'SZ Items': {
'uBlock0@raymondhill.net': MOZILLA_FIREFOX_UBO_PATH},
'WOW64_32': True,
},
}
SETTINGS_MOZILLA_FIREFOX_64 = {
r'Software\Mozilla\Firefox\Extensions': {
'SZ Items': {
'uBlock0@raymondhill.net': MOZILLA_FIREFOX_UBO_PATH},
},
}
VCR_REDISTS = [ VCR_REDISTS = [
{'Name': 'Visual C++ 2008 SP1 x32...',
'Cmd': [r'2008sp1\x32\vcredist.exe', '/qb! /norestart']},
{'Name': 'Visual C++ 2008 SP1 x64...',
'Cmd': [r'2008sp1\x64\vcredist.exe', '/qb! /norestart']},
{'Name': 'Visual C++ 2010 x32...', {'Name': 'Visual C++ 2010 x32...',
'Cmd': [r'2010sp1\x32\vcredist.exe', '/passive', '/norestart']}, 'Cmd': [r'2010sp1\x32\vcredist.exe', '/passive', '/norestart']},
{'Name': 'Visual C++ 2010 x64...', {'Name': 'Visual C++ 2010 x64...',
@ -169,24 +200,9 @@ def config_classicstart():
sleep(1) sleep(1)
popen_program(cs_exe) popen_program(cs_exe)
def write_registry_settings(settings, all_users=False): def config_explorer_system_hw():
"""Write registry values from custom dict of dicts.""" """Configure Windows Explorer for all users via Registry settings (HW)."""
hive = HKCU write_registry_settings(SETTINGS_EXPLORER_SYSTEM_HW, all_users=True)
if all_users:
hive = HKLM
for k, v in settings.items():
# CreateKey
access = winreg.KEY_WRITE
if 'WOW64_32' in v:
access = access | winreg.KEY_WOW64_32KEY
winreg.CreateKeyEx(hive, k, 0, access)
# Create values
with winreg.OpenKeyEx(hive, k, 0, access) as key:
for name, value in v.get('DWORD Items', {}).items():
winreg.SetValueEx(key, name, 0, winreg.REG_DWORD, value)
for name, value in v.get('SZ Items', {}).items():
winreg.SetValueEx(key, name, 0, winreg.REG_SZ, value)
def config_explorer_system(): def config_explorer_system():
"""Configure Windows Explorer for all users via Registry settings.""" """Configure Windows Explorer for all users via Registry settings."""
@ -196,6 +212,32 @@ def config_explorer_user():
"""Configure Windows Explorer for current user via Registry settings.""" """Configure Windows Explorer for current user via Registry settings."""
write_registry_settings(SETTINGS_EXPLORER_USER, all_users=False) write_registry_settings(SETTINGS_EXPLORER_USER, all_users=False)
def config_privacy_settings():
"""Configure Windows 10 privacy settings with O&O ShutUp10."""
extract_item('ShutUp10', silent=True)
cmd = [
r'{BinDir}\ShutUp10\OOSU10.exe'.format(**global_vars),
r'{BinDir}\ShutUp10\1201.cfg'.format(**global_vars),
'/quiet']
run_program(cmd)
def enable_system_restore():
"""Enable System Restore and set disk usage to 5%"""
cmd = [
'PowerShell',
'-Command', 'Enable-ComputerRestore',
'-Drive', '{}\\'.format(global_vars['Env']['SYSTEMDRIVE'])]
run_program(cmd)
# Set disk usage
cmd = [
r'{}\System32\vssadmin.exe'.format(global_vars['Env']['SYSTEMROOT']),
'resize', 'shadowstorage',
'/on={}'.format(global_vars['Env']['SYSTEMDRIVE']),
'/for={}'.format(global_vars['Env']['SYSTEMDRIVE']),
'/maxsize=5%']
run_program(cmd)
def update_clock(): def update_clock():
"""Set Timezone and sync clock.""" """Set Timezone and sync clock."""
run_program(['tzutil' ,'/s', WINDOWS_TIME_ZONE], check=False) run_program(['tzutil' ,'/s', WINDOWS_TIME_ZONE], check=False)
@ -208,6 +250,25 @@ def update_clock():
run_program(['net', 'start', 'w32ime'], check=False) run_program(['net', 'start', 'w32ime'], check=False)
run_program(['w32tm', '/resync', '/nowait'], check=False) run_program(['w32tm', '/resync', '/nowait'], check=False)
def write_registry_settings(settings, all_users=False):
"""Write registry values from custom dict of dicts."""
hive = HKCU
if all_users:
hive = HKLM
for k, v in settings.items():
# CreateKey
access = winreg.KEY_WRITE
if 'WOW64_32' in v:
access = access | winreg.KEY_WOW64_32KEY
winreg.CreateKeyEx(hive, k, 0, access)
# Create values
with winreg.OpenKeyEx(hive, k, 0, access) as key:
for name, value in v.get('DWORD Items', {}).items():
winreg.SetValueEx(key, name, 0, winreg.REG_DWORD, value)
for name, value in v.get('SZ Items', {}).items():
winreg.SetValueEx(key, name, 0, winreg.REG_SZ, value)
# Installations # Installations
def install_adobe_reader(): def install_adobe_reader():
"""Install Adobe Reader.""" """Install Adobe Reader."""
@ -221,7 +282,7 @@ def install_adobe_reader():
run_program(cmd) run_program(cmd)
def install_chrome_extensions(): def install_chrome_extensions():
"""Update registry to 'install' Google Chrome extensions for all users.""" """Update registry to install Google Chrome extensions for all users."""
write_registry_settings(SETTINGS_GOOGLE_CHROME, all_users=True) write_registry_settings(SETTINGS_GOOGLE_CHROME, all_users=True)
def install_classicstart_skin(): def install_classicstart_skin():
@ -237,17 +298,52 @@ def install_classicstart_skin():
os.makedirs(dest_path, exist_ok=True) os.makedirs(dest_path, exist_ok=True)
shutil.copy(source, dest) shutil.copy(source, dest)
def install_eset_nod32_av(scan_pups=True):
"""Install ESET NOD32 AV with custom config."""
extract_item('ESETConfigs', silent=True)
config_file = r'{BinDir}\ESETConfigs\{config_file}.xml'.format(
config_file='eset-config' if scan_pups else 'eset-config-no-pup',
**global_vars)
# Apply user configuration
write_registry_settings(SETTINGS_ESET, all_users=False)
# Download
result = try_and_print(message='Downloading Setup...', cs='Done',
other_results=OTHER_RESULTS, function=download_generic,
out_dir=global_vars['ClientDir'],
out_name='eav_nt64.exe',
source_url=SOURCE_URLS['ESET NOD32 AV'])
installer = r'{ClientDir}\eav_nt64.exe'.format(**global_vars)
if not result['CS']:
raise GenericError('Failed to download ESET NOD32 AV')
# Install
cmd = [installer,
'--silent', '--accepteula', '--msi-property',
'PRODUCTTYPE=eav', 'PRODUCT_LANG=1033', 'PRODUCT_LANG_CODE=en-US',
'ADMINCFG="{}"'.format(config_file)]
try_and_print(message='Installing ESET NOD32 AV...',
other_results=OTHER_RESULTS, function=run_program, cmd=cmd)
# Delete installer
remove_item(installer)
def install_firefox_extensions(): def install_firefox_extensions():
"""Extract Firefox extensions to installation folder.""" """Update registry to install Firefox extensions for all users."""
dist_path = r'{PROGRAMFILES}\Mozilla Firefox\distribution\extensions'.format( dist_path = r'{PROGRAMFILES}\Mozilla Firefox\distribution\extensions'.format(
**global_vars['Env']) **global_vars['Env'])
source_path = r'{CBinDir}\FirefoxExtensions.7z'.format(**global_vars) source_path = r'{CBinDir}\FirefoxExtensions.7z'.format(**global_vars)
if not os.path.exists(source_path): if not os.path.exists(source_path):
raise FileNotFoundError raise FileNotFoundError
# Update registry
write_registry_settings(SETTINGS_MOZILLA_FIREFOX_32, all_users=True)
write_registry_settings(SETTINGS_MOZILLA_FIREFOX_64, all_users=True)
# Extract extension(s) to distribution folder # Extract extension(s) to distribution folder
cmd = [ cmd = [
global_vars['Tools']['SevenZip'], 'x', '-aos', '-bso0', '-bse0', global_vars['Tools']['SevenZip'], 'e', '-aos', '-bso0', '-bse0',
'-p{ArchivePassword}'.format(**global_vars), '-p{ArchivePassword}'.format(**global_vars),
'-o{dist_path}'.format(dist_path=dist_path), '-o{dist_path}'.format(dist_path=dist_path),
source_path] source_path]

View file

@ -28,7 +28,7 @@ def compress_item(item):
wd = os.path.abspath(r'{}\{}'.format(wd, os.path.pardir)) wd = os.path.abspath(r'{}\{}'.format(wd, os.path.pardir))
include_str = item.name include_str = item.name
os.chdir(wd) os.chdir(wd)
# Compress # Compress
cmd = [ cmd = [
global_vars['Tools']['SevenZip'], global_vars['Tools']['SevenZip'],
@ -38,7 +38,7 @@ def compress_item(item):
include_str, include_str,
] ]
run_program(cmd) run_program(cmd)
# Done # Done
os.chdir(prev_dir) os.chdir(prev_dir)
@ -96,7 +96,7 @@ def generate_launcher(section, name, options):
dest = global_vars['BaseDir'] dest = global_vars['BaseDir']
full_path = r'{}\{}.cmd'.format(dest, name) full_path = r'{}\{}.cmd'.format(dest, name)
template = r'{}\Scripts\Launcher_Template.cmd'.format(global_vars['BinDir']) template = r'{}\Scripts\Launcher_Template.cmd'.format(global_vars['BinDir'])
# Format options # Format options
f_options = {} f_options = {}
for opt in options.keys(): for opt in options.keys():
@ -106,7 +106,7 @@ def generate_launcher(section, name, options):
elif re.search(r'^L_\w+', opt, re.IGNORECASE): elif re.search(r'^L_\w+', opt, re.IGNORECASE):
new_opt = 'set {}='.format(opt) new_opt = 'set {}='.format(opt)
f_options[new_opt] = ['set {}={}'.format(opt, options[opt])] f_options[new_opt] = ['set {}={}'.format(opt, options[opt])]
# Read template and update using f_options # Read template and update using f_options
out_text = [] out_text = []
with open(template, 'r') as f: with open(template, 'r') as f:
@ -118,7 +118,7 @@ def generate_launcher(section, name, options):
out_text.extend(f_options[line]) out_text.extend(f_options[line])
else: else:
out_text.append(line) out_text.append(line)
# Write file # Write file
os.makedirs(dest, exist_ok=True) os.makedirs(dest, exist_ok=True)
with open(full_path, 'w') as f: with open(full_path, 'w') as f:
@ -138,7 +138,9 @@ def remove_from_kit(item):
item_locations = [] item_locations = []
for p in [global_vars['BinDir'], global_vars['CBinDir']]: for p in [global_vars['BinDir'], global_vars['CBinDir']]:
item_locations.append(r'{}\{}'.format(p, item)) item_locations.append(r'{}\{}'.format(p, item))
item_locations.append(r'{}\{}.7z'.format(p, item))
item_locations.append(r'{}\_Drivers\{}'.format(p, item)) item_locations.append(r'{}\_Drivers\{}'.format(p, item))
item_locations.append(r'{}\_Drivers\{}.7z'.format(p, item))
for item_path in item_locations: for item_path in item_locations:
remove_item(item_path) remove_item(item_path)
@ -172,7 +174,7 @@ def scan_for_net_installers(server, family_name, min_year):
"""Scan network shares for installers.""" """Scan network shares for installers."""
if not server['Mounted']: if not server['Mounted']:
mount_network_share(server) mount_network_share(server)
if server['Mounted']: if server['Mounted']:
for year in os.scandir(r'\\{IP}\{Share}'.format(**server)): for year in os.scandir(r'\\{IP}\{Share}'.format(**server)):
try: try:
@ -204,13 +206,13 @@ def update_testdisk():
for exe in ['fidentify_win.exe', 'photorec_win.exe', for exe in ['fidentify_win.exe', 'photorec_win.exe',
'qphotorec_win.exe', 'testdisk_win.exe']: 'qphotorec_win.exe', 'testdisk_win.exe']:
kill_process(exe) kill_process(exe)
# Remove existing folders # Remove existing folders
remove_from_kit('TestDisk') remove_from_kit('TestDisk')
# Download # Download
download_to_temp('testdisk_wip.zip', SOURCE_URLS['TestDisk']) download_to_temp('testdisk_wip.zip', SOURCE_URLS['TestDisk'])
# Extract files # Extract files
extract_temp_to_cbin('testdisk_wip.zip', 'TestDisk') extract_temp_to_cbin('testdisk_wip.zip', 'TestDisk')
dest = r'{}\TestDisk'.format(global_vars['CBinDir']) dest = r'{}\TestDisk'.format(global_vars['CBinDir'])
@ -220,7 +222,7 @@ def update_testdisk():
shutil.move(item.path, dest_item) shutil.move(item.path, dest_item)
shutil.rmtree( shutil.rmtree(
r'{}\TestDisk\testdisk-7.1-WIP'.format(global_vars['CBinDir'])) r'{}\TestDisk\testdisk-7.1-WIP'.format(global_vars['CBinDir']))
# Cleanup # Cleanup
remove_from_temp('testdisk_wip.zip') remove_from_temp('testdisk_wip.zip')
@ -230,36 +232,91 @@ def update_fastcopy():
# Stop running processes # Stop running processes
for process in ['FastCopy.exe', 'FastCopy64.exe']: for process in ['FastCopy.exe', 'FastCopy64.exe']:
kill_process(process) kill_process(process)
# Remove existing folders # Remove existing folders
remove_from_kit('FastCopy') remove_from_kit('FastCopy')
# Download # Download
download_to_temp('FastCopy32.zip', SOURCE_URLS['FastCopy32']) download_to_temp('FastCopy.zip', SOURCE_URLS['FastCopy'])
download_to_temp('FastCopy64.zip', SOURCE_URLS['FastCopy64'])
# Extract installer
# Extract extract_temp_to_bin('FastCopy.zip', 'FastCopy')
extract_temp_to_bin('FastCopy64.zip', 'FastCopy', sz_args=['FastCopy.exe']) _path = r'{}\FastCopy'.format(global_vars['BinDir'])
_installer = 'FastCopy354_installer.exe'
# Extract 64-bit
cmd = [
r'{}\{}'.format(_path, _installer),
'/NOSUBDIR', '/DIR={}'.format(_path),
'/EXTRACT64']
run_program(cmd)
shutil.move( shutil.move(
r'{}\FastCopy\FastCopy.exe'.format(global_vars['BinDir']), r'{}\FastCopy\FastCopy.exe'.format(global_vars['BinDir']),
r'{}\FastCopy\FastCopy64.exe'.format(global_vars['BinDir'])) r'{}\FastCopy\FastCopy64.exe'.format(global_vars['BinDir']))
extract_temp_to_bin('FastCopy32.zip', 'FastCopy', sz_args=[r'-x!setup.exe', r'-x!*.dll'])
# Extract 32-bit
cmd = [
r'{}\{}'.format(_path, _installer),
'/NOSUBDIR', '/DIR={}'.format(_path),
'/EXTRACT32']
run_program(cmd)
# Cleanup # Cleanup
remove_from_temp('FastCopy32.zip') os.remove(r'{}\{}'.format(_path, _installer))
remove_from_temp('FastCopy64.zip') os.remove(r'{}\setup.exe'.format(_path, _installer))
remove_from_temp('FastCopy.zip')
def update_linux_reader():
# Stop running processes
for exe in ['LinuxReader.exe', 'LinuxReader64.exe']:
kill_process(exe)
# Remove existing folders
remove_from_kit('LinuxReader')
# Prep
install_dir = r'{}\LinuxReaderTemp'.format(global_vars['TmpDir'])
dest = r'{}\LinuxReader'.format(global_vars['CBinDir'])
uninstaller = None
# Download
download_to_temp('LinuxReader.exe', SOURCE_URLS['Linux Reader'])
# Install to temp
cmd = [
r'{}\LinuxReader.exe'.format(global_vars['TmpDir']),
'/S',
'/D={}'.format(install_dir)]
run_program(cmd)
# Copy files
shutil.copytree(install_dir, dest)
for item in os.scandir(dest):
r = re.search(r'^uninstall.*(dat|exe)$', item.name, re.IGNORECASE)
if r:
if 'exe' in item.name:
uninstaller = r'{}\{}'.format(install_dir, item.name)
remove_item(item.path)
# Uninstall from temp
if uninstaller:
cmd = [uninstaller, '/S']
run_program(cmd)
# Cleanup
remove_from_temp('LinuxReader.exe')
def update_wimlib(): def update_wimlib():
# Stop running processes # Stop running processes
kill_process('wimlib-imagex.exe') kill_process('wimlib-imagex.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('wimlib') remove_from_kit('wimlib')
# Download # Download
download_to_temp('wimlib32.zip', SOURCE_URLS['wimlib32']) download_to_temp('wimlib32.zip', SOURCE_URLS['wimlib32'])
download_to_temp('wimlib64.zip', SOURCE_URLS['wimlib64']) download_to_temp('wimlib64.zip', SOURCE_URLS['wimlib64'])
# Extract # Extract
extract_generic( extract_generic(
r'{}\wimlib32.zip'.format(global_vars['TmpDir']), r'{}\wimlib32.zip'.format(global_vars['TmpDir']),
@ -267,7 +324,7 @@ def update_wimlib():
extract_generic( extract_generic(
r'{}\wimlib64.zip'.format(global_vars['TmpDir']), r'{}\wimlib64.zip'.format(global_vars['TmpDir']),
r'{}\wimlib\x64'.format(global_vars['CBinDir'])) r'{}\wimlib\x64'.format(global_vars['CBinDir']))
# Cleanup # Cleanup
remove_from_temp('wimlib32.zip') remove_from_temp('wimlib32.zip')
remove_from_temp('wimlib64.zip') remove_from_temp('wimlib64.zip')
@ -275,16 +332,16 @@ def update_wimlib():
def update_xyplorer(): def update_xyplorer():
# Stop running processes # Stop running processes
kill_process('XYplorerFree.exe') kill_process('XYplorerFree.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('XYplorerFree') remove_from_kit('XYplorerFree')
# Download # Download
download_to_temp('xyplorer_free.zip', SOURCE_URLS['XYplorerFree']) download_to_temp('xyplorer_free.zip', SOURCE_URLS['XYplorerFree'])
# Extract files # Extract files
extract_temp_to_cbin('xyplorer_free.zip', 'XYplorerFree') extract_temp_to_cbin('xyplorer_free.zip', 'XYplorerFree')
# Cleanup # Cleanup
remove_from_temp('xyplorer_free.zip') remove_from_temp('xyplorer_free.zip')
@ -292,16 +349,16 @@ def update_xyplorer():
def update_aida64(): def update_aida64():
# Stop running processes # Stop running processes
kill_process('notepadplusplus.exe') kill_process('notepadplusplus.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('AIDA64') remove_from_kit('AIDA64')
# Download # Download
download_to_temp('aida64.zip', SOURCE_URLS['AIDA64']) download_to_temp('aida64.zip', SOURCE_URLS['AIDA64'])
# Extract files # Extract files
extract_temp_to_cbin('aida64.zip', 'AIDA64') extract_temp_to_cbin('aida64.zip', 'AIDA64')
# Cleanup # Cleanup
remove_from_temp('aida64.zip') remove_from_temp('aida64.zip')
@ -309,37 +366,37 @@ def update_autoruns():
# Stop running processes # Stop running processes
kill_process('Autoruns.exe') kill_process('Autoruns.exe')
kill_process('Autoruns64.exe') kill_process('Autoruns64.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('Autoruns') remove_from_kit('Autoruns')
# Download # Download
download_to_temp('Autoruns.zip', SOURCE_URLS['Autoruns']) download_to_temp('Autoruns.zip', SOURCE_URLS['Autoruns'])
# Extract files # Extract files
extract_temp_to_cbin('Autoruns.zip', 'Autoruns') extract_temp_to_cbin('Autoruns.zip', 'Autoruns')
# Cleanup # Cleanup
remove_from_temp('Autoruns.zip') remove_from_temp('Autoruns.zip')
def update_bleachbit(): def update_bleachbit():
# Stop running processes # Stop running processes
kill_process('bleachbit.exe') kill_process('bleachbit.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('BleachBit') remove_from_kit('BleachBit')
# Download # Download
download_to_temp('bleachbit.zip', SOURCE_URLS['BleachBit']) download_to_temp('bleachbit.zip', SOURCE_URLS['BleachBit'])
download_to_temp('Winapp2.zip', SOURCE_URLS['Winapp2']) download_to_temp('Winapp2.zip', SOURCE_URLS['Winapp2'])
# Extract files # Extract files
extract_temp_to_cbin('bleachbit.zip', 'BleachBit') extract_temp_to_cbin('bleachbit.zip', 'BleachBit')
extract_generic( extract_generic(
r'{}\Winapp2.zip'.format(global_vars['TmpDir']), r'{}\Winapp2.zip'.format(global_vars['TmpDir']),
r'{}\BleachBit\cleaners'.format(global_vars['CBinDir']), r'{}\BleachBit\cleaners'.format(global_vars['CBinDir']),
mode='e', sz_args=[r'Winapp2-master\Non-CCleaner\Winapp2.ini']) mode='e', sz_args=[r'Winapp2-master\Non-CCleaner\Winapp2.ini'])
# Move files into place # Move files into place
dest = r'{}\BleachBit'.format(global_vars['CBinDir']) dest = r'{}\BleachBit'.format(global_vars['CBinDir'])
for item in os.scandir(r'{}\BleachBit-Portable'.format(dest)): for item in os.scandir(r'{}\BleachBit-Portable'.format(dest)):
@ -348,7 +405,7 @@ def update_bleachbit():
shutil.move(item.path, dest_item) shutil.move(item.path, dest_item)
shutil.rmtree( shutil.rmtree(
r'{}\BleachBit\BleachBit-Portable'.format(global_vars['CBinDir'])) r'{}\BleachBit\BleachBit-Portable'.format(global_vars['CBinDir']))
# Cleanup # Cleanup
remove_from_temp('bleachbit.zip') remove_from_temp('bleachbit.zip')
remove_from_temp('Winapp2.zip') remove_from_temp('Winapp2.zip')
@ -357,21 +414,21 @@ def update_bluescreenview():
# Stop running processes # Stop running processes
for exe in ['BlueScreenView.exe', 'BlueScreenView64.exe']: for exe in ['BlueScreenView.exe', 'BlueScreenView64.exe']:
kill_process(exe) kill_process(exe)
# Remove existing folders # Remove existing folders
remove_from_kit('BlueScreenView') remove_from_kit('BlueScreenView')
# Download # Download
download_to_temp('bluescreenview32.zip', SOURCE_URLS['BlueScreenView32']) download_to_temp('bluescreenview32.zip', SOURCE_URLS['BlueScreenView32'])
download_to_temp('bluescreenview64.zip', SOURCE_URLS['BlueScreenView64']) download_to_temp('bluescreenview64.zip', SOURCE_URLS['BlueScreenView64'])
# Extract files # Extract files
extract_temp_to_cbin('bluescreenview64.zip', 'BlueScreenView', sz_args=['BlueScreenView.exe']) extract_temp_to_cbin('bluescreenview64.zip', 'BlueScreenView', sz_args=['BlueScreenView.exe'])
shutil.move( shutil.move(
r'{}\BlueScreenView\BlueScreenView.exe'.format(global_vars['CBinDir']), r'{}\BlueScreenView\BlueScreenView.exe'.format(global_vars['CBinDir']),
r'{}\BlueScreenView\BlueScreenView64.exe'.format(global_vars['CBinDir'])) r'{}\BlueScreenView\BlueScreenView64.exe'.format(global_vars['CBinDir']))
extract_temp_to_cbin('bluescreenview32.zip', 'BlueScreenView') extract_temp_to_cbin('bluescreenview32.zip', 'BlueScreenView')
# Cleanup # Cleanup
remove_from_temp('bluescreenview32.zip') remove_from_temp('bluescreenview32.zip')
remove_from_temp('bluescreenview64.zip') remove_from_temp('bluescreenview64.zip')
@ -379,27 +436,67 @@ def update_bluescreenview():
def update_erunt(): def update_erunt():
# Stop running processes # Stop running processes
kill_process('ERUNT.EXE') kill_process('ERUNT.EXE')
# Remove existing folders # Remove existing folders
remove_from_kit('ERUNT') remove_from_kit('ERUNT')
# Download # Download
download_to_temp('erunt.zip', SOURCE_URLS['ERUNT']) download_to_temp('erunt.zip', SOURCE_URLS['ERUNT'])
# Extract files # Extract files
extract_temp_to_cbin('erunt.zip', 'ERUNT') extract_temp_to_cbin('erunt.zip', 'ERUNT')
# Cleanup # Cleanup
remove_from_temp('erunt.zip') remove_from_temp('erunt.zip')
def update_furmark():
# Stop running processes
for exe in ['cpuburner.exe', 'FurMark.exe', 'gpushark.exe', 'gpuz.exe']:
kill_process(exe)
# Remove existing folders
remove_from_kit('FurMark')
# Prep
install_dir = r'{}\FurMarkTemp'.format(global_vars['TmpDir'])
dest = r'{}\FurMark'.format(global_vars['CBinDir'])
uninstaller = None
# Download
download_to_temp('furmark_setup.exe', SOURCE_URLS['FurMark'])
# Install to temp
cmd = [
r'{}\furmark_setup.exe'.format(global_vars['TmpDir']),
'/DIR={}'.format(install_dir),
'/SILENT']
run_program(cmd)
# Copy files
shutil.copytree(install_dir, dest)
for item in os.scandir(dest):
r = re.search(r'^unins\d+\.(dat|exe)$', item.name, re.IGNORECASE)
if r:
if 'exe' in item.name:
uninstaller = r'{}\{}'.format(install_dir, item.name)
remove_item(item.path)
# Uninstall from temp
if uninstaller:
cmd = [uninstaller, '/SILENT']
run_program(cmd)
# Cleanup
remove_from_temp('furmark_setup.exe')
def update_hitmanpro(): def update_hitmanpro():
# Stop running processes # Stop running processes
for exe in ['HitmanPro.exe', 'HitmanPro64.exe']: for exe in ['HitmanPro.exe', 'HitmanPro64.exe']:
kill_process(exe) kill_process(exe)
# Remove existing folders # Remove existing folders
remove_from_kit('HitmanPro') remove_from_kit('HitmanPro')
# Download # Download
dest = r'{}\HitmanPro'.format(global_vars['CBinDir']) dest = r'{}\HitmanPro'.format(global_vars['CBinDir'])
download_generic(dest, 'HitmanPro.exe', SOURCE_URLS['HitmanPro32']) download_generic(dest, 'HitmanPro.exe', SOURCE_URLS['HitmanPro32'])
@ -410,35 +507,58 @@ def update_hwinfo():
# Stop running processes # Stop running processes
for exe in ['HWiNFO32.exe', 'HWiNFO64.exe']: for exe in ['HWiNFO32.exe', 'HWiNFO64.exe']:
kill_process(exe) kill_process(exe)
# Download # Download
download_to_temp('HWiNFO.zip', SOURCE_URLS['HWiNFO']) download_to_temp('HWiNFO.zip', SOURCE_URLS['HWiNFO'])
# Extract files # Extract files
extract_temp_to_bin('HWiNFO.zip', 'HWiNFO') extract_temp_to_bin('HWiNFO.zip', 'HWiNFO')
# Cleanup # Cleanup
remove_from_temp('HWiNFO.zip') remove_from_temp('HWiNFO.zip')
def update_nircmd():
# Stop running processes
for exe in ['nircmdc.exe', 'nircmdc64.exe']:
kill_process(exe)
# Remove existing folders
remove_from_kit('NirCmd')
# Download
download_to_temp('nircmd32.zip', SOURCE_URLS['NirCmd32'])
download_to_temp('nircmd64.zip', SOURCE_URLS['NirCmd64'])
# Extract files
extract_temp_to_cbin('nircmd64.zip', 'NirCmd', sz_args=['nircmdc.exe'])
shutil.move(
r'{}\NirCmd\nircmdc.exe'.format(global_vars['CBinDir']),
r'{}\NirCmd\nircmdc64.exe'.format(global_vars['CBinDir']))
extract_temp_to_cbin('nircmd32.zip', 'NirCmd', sz_args=['nircmdc.exe'])
# Cleanup
remove_from_temp('nircmd32.zip')
remove_from_temp('nircmd64.zip')
def update_produkey(): def update_produkey():
# Stop running processes # Stop running processes
for exe in ['ProduKey.exe', 'ProduKey64.exe']: for exe in ['ProduKey.exe', 'ProduKey64.exe']:
kill_process(exe) kill_process(exe)
# Remove existing folders # Remove existing folders
remove_from_kit('ProduKey') remove_from_kit('ProduKey')
# Download # Download
download_to_temp('produkey32.zip', SOURCE_URLS['ProduKey32']) download_to_temp('produkey32.zip', SOURCE_URLS['ProduKey32'])
download_to_temp('produkey64.zip', SOURCE_URLS['ProduKey64']) download_to_temp('produkey64.zip', SOURCE_URLS['ProduKey64'])
# Extract files # Extract files
extract_temp_to_cbin('produkey64.zip', 'ProduKey', sz_args=['ProduKey.exe']) extract_temp_to_cbin('produkey64.zip', 'ProduKey', sz_args=['ProduKey.exe'])
shutil.move( shutil.move(
r'{}\ProduKey\ProduKey.exe'.format(global_vars['CBinDir']), r'{}\ProduKey\ProduKey.exe'.format(global_vars['CBinDir']),
r'{}\ProduKey\ProduKey64.exe'.format(global_vars['CBinDir'])) r'{}\ProduKey\ProduKey64.exe'.format(global_vars['CBinDir']))
extract_temp_to_cbin('produkey32.zip', 'ProduKey') extract_temp_to_cbin('produkey32.zip', 'ProduKey')
# Cleanup # Cleanup
remove_from_temp('produkey32.zip') remove_from_temp('produkey32.zip')
remove_from_temp('produkey64.zip') remove_from_temp('produkey64.zip')
@ -447,14 +567,14 @@ def update_produkey():
def update_intel_rst(): def update_intel_rst():
# Remove existing folders # Remove existing folders
remove_from_kit('Intel RST') remove_from_kit('Intel RST')
# Prep # Prep
dest = r'{}\_Drivers\Intel RST'.format(global_vars['CBinDir']) dest = r'{}\_Drivers\Intel RST'.format(global_vars['CBinDir'])
include_path = r'{}\_include\_Drivers\Intel RST'.format( include_path = r'{}\_include\_Drivers\Intel RST'.format(
global_vars['CBinDir']) global_vars['CBinDir'])
if os.path.exists(include_path): if os.path.exists(include_path):
shutil.copytree(include_path, dest) shutil.copytree(include_path, dest)
# Download # Download
for name, url in RST_SOURCES.items(): for name, url in RST_SOURCES.items():
download_generic(dest, name, url) download_generic(dest, name, url)
@ -462,7 +582,7 @@ def update_intel_rst():
def update_intel_ssd_toolbox(): def update_intel_ssd_toolbox():
# Remove existing folders # Remove existing folders
remove_from_kit('Intel SSD Toolbox.exe') remove_from_kit('Intel SSD Toolbox.exe')
# Download # Download
download_generic( download_generic(
r'{}\_Drivers\Intel SSD Toolbox'.format(global_vars['CBinDir']), r'{}\_Drivers\Intel SSD Toolbox'.format(global_vars['CBinDir']),
@ -472,12 +592,20 @@ def update_intel_ssd_toolbox():
def update_samsung_magician(): def update_samsung_magician():
# Remove existing folders # Remove existing folders
remove_from_kit('Samsung Magician.exe') remove_from_kit('Samsung Magician.exe')
# Download # Download
download_generic( download_to_temp('Samsung Magician.zip', SOURCE_URLS['Samsung Magician'])
r'{}\_Drivers\Samsung Magician'.format(global_vars['CBinDir']),
'Samsung Magician.exe', # Extract
SOURCE_URLS['Samsung Magician']) extract_temp_to_cbin('Samsung Magician.zip', '_Drivers\Samsung Magician')
shutil.move(
r'{}\_Drivers\Samsung Magician\Samsung_Magician_Installer.exe'.format(
global_vars['CBinDir']),
r'{}\_Drivers\Samsung Magician\Samsung Magician.exe'.format(
global_vars['CBinDir']))
# Cleanup
remove_from_temp('Samsung Magician.zip')
def update_sdi_origin(): def update_sdi_origin():
# Download aria2 # Download aria2
@ -486,7 +614,7 @@ def update_sdi_origin():
aria_dest = r'{}\aria2'.format(global_vars['TmpDir']) aria_dest = r'{}\aria2'.format(global_vars['TmpDir'])
aria = r'{}\aria2c.exe'.format(aria_dest) aria = r'{}\aria2c.exe'.format(aria_dest)
extract_generic(aria_source, aria_dest, mode='e') extract_generic(aria_source, aria_dest, mode='e')
# Prep for torrent download # Prep for torrent download
download_to_temp('sdio.torrent', SOURCE_URLS['SDIO Torrent']) download_to_temp('sdio.torrent', SOURCE_URLS['SDIO Torrent'])
sdio_torrent = r'{}\sdio.torrent'.format(global_vars['TmpDir']) sdio_torrent = r'{}\sdio.torrent'.format(global_vars['TmpDir'])
@ -497,7 +625,7 @@ def update_sdi_origin():
if r and not re.search(r'(\.(bat|inf)|Video|Server|Printer|XP)', line, re.IGNORECASE): if r and not re.search(r'(\.(bat|inf)|Video|Server|Printer|XP)', line, re.IGNORECASE):
indexes.append(int(r.group(1))) indexes.append(int(r.group(1)))
indexes = [str(i) for i in sorted(indexes)] indexes = [str(i) for i in sorted(indexes)]
# Download SDI Origin # Download SDI Origin
cmd = [ cmd = [
aria, aria,
@ -510,13 +638,13 @@ def update_sdi_origin():
run_program(cmd, pipe=False, check=False, shell=True) run_program(cmd, pipe=False, check=False, shell=True)
sleep(1) sleep(1)
wait_for_process('aria2c') wait_for_process('aria2c')
# Download SDI Origin extra themes # Download SDI Origin extra themes
download_to_temp('sdio_themes.zip', SOURCE_URLS['SDIO Themes']) download_to_temp('sdio_themes.zip', SOURCE_URLS['SDIO Themes'])
theme_source = r'{}\sdio_themes.zip'.format(global_vars['TmpDir']) theme_source = r'{}\sdio_themes.zip'.format(global_vars['TmpDir'])
theme_dest = r'{}\SDIO_Update\tools\SDI\themes'.format(aria_dest) theme_dest = r'{}\SDIO_Update\tools\SDI\themes'.format(aria_dest)
extract_generic(theme_source, theme_dest) extract_generic(theme_source, theme_dest)
# Move files into place # Move files into place
for item in os.scandir(r'{}\SDIO_Update'.format(aria_dest)): for item in os.scandir(r'{}\SDIO_Update'.format(aria_dest)):
dest_item = '{}\_Drivers\SDIO\{}'.format( dest_item = '{}\_Drivers\SDIO\{}'.format(
@ -528,7 +656,7 @@ def update_sdi_origin():
if (not os.path.exists(dest_item) if (not os.path.exists(dest_item)
and not re.search(r'\.(inf|bat)$', item.name, re.IGNORECASE)): and not re.search(r'\.(inf|bat)$', item.name, re.IGNORECASE)):
shutil.move(item.path, dest_item) shutil.move(item.path, dest_item)
# Cleanup # Cleanup
remove_from_temp('aria2') remove_from_temp('aria2')
remove_from_temp('aria2.zip') remove_from_temp('aria2.zip')
@ -540,29 +668,51 @@ def update_adobe_reader_dc():
# Prep # Prep
dest = r'{}\Installers\Extras\Office'.format( dest = r'{}\Installers\Extras\Office'.format(
global_vars['BaseDir']) global_vars['BaseDir'])
# Remove existing installer # Remove existing installer
try: try:
os.remove(r'{}\Adobe Reader DC.exe'.format(dest)) os.remove(r'{}\Adobe Reader DC.exe'.format(dest))
except FileNotFoundError: except FileNotFoundError:
pass pass
# Download # Download
download_generic( download_generic(
dest, 'Adobe Reader DC.exe', SOURCE_URLS['Adobe Reader DC']) dest, 'Adobe Reader DC.exe', SOURCE_URLS['Adobe Reader DC'])
def update_eset_config():
"""Copy config files to .cbin before compress_item"""
dest = r'{}\ESETConfigs'.format(global_vars['CBinDir'])
include_path = r'{}\_include\ESETConfigs'.format(global_vars['CBinDir'])
if os.path.exists(include_path):
shutil.copytree(include_path, dest)
def update_macs_fan_control():
# Prep
dest = r'{}\Installers'.format(
global_vars['BaseDir'])
# Remove existing installer
try:
os.remove(r'{}\Macs Fan Control.exe'.format(dest))
except FileNotFoundError:
pass
# Download
download_generic(
dest, 'Macs Fan Control.exe', SOURCE_URLS['Macs Fan Control'])
def update_office(): def update_office():
# Remove existing folders # Remove existing folders
remove_from_kit('_Office') remove_from_kit('_Office')
# Prep # Prep
dest = r'{}\_Office'.format(global_vars['CBinDir']) dest = r'{}\_Office'.format(global_vars['CBinDir'])
include_path = r'{}\_include\_Office'.format(global_vars['CBinDir']) include_path = r'{}\_include\_Office'.format(global_vars['CBinDir'])
if os.path.exists(include_path): if os.path.exists(include_path):
shutil.copytree(include_path, dest) shutil.copytree(include_path, dest)
# Download and extract for year in ['2016']:
for year in ['2013', '2016']: # Download and extract
name = 'odt{}.exe'.format(year) name = 'odt{}.exe'.format(year)
url = 'Office Deployment Tool {}'.format(year) url = 'Office Deployment Tool {}'.format(year)
download_to_temp(name, SOURCE_URLS[url]) download_to_temp(name, SOURCE_URLS[url])
@ -575,15 +725,14 @@ def update_office():
shutil.move( shutil.move(
r'{}\{}'.format(global_vars['TmpDir'], year), r'{}\{}'.format(global_vars['TmpDir'], year),
r'{}\_Office\{}'.format(global_vars['CBinDir'], year)) r'{}\_Office\{}'.format(global_vars['CBinDir'], year))
# Cleanup # Cleanup
remove_from_temp('odt2013.exe') remove_from_temp('odt{}.exe'.format(year))
remove_from_temp('odt2016.exe')
def update_classic_start_skin(): def update_classic_start_skin():
# Remove existing folders # Remove existing folders
remove_from_kit('ClassicStartSkin') remove_from_kit('ClassicStartSkin')
# Download # Download
download_generic( download_generic(
r'{}\ClassicStartSkin'.format(global_vars['CBinDir']), r'{}\ClassicStartSkin'.format(global_vars['CBinDir']),
@ -593,13 +742,13 @@ def update_classic_start_skin():
def update_vcredists(): def update_vcredists():
# Remove existing folders # Remove existing folders
remove_from_kit('_vcredists') remove_from_kit('_vcredists')
# Prep # Prep
dest = r'{}\_vcredists'.format(global_vars['CBinDir']) dest = r'{}\_vcredists'.format(global_vars['CBinDir'])
include_path = r'{}\_include\_vcredists'.format(global_vars['CBinDir']) include_path = r'{}\_include\_vcredists'.format(global_vars['CBinDir'])
if os.path.exists(include_path): if os.path.exists(include_path):
shutil.copytree(include_path, dest) shutil.copytree(include_path, dest)
# Download # Download
for year in VCREDIST_SOURCES.keys(): for year in VCREDIST_SOURCES.keys():
for bit in ['32', '64']: for bit in ['32', '64']:
@ -613,10 +762,10 @@ def update_vcredists():
def update_one_ninite(section, dest, name, url, indent=8, width=40): def update_one_ninite(section, dest, name, url, indent=8, width=40):
# Prep # Prep
url = 'https://ninite.com/{}/ninite.exe'.format(url) url = 'https://ninite.com/{}/ninite.exe'.format(url)
# Download # Download
download_generic(out_dir=dest, out_name=name, source_url=url) download_generic(out_dir=dest, out_name=name, source_url=url)
# Copy to Installers folder # Copy to Installers folder
installer_parent = r'{}\Installers\Extras\{}'.format( installer_parent = r'{}\Installers\Extras\{}'.format(
global_vars['BaseDir'], section) global_vars['BaseDir'], section)
@ -640,16 +789,16 @@ def update_all_ninite(indent=8, width=40, other_results={}):
def update_caffeine(): def update_caffeine():
# Stop running processes # Stop running processes
kill_process('caffeine.exe') kill_process('caffeine.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('Caffeine') remove_from_kit('Caffeine')
# Download # Download
download_to_temp('caffeine.zip', SOURCE_URLS['Caffeine']) download_to_temp('caffeine.zip', SOURCE_URLS['Caffeine'])
# Extract files # Extract files
extract_temp_to_cbin('caffeine.zip', 'Caffeine') extract_temp_to_cbin('caffeine.zip', 'Caffeine')
# Cleanup # Cleanup
remove_from_temp('caffeine.zip') remove_from_temp('caffeine.zip')
@ -657,16 +806,16 @@ def update_du():
# Stop running processes # Stop running processes
kill_process('du.exe') kill_process('du.exe')
kill_process('du64.exe') kill_process('du64.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('Du') remove_from_kit('Du')
# Download # Download
download_to_temp('du.zip', SOURCE_URLS['Du']) download_to_temp('du.zip', SOURCE_URLS['Du'])
# Extract files # Extract files
extract_temp_to_cbin('du.zip', 'Du') extract_temp_to_cbin('du.zip', 'Du')
# Cleanup # Cleanup
remove_from_temp('du.zip') remove_from_temp('du.zip')
@ -674,21 +823,21 @@ def update_everything():
# Stop running processes # Stop running processes
for exe in ['Everything.exe', 'Everything64.exe']: for exe in ['Everything.exe', 'Everything64.exe']:
kill_process(exe) kill_process(exe)
# Remove existing folders # Remove existing folders
remove_from_kit('Everything') remove_from_kit('Everything')
# Download # Download
download_to_temp('everything32.zip', SOURCE_URLS['Everything32']) download_to_temp('everything32.zip', SOURCE_URLS['Everything32'])
download_to_temp('everything64.zip', SOURCE_URLS['Everything64']) download_to_temp('everything64.zip', SOURCE_URLS['Everything64'])
# Extract files # Extract files
extract_temp_to_cbin('everything64.zip', 'Everything', sz_args=['Everything.exe']) extract_temp_to_cbin('everything64.zip', 'Everything', sz_args=['Everything.exe'])
shutil.move( shutil.move(
r'{}\Everything\Everything.exe'.format(global_vars['CBinDir']), r'{}\Everything\Everything.exe'.format(global_vars['CBinDir']),
r'{}\Everything\Everything64.exe'.format(global_vars['CBinDir'])) r'{}\Everything\Everything64.exe'.format(global_vars['CBinDir']))
extract_temp_to_cbin('everything32.zip', 'Everything') extract_temp_to_cbin('everything32.zip', 'Everything')
# Cleanup # Cleanup
remove_from_temp('everything32.zip') remove_from_temp('everything32.zip')
remove_from_temp('everything64.zip') remove_from_temp('everything64.zip')
@ -696,86 +845,100 @@ def update_everything():
def update_firefox_ublock_origin(): def update_firefox_ublock_origin():
# Remove existing folders # Remove existing folders
remove_from_kit('FirefoxExtensions') remove_from_kit('FirefoxExtensions')
# Download # Download
download_to_temp('ff-uBO.xpi', SOURCE_URLS['Firefox uBO']) download_generic(
r'{}\FirefoxExtensions'.format(global_vars['CBinDir']),
# Extract files 'ublock_origin.xpi',
extract_generic( SOURCE_URLS['Firefox uBO'])
r'{}\ff-uBO.xpi'.format(global_vars['TmpDir']),
r'{}\FirefoxExtensions\uBlock0@raymondhill.net'.format(
global_vars['CBinDir']))
# Cleanup
remove_from_temp('ff-uBO.xpi')
def update_notepadplusplus(): def update_notepadplusplus():
# Stop running processes # Stop running processes
kill_process('notepadplusplus.exe') kill_process('notepadplusplus.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('NotepadPlusPlus') remove_from_kit('NotepadPlusPlus')
# Download # Download
download_to_temp('npp.7z', SOURCE_URLS['NotepadPlusPlus']) download_to_temp('npp.7z', SOURCE_URLS['NotepadPlusPlus'])
# Extract files # Extract files
extract_temp_to_cbin('npp.7z', 'NotepadPlusPlus') extract_temp_to_cbin('npp.7z', 'NotepadPlusPlus')
shutil.move( shutil.move(
r'{}\NotepadPlusPlus\notepad++.exe'.format(global_vars['CBinDir']), r'{}\NotepadPlusPlus\notepad++.exe'.format(global_vars['CBinDir']),
r'{}\NotepadPlusPlus\notepadplusplus.exe'.format(global_vars['CBinDir']) r'{}\NotepadPlusPlus\notepadplusplus.exe'.format(global_vars['CBinDir'])
) )
# Cleanup # Cleanup
remove_from_temp('npp.7z') remove_from_temp('npp.7z')
def update_putty(): def update_putty():
# Stop running processes # Stop running processes
kill_process('PUTTY.EXE') kill_process('PUTTY.EXE')
# Remove existing folders # Remove existing folders
remove_from_kit('PuTTY') remove_from_kit('PuTTY')
# Download # Download
download_to_temp('putty.zip', SOURCE_URLS['PuTTY']) download_to_temp('putty.zip', SOURCE_URLS['PuTTY'])
# Extract files # Extract files
extract_temp_to_cbin('putty.zip', 'PuTTY') extract_temp_to_cbin('putty.zip', 'PuTTY')
# Cleanup # Cleanup
remove_from_temp('putty.zip') remove_from_temp('putty.zip')
def update_treesizefree(): def update_shutup10():
# Stop running processes # Stop running processes
kill_process('TreeSizeFree.exe') kill_process('OOSU10.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('TreeSizeFree') remove_from_kit('ShutUp10')
# Copy settings
dest = r'{}\ShutUp10'.format(global_vars['CBinDir'])
include_path = r'{}\_include\ShutUp10'.format(global_vars['CBinDir'])
if os.path.exists(include_path):
shutil.copytree(include_path, dest)
# Download
download_generic(
r'{}\ShutUp10'.format(global_vars['CBinDir']),
'OOSU10.exe',
SOURCE_URLS['ShutUp10'])
def update_wiztree():
# Stop running processes
for process in ['WizTree.exe', 'WizTree64.exe']:
kill_process(process)
# Remove existing folders
remove_from_kit('WizTree')
# Download # Download
download_to_temp( download_to_temp(
'treesizefree.zip', SOURCE_URLS['TreeSizeFree']) 'wiztree.zip', SOURCE_URLS['WizTree'])
# Extract files # Extract files
extract_temp_to_cbin('treesizefree.zip', 'TreeSizeFree') extract_temp_to_cbin('wiztree.zip', 'WizTree')
# Cleanup # Cleanup
remove_from_temp('treesizefree.zip') remove_from_temp('wiztree.zip')
def update_xmplay(): def update_xmplay():
# Stop running processes # Stop running processes
kill_process('xmplay.exe') kill_process('xmplay.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('XMPlay') remove_from_kit('XMPlay')
# Download # Download
download_to_temp('xmplay.zip', SOURCE_URLS['XMPlay']) download_to_temp('xmplay.zip', SOURCE_URLS['XMPlay'])
download_to_temp('xmp-7z.zip', SOURCE_URLS['XMPlay 7z']) download_to_temp('xmp-7z.zip', SOURCE_URLS['XMPlay 7z'])
download_to_temp('xmp-gme.zip', SOURCE_URLS['XMPlay Game']) download_to_temp('xmp-gme.zip', SOURCE_URLS['XMPlay Game'])
download_to_temp('xmp-rar.zip', SOURCE_URLS['XMPlay RAR']) download_to_temp('xmp-rar.zip', SOURCE_URLS['XMPlay RAR'])
download_to_temp('WAModern.zip', SOURCE_URLS['XMPlay WAModern']) download_to_temp('WAModern.zip', SOURCE_URLS['XMPlay WAModern'])
# Extract files # Extract files
extract_temp_to_cbin('xmplay.zip', 'XMPlay', extract_temp_to_cbin('xmplay.zip', 'XMPlay',
mode='e', sz_args=['xmplay.exe', 'xmplay.txt']) mode='e', sz_args=['xmplay.exe', 'xmplay.txt'])
@ -787,7 +950,7 @@ def update_xmplay():
r'{}\{}.zip'.format(global_vars['TmpDir'], item), r'{}\{}.zip'.format(global_vars['TmpDir'], item),
r'{}\XMPlay\plugins'.format(global_vars['CBinDir']), r'{}\XMPlay\plugins'.format(global_vars['CBinDir']),
mode='e', sz_args=filter) mode='e', sz_args=filter)
# Download Music # Download Music
dest = r'{}\XMPlay\music_tmp\MOD'.format(global_vars['CBinDir']) dest = r'{}\XMPlay\music_tmp\MOD'.format(global_vars['CBinDir'])
for mod in MUSIC_MOD: for mod in MUSIC_MOD:
@ -799,7 +962,7 @@ def update_xmplay():
name = '{}.rsn'.format(game) name = '{}.rsn'.format(game)
url = 'http://snesmusic.org/v2/download.php?spcNow={}'.format(game) url = 'http://snesmusic.org/v2/download.php?spcNow={}'.format(game)
download_generic(dest, name, url) download_generic(dest, name, url)
# Compress Music # Compress Music
cmd = [ cmd = [
global_vars['Tools']['SevenZip'], global_vars['Tools']['SevenZip'],
@ -808,7 +971,7 @@ def update_xmplay():
r'{}\XMPlay\music_tmp\*'.format(global_vars['CBinDir']), r'{}\XMPlay\music_tmp\*'.format(global_vars['CBinDir']),
] ]
run_program(cmd) run_program(cmd)
# Cleanup # Cleanup
remove_item(r'{}\XMPlay\music_tmp'.format(global_vars['CBinDir'])) remove_item(r'{}\XMPlay\music_tmp'.format(global_vars['CBinDir']))
remove_from_temp('xmplay.zip') remove_from_temp('xmplay.zip')
@ -821,24 +984,23 @@ def update_xmplay():
def update_adwcleaner(): def update_adwcleaner():
# Stop running processes # Stop running processes
kill_process('AdwCleaner.exe') kill_process('AdwCleaner.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('AdwCleaner') remove_from_kit('AdwCleaner')
# Download # Download
url = resolve_dynamic_url(
SOURCE_URLS['AdwCleaner'],
'id="downloadLink"')
download_generic( download_generic(
r'{}\AdwCleaner'.format(global_vars['CBinDir']), 'AdwCleaner.exe', url) r'{}\AdwCleaner'.format(global_vars['CBinDir']),
'AdwCleaner.exe',
SOURCE_URLS['AdwCleaner'])
def update_kvrt(): def update_kvrt():
# Stop running processes # Stop running processes
kill_process('KVRT.exe') kill_process('KVRT.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('KVRT') remove_from_kit('KVRT')
# Download # Download
download_generic( download_generic(
r'{}\KVRT'.format(global_vars['CBinDir']), r'{}\KVRT'.format(global_vars['CBinDir']),
@ -848,10 +1010,10 @@ def update_kvrt():
def update_rkill(): def update_rkill():
# Stop running processes # Stop running processes
kill_process('RKill.exe') kill_process('RKill.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('RKill') remove_from_kit('RKill')
# Download # Download
url = resolve_dynamic_url( url = resolve_dynamic_url(
SOURCE_URLS['RKill'], SOURCE_URLS['RKill'],
@ -862,36 +1024,56 @@ def update_rkill():
def update_tdsskiller(): def update_tdsskiller():
# Stop running processes # Stop running processes
kill_process('TDSSKiller.exe') kill_process('TDSSKiller.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('TDSSKiller') remove_from_kit('TDSSKiller')
# Download # Download
download_generic( download_generic(
r'{}\TDSSKiller'.format(global_vars['CBinDir']), r'{}\TDSSKiller'.format(global_vars['CBinDir']),
'TDSSKiller.exe', 'TDSSKiller.exe',
SOURCE_URLS['TDSSKiller']) SOURCE_URLS['TDSSKiller'])
def update_winaiorepair():
# Stop running processes
kill_process('Repair_Windows.exe')
# Download
download_to_temp('winaio.zip', SOURCE_URLS['WinAIO Repair'])
# Extract
extract_temp_to_cbin('winaio.zip', 'WinAIORepair')
dest = r'{}\WinAIORepair'.format(global_vars['CBinDir'])
for item in os.scandir(r'{}\Tweaking.com - Windows Repair'.format(dest)):
dest_item = '{}\{}'.format(dest, item.name)
if not os.path.exists(dest_item):
shutil.move(item.path, dest_item)
shutil.rmtree(
r'{}\WinAIORepair\Tweaking.com - Windows Repair'.format(global_vars['CBinDir']))
# Cleanup
remove_from_temp('winaio.zip')
## Uninstallers ## ## Uninstallers ##
def update_iobit_uninstaller(): def update_iobit_uninstaller():
# Stop running processes # Stop running processes
kill_process('IObitUninstallerPortable.exe') kill_process('IObitUninstallerPortable.exe')
# Remove existing folders # Remove existing folders
remove_from_kit('IObitUninstallerPortable') remove_from_kit('IObitUninstallerPortable')
# Download # Download
download_generic( download_generic(
global_vars['CBinDir'], global_vars['CBinDir'],
'IObitUninstallerPortable.exe', 'IObitUninstallerPortable.exe',
SOURCE_URLS['IOBit_Uninstaller']) SOURCE_URLS['IOBit_Uninstaller'])
# "Install" # "Install"
cmd = r'{}\IObitUninstallerPortable.exe'.format(global_vars['CBinDir']) cmd = r'{}\IObitUninstallerPortable.exe'.format(global_vars['CBinDir'])
popen_program(cmd) popen_program(cmd)
sleep(1) sleep(1)
wait_for_process('IObitUninstallerPortable') wait_for_process('IObitUninstallerPortable')
# Cleanup # Cleanup
remove_from_kit('IObitUninstallerPortable.exe') remove_from_kit('IObitUninstallerPortable.exe')

View file

@ -17,7 +17,7 @@ WINDOWS_VERSIONS = [
{'Name': 'Windows 7 Ultimate', {'Name': 'Windows 7 Ultimate',
'Image File': 'Win7', 'Image File': 'Win7',
'Image Name': 'Windows 7 ULTIMATE'}, 'Image Name': 'Windows 7 ULTIMATE'},
{'Name': 'Windows 8.1', {'Name': 'Windows 8.1',
'Image File': 'Win8', 'Image File': 'Win8',
'Image Name': 'Windows 8.1', 'Image Name': 'Windows 8.1',
@ -25,7 +25,7 @@ WINDOWS_VERSIONS = [
{'Name': 'Windows 8.1 Pro', {'Name': 'Windows 8.1 Pro',
'Image File': 'Win8', 'Image File': 'Win8',
'Image Name': 'Windows 8.1 Pro'}, 'Image Name': 'Windows 8.1 Pro'},
{'Name': 'Windows 10 Home', {'Name': 'Windows 10 Home',
'Image File': 'Win10', 'Image File': 'Win10',
'Image Name': 'Windows 10 Home', 'Image Name': 'Windows 10 Home',
@ -75,7 +75,7 @@ def find_windows_image(windows_version):
image['Glob'] = '--ref="{}*.swm"'.format( image['Glob'] = '--ref="{}*.swm"'.format(
image['Path'][:-4]) image['Path'][:-4])
break break
# Display image to be used (if any) and return # Display image to be used (if any) and return
if image: if image:
print_info('Using image: {}'.format(image['Path'])) print_info('Using image: {}'.format(image['Path']))
@ -122,7 +122,7 @@ def format_gpt(disk):
'set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"', 'set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"',
'gpt attributes=0x8000000000000001', 'gpt attributes=0x8000000000000001',
] ]
# Run # Run
run_diskpart(script) run_diskpart(script)
@ -151,7 +151,7 @@ def format_mbr(disk):
'assign letter="T"', 'assign letter="T"',
'set id=27', 'set id=27',
] ]
# Run # Run
run_diskpart(script) run_diskpart(script)
@ -197,11 +197,11 @@ def setup_windows_re(windows_version, windows_letter='W', tools_letter='T'):
win = r'{}:\Windows'.format(windows_letter) win = r'{}:\Windows'.format(windows_letter)
winre = r'{}\System32\Recovery\WinRE.wim'.format(win) winre = r'{}\System32\Recovery\WinRE.wim'.format(win)
dest = r'{}:\Recovery\WindowsRE'.format(tools_letter) dest = r'{}:\Recovery\WindowsRE'.format(tools_letter)
# Copy WinRE.wim # Copy WinRE.wim
os.makedirs(dest, exist_ok=True) os.makedirs(dest, exist_ok=True)
shutil.copy(winre, r'{}\WinRE.wim'.format(dest)) shutil.copy(winre, r'{}\WinRE.wim'.format(dest))
# Set location # Set location
cmd = [ cmd = [
r'{}\System32\ReAgentc.exe'.format(win), r'{}\System32\ReAgentc.exe'.format(win),
@ -231,7 +231,7 @@ def wim_contains_image(filename, imagename):
run_program(cmd) run_program(cmd)
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
return False return False
return True return True
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -90,7 +90,7 @@ def menu_backup():
message = 'Assigning letters...', message = 'Assigning letters...',
function = assign_volume_letters, function = assign_volume_letters,
other_results = other_results) other_results = other_results)
# Mount backup shares # Mount backup shares
mount_backup_shares(read_write=True) mount_backup_shares(read_write=True)
@ -107,12 +107,12 @@ def menu_backup():
else: else:
print_error('ERROR: No disks found.') print_error('ERROR: No disks found.')
raise GenericAbort raise GenericAbort
# Select disk to backup # Select disk to backup
disk = select_disk('For which disk are we creating backups?', disks) disk = select_disk('For which disk are we creating backups?', disks)
if not disk: if not disk:
raise GenericAbort raise GenericAbort
# "Prep" disk # "Prep" disk
prep_disk_for_backup(destination, disk, backup_prefix) prep_disk_for_backup(destination, disk, backup_prefix)
@ -150,7 +150,7 @@ def menu_backup():
# Ask to proceed # Ask to proceed
if (not ask('Proceed with backup?')): if (not ask('Proceed with backup?')):
raise GenericAbort raise GenericAbort
# Backup partition(s) # Backup partition(s)
print_info('\n\nStarting task.\n') print_info('\n\nStarting task.\n')
for par in disk['Partitions']: for par in disk['Partitions']:
@ -163,7 +163,7 @@ def menu_backup():
if not result['CS'] and not isinstance(result['Error'], GenericAbort): if not result['CS'] and not isinstance(result['Error'], GenericAbort):
errors = True errors = True
par['Error'] = result['Error'] par['Error'] = result['Error']
# Verify backup(s) # Verify backup(s)
if disk['Valid Partitions']: if disk['Valid Partitions']:
print_info('\n\nVerifying backup images(s)\n') print_info('\n\nVerifying backup images(s)\n')
@ -270,7 +270,7 @@ def menu_setup():
# Select the version of Windows to apply # Select the version of Windows to apply
windows_version = select_windows_version() windows_version = select_windows_version()
# Find Windows image # Find Windows image
# NOTE: Reassign volume letters to ensure all devices are scanned # NOTE: Reassign volume letters to ensure all devices are scanned
try_and_print( try_and_print(
@ -289,12 +289,12 @@ def menu_setup():
else: else:
print_error('ERROR: No disks found.') print_error('ERROR: No disks found.')
raise GenericAbort raise GenericAbort
# Select disk to use as the OS disk # Select disk to use as the OS disk
dest_disk = select_disk('To which disk are we installing Windows?', disks) dest_disk = select_disk('To which disk are we installing Windows?', disks)
if not dest_disk: if not dest_disk:
raise GenericAbort raise GenericAbort
# "Prep" disk # "Prep" disk
prep_disk_for_formatting(dest_disk) prep_disk_for_formatting(dest_disk)
@ -323,10 +323,10 @@ def menu_setup():
data = par['Display String'], data = par['Display String'],
warning = True) warning = True)
print_warning(dest_disk['Format Warnings']) print_warning(dest_disk['Format Warnings'])
if (not ask('Is this correct?')): if (not ask('Is this correct?')):
raise GenericAbort raise GenericAbort
# Safety check # Safety check
print_standard('\nSAFETY CHECK') print_standard('\nSAFETY CHECK')
print_warning('All data will be DELETED from the ' print_warning('All data will be DELETED from the '
@ -342,7 +342,7 @@ def menu_setup():
function = remove_volume_letters, function = remove_volume_letters,
other_results = other_results, other_results = other_results,
keep=windows_image['Letter']) keep=windows_image['Letter'])
# Assign new letter for local source if necessary # Assign new letter for local source if necessary
if windows_image['Local'] and windows_image['Letter'] in ['S', 'T', 'W']: if windows_image['Local'] and windows_image['Letter'] in ['S', 'T', 'W']:
new_letter = try_and_print( new_letter = try_and_print(
@ -377,13 +377,13 @@ def menu_setup():
# We need to crash as the disk is in an unknown state # We need to crash as the disk is in an unknown state
print_error('ERROR: Failed to apply image.') print_error('ERROR: Failed to apply image.')
raise GenericAbort raise GenericAbort
# Create Boot files # Create Boot files
try_and_print( try_and_print(
message = 'Updating boot files...', message = 'Updating boot files...',
function = update_boot_partition, function = update_boot_partition,
other_results = other_results) other_results = other_results)
# Setup WinRE # Setup WinRE
try_and_print( try_and_print(
message = 'Updating recovery tools...', message = 'Updating recovery tools...',
@ -392,8 +392,8 @@ def menu_setup():
windows_version = windows_version) windows_version = windows_version)
# Copy WinPE log(s) # Copy WinPE log(s)
source = r'{}\Info'.format(global_vars['ClientDir']) source = r'{}\Logs'.format(global_vars['ClientDir'])
dest = r'W:\{}\Info'.format(KIT_NAME_SHORT) dest = r'W:\{}\Logs\WinPE'.format(KIT_NAME_SHORT)
shutil.copytree(source, dest) shutil.copytree(source, dest)
# Print summary # Print summary

View file

@ -8,7 +8,7 @@ MENU="hw-diags-menu"
function ask() { function ask() {
while :; do while :; do
read -p "$1 " -r answer read -p "$1 [Y/N] " -r answer
if echo "$answer" | egrep -iq '^(y|yes|sure)$'; then if echo "$answer" | egrep -iq '^(y|yes|sure)$'; then
return 0 return 0
elif echo "$answer" | egrep -iq '^(n|no|nope)$'; then elif echo "$answer" | egrep -iq '^(n|no|nope)$'; then
@ -24,9 +24,12 @@ die () {
# Check for running session # Check for running session
if tmux list-session | grep -q "$SESSION_NAME"; then if tmux list-session | grep -q "$SESSION_NAME"; then
echo "WARNING: hw-diags tmux session already exists." echo "WARNING: tmux session $SESSION_NAME already exists."
echo "" echo ""
if ask "Kill current session?"; then if ask "Connect to current session?"; then
# Do nothing, the command below will attach/connect
echo ""
elif ask "Kill current session and start new session?"; then
tmux kill-session -t "$SESSION_NAME" || \ tmux kill-session -t "$SESSION_NAME" || \
die "Failed to kill session: $SESSION_NAME" die "Failed to kill session: $SESSION_NAME"
else else
@ -39,5 +42,5 @@ if tmux list-session | grep -q "$SESSION_NAME"; then
fi fi
# Start session # Start session
tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" $* tmux new-session -A -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" $*

View file

@ -67,7 +67,11 @@ def get_feature_string(chip, feature):
for sf in sfs: for sf in sfs:
name = sf.name[skipname:].decode("utf-8").strip() name = sf.name[skipname:].decode("utf-8").strip()
val = sensors.get_value(chip, sf.number) try:
val = sensors.get_value(chip, sf.number)
except Exception:
# Ignore upstream sensor bugs and lie instead
val = -123456789
if 'alarm' in name: if 'alarm' in name:
# Skip # Skip
continue continue

View file

@ -33,7 +33,7 @@ for /f "tokens=* usebackq" %%f in (`findstr KIT_NAME_SHORT "%SETTINGS%"`) do (
set "KIT_NAME_SHORT=!_v:~0,-1!" set "KIT_NAME_SHORT=!_v:~0,-1!"
) )
set "client_dir=%systemdrive%\%KIT_NAME_SHORT%" set "client_dir=%systemdrive%\%KIT_NAME_SHORT%"
set "log_dir=%client_dir%\Info\%iso_date%" set "log_dir=%client_dir%\Logs\%iso_date%"
:Flags :Flags
set _backups= set _backups=
@ -45,7 +45,7 @@ set _transfer=
for %%f in (%*) do ( for %%f in (%*) do (
if /i "%%f" == "/DEBUG" (@echo on) if /i "%%f" == "/DEBUG" (@echo on)
if /i "%%f" == "/Backups" set _backups=True if /i "%%f" == "/Backups" set _backups=True
if /i "%%f" == "/Info" set _info=True if /i "%%f" == "/Logs" set _logs=True
if /i "%%f" == "/Office" set _office=True if /i "%%f" == "/Office" set _office=True
if /i "%%f" == "/Quarantine" set _quarantine=True if /i "%%f" == "/Quarantine" set _quarantine=True
if /i "%%f" == "/QuickBooks" set _quickbooks=True if /i "%%f" == "/QuickBooks" set _quickbooks=True
@ -54,7 +54,10 @@ for %%f in (%*) do (
:CreateDirs :CreateDirs
if defined _backups mkdir "%client_dir%\Backups">nul 2>&1 if defined _backups mkdir "%client_dir%\Backups">nul 2>&1
if defined _info mkdir "%client_dir%\Info">nul 2>&1 if defined _logs (
mkdir "%log_dir%\%KIT_NAME_FULL%">nul 2>&1
mkdir "%log_dir%\d7II">nul 2>&1
mkdir "%log_dir%\Tools">nul 2>&1)
if defined _office mkdir "%client_dir%\Office">nul 2>&1 if defined _office mkdir "%client_dir%\Office">nul 2>&1
if defined _quarantine mkdir "%client_dir%\Quarantine">nul 2>&1 if defined _quarantine mkdir "%client_dir%\Quarantine">nul 2>&1
if defined _quickbooks mkdir "%client_dir%\QuickBooks">nul 2>&1 if defined _quickbooks mkdir "%client_dir%\QuickBooks">nul 2>&1

View file

@ -0,0 +1,26 @@
# Wizard Kit: Install ESET NOD32 AV
import os
import sys
# Init
os.chdir(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(os.getcwd())
from functions.setup import *
init_global_vars()
os.system('title {}: Install ESET NOD32 AV'.format(KIT_NAME_FULL))
set_log_file('Install ESET NOD32 AV.log')
if __name__ == '__main__':
try:
stay_awake()
clear_screen()
print_info('{}: Install ESET NOD32 AV\n'.format(KIT_NAME_FULL))
scan_pups = ask('Enable PUP scans in ESET?')
install_eset_nod32_av(scan_pups)
print_standard('\nDone.')
exit_script()
except SystemExit:
pass
except:
major_exception()

View file

@ -9,7 +9,8 @@ sys.path.append(os.getcwd())
from functions.setup import * from functions.setup import *
init_global_vars() init_global_vars()
os.system('title {}: SW Bundle Tool'.format(KIT_NAME_FULL)) os.system('title {}: SW Bundle Tool'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\Install SW Bundle.log'.format(**global_vars) set_log_file('Install SW Bundle.log')
D7_MODE = 'd7mode' in sys.argv
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -25,20 +26,17 @@ if __name__ == '__main__':
'GenericRepair': 'Repaired', 'GenericRepair': 'Repaired',
'UnsupportedOSError': 'Unsupported OS', 'UnsupportedOSError': 'Unsupported OS',
}} }}
answer_extensions = ask('Install Extensions?') answer_extensions = D7_MODE or ask('Install Extensions?')
answer_adobe_reader = ask('Install Adobe Reader?') answer_vcr = D7_MODE or ask('Install Visual C++ Runtimes?')
answer_vcr = ask('Install Visual C++ Runtimes?') answer_ninite = D7_MODE or ask('Install Ninite Bundle?')
answer_ninite = ask('Install Ninite Bundle?') if not D7_MODE and (
if answer_ninite and global_vars['OS']['Version'] in ['7']: answer_ninite and global_vars['OS']['Version'] in ['7']):
# Vista is dead, not going to check for it # Vista is dead, not going to check for it
answer_mse = ask('Install MSE?') answer_mse = ask('Install MSE?')
else: else:
answer_mse = False answer_mse = False
print_info('Installing Programs') print_info('Installing Programs')
if answer_adobe_reader:
try_and_print(message='Adobe Reader DC...',
function=install_adobe_reader, other_results=other_results)
if answer_vcr: if answer_vcr:
install_vcredists() install_vcredists()
if answer_ninite: if answer_ninite:
@ -62,3 +60,5 @@ if __name__ == '__main__':
pass pass
except: except:
major_exception() major_exception()
# vim: sts=4 sw=4 ts=4

View file

@ -9,7 +9,7 @@ sys.path.append(os.getcwd())
from functions.setup import * from functions.setup import *
init_global_vars() init_global_vars()
os.system('title {}: Install Visual C++ Runtimes'.format(KIT_NAME_FULL)) os.system('title {}: Install Visual C++ Runtimes'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\Install Visual C++ Runtimes.log'.format(**global_vars) set_log_file('Install Visual C++ Runtimes.log')
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -20,12 +20,12 @@ if __name__ == '__main__':
'Error': { 'Error': {
'CalledProcessError': 'Unknown Error', 'CalledProcessError': 'Unknown Error',
}} }}
if ask('Install Visual C++ Runtimes?'): if ask('Install Visual C++ Runtimes?'):
install_vcredists() install_vcredists()
else: else:
abort() abort()
print_standard('\nDone.') print_standard('\nDone.')
exit_script() exit_script()
except SystemExit: except SystemExit:

View file

@ -18,7 +18,7 @@ if __name__ == '__main__':
print_standard('{}: Volume mount tool'.format(KIT_NAME_FULL)) print_standard('{}: Volume mount tool'.format(KIT_NAME_FULL))
# Mount volumes # Mount volumes
report = mount_all_volumes() report = mount_volumes(all_devices=True)
# Print report # Print report
print_info('\nResults') print_info('\nResults')

View file

@ -24,7 +24,7 @@ if [[ -f "${1:-}" ]]; then
done done
else else
# losetup did not detect partitions, attempt whole image # losetup did not detect partitions, attempt whole image
udevil mount -o to "${LOOPDEV}" || true udevil mount -o ro "${LOOPDEV}" || true
fi fi
else else
usage usage

View file

@ -0,0 +1,43 @@
# Wizard Kit: Network Stability Test
import os
import sys
# Init
os.chdir(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(os.getcwd())
from functions.common import *
init_global_vars()
os.system('title {}: Network Stability Test'.format(KIT_NAME_FULL))
# STATIC VARIABLES
NETWORK_TEST_URL = 'https://testmy.net/auto?extraID=A&schType=&st=1&r_time=0.1666667&xtimes=12&minDFS=&minUFS='
YOUTUBE_VID_URL = 'https://youtu.be/z7VYVjR_nwE'
PING_URL = 'google.com'
if __name__ == '__main__':
try:
stay_awake()
clear_screen()
print_info('{}: Network Stability Test\n'.format(KIT_NAME_FULL))
# Open programs
print_success('Starting browser tests')
popen_program(['start', '', NETWORK_TEST_URL.replace('&', '^&')], shell=True)
popen_program(['start', '', YOUTUBE_VID_URL], shell=True)
# Start pinging
try:
run_program(['ping', '/t', PING_URL], pipe=False)
except KeyboardInterrupt:
# Gracefully close on interrupt
pass
# Done
print_standard('\nDone.')
pause('Press Enter to exit...')
exit_script()
except SystemExit:
pass
except:
major_exception()

15
.bin/Scripts/pacinit Executable file
View file

@ -0,0 +1,15 @@
#!/bin/bash
#
## Wizard Kit: Update pacman settings to usage in live sessions
# Disable custom repo (used at build-time)
sudo sed -i -r "s/^(\[custom\])/#\1/" /etc/pacman.conf
sudo sed -i -r "s/^(SigLevel = Optional TrustAll)/#\1/" /etc/pacman.conf
sudo sed -i -r "s/^(Server = )/#\1/" /etc/pacman.conf
# Disable signature checks
sudo sed -i -r "s/^SigLevel.*/SigLevel = Never/" /etc/pacman.conf
# Refresh package databases
sudo pacman -Sy

150
.bin/Scripts/photorec-sort Executable file
View file

@ -0,0 +1,150 @@
#!/bin/bash
#
## sort photorec results into something usefull
## Set paths
recup_dir="${1%/}"
[ -n "$recup_dir" ] || recup_dir="."
recup_dir="$(realpath "$recup_dir")"
out_dir="$recup_dir/Recovered"
bad_dir="$recup_dir/Corrupt"
## Test path before starting (using current dir if not specified)
for d in $recup_dir/recup*; do
### Source: http://stackoverflow.com/a/6364244
## Check if the glob gets expanded to existing files.
## If not, f here will be exactly the pattern above
## and the exists test will evaluate to false.
[ -e "$d" ] && echo "Found recup folder(s)" || {
echo "ERROR: No recup folders found"
echo "Usage: $0 recup_dir"
exit 1
}
## This is all we needed to know, so we can break after the first iteration
break
done
# Hard link files into folders by type
for d in $recup_dir/recup*; do
if [ -d "$d" ]; then
echo "Linking $d"
pushd $d >/dev/null
find -type f | while read k; do
file="$(basename "$k")"
src="$(realpath "$k")"
ext="$(echo "${file##*.}" | tr '[:upper:]' '[:lower:]')"
ext_dir="$out_dir/$ext"
if [ "${file##*.}" = "$file" ]; then
ext_dir="$out_dir/_MISC_"
elif [ "$ext" = "jpg" ] && [ "${file:0:1}" = "t" ]; then
ext_dir="$out_dir/jpg-thumbnail"
fi
#echo " $file -> $ext_dir"
[ -d "$ext_dir" ] || mkdir -p "$ext_dir"
ln "$src" "$ext_dir"
done
popd >/dev/null
else
echo "ERROR: '$d' not a directory"
fi
done
## Check the files output by photorec for corruption
pushd "$out_dir" >/dev/null
# Check archives with 7-Zip
#for d in 7z bz2 gz lzh lzo rar tar xz zip; do
# if [ -d "$d" ]; then
# echo "Checking $d files"
# pushd "$d" >/dev/null
# for f in *; do
# if ! 7z t "$f" >/dev/null 2>&1; then
# #echo " BAD: $f"
# [ -d "$bad_dir/$d" ] || mkdir -p "$bad_dir/$d"
# mv -n "$f" "$bad_dir/$d/$f"
# fi
# done
# popd >/dev/null
# fi
#done
# Check Audio/Video files with ffprobe
for d in avi flac flv m4a m4p m4v mkv mid mov mp2 mp3 mp4 mpg mpg2 ogg ts vob wav; do
if [ -d "$d" ]; then
echo "Checking $d files"
pushd "$d" >/dev/null
for f in *; do
if ! ffprobe "$f" >/dev/null 2>&1; then
#echo " BAD: $f"
[ -d "$bad_dir/$d" ] || mkdir -p "$bad_dir/$d"
mv -n "$f" "$bad_dir/$d/$f"
fi
done
popd >/dev/null
fi
done
# Check .doc files with antiword
if [ -d "doc" ]; then
echo "Checking doc files"
pushd "doc" >/dev/null
for f in *doc; do
if ! antiword "$f" >/dev/null 2>&1; then
#echo " BAD: $f"
[ -d "$bad_dir/doc" ] || mkdir -p "$bad_dir/doc"
mv -n "$f" "$bad_dir/doc/$f"
fi
done
popd >/dev/null
fi
# Check .docx files with 7z and grep
if [ -d "docx" ]; then
echo "Checking docx files"
pushd "docx" >/dev/null
for f in *docx; do
if ! 7z l "$f" | grep -q -s "word/document.xml"; then
#echo " BAD: $f"
[ -d "$bad_dir/docx" ] || mkdir -p "$bad_dir/docx"
mv -n "$f" "$bad_dir/docx/$f"
fi
done
popd >/dev/null
fi
# Sort pictures by date (only for common camera formats)
for d in jpg mrw orf raf raw rw2 tif x3f; do
if [ -d "$d" ]; then
echo "Sorting $d files by date"
pushd "$d" >/dev/null
for f in *; do
date_dir="$(date -d "$(stat -c %y "$f")" +"%F")"
[ -d "$date_dir" ] || mkdir "$date_dir"
mv -n "$f" "$date_dir/"
done
popd >/dev/null
fi
done
# Sort mov files by encoded date
if [ -d "mov" ]; then
echo "Sorting mov files by date"
pushd "mov" >/dev/null
for f in *mov; do
enc_date="$(mediainfo "$f" | grep -i "Encoded date" | head -1 | sed -r 's/.*: //')"
date_dir="$(date -d "$enc_date" +"%F")"
echo "$date_dir" | grep -E -q -s '^[0-9]{4}-[0-9]{2}-[0-9]{2}$' || date_dir="Unknown Date"
[ -d "$date_dir" ] || mkdir "$date_dir"
mv -n "$f" "$date_dir/"
done
popd >/dev/null
fi
## sort audio files by tags
## sort matroska files by metadata
## return to original dir
popd >/dev/null

50
.bin/Scripts/post_d7.py Normal file
View file

@ -0,0 +1,50 @@
# Wizard Kit: Post-d7II items
import os
import sys
# Init
os.chdir(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(os.getcwd())
from functions.browsers import *
from functions.cleanup import *
from functions.setup import *
init_global_vars()
os.system('title {}: Post-d7II Work'.format(KIT_NAME_FULL))
set_log_file('Post-d7II Work.log')
if __name__ == '__main__':
try:
stay_awake()
clear_screen()
print_info('{}: Post-d7II Work\n'.format(KIT_NAME_FULL))
other_results = {
'Warning': {
'NotInstalledError': 'Not installed',
'NoProfilesError': 'No profiles found',
}}
# Scan for Firefox browsers
print_info('Scanning for Firefox browsers')
scan_for_browsers(just_firefox=True)
# Install uBlock Origin
print_info('Installing uBlock Origin')
install_adblock(just_firefox=True)
# Cleanup
print_info('Cleanup')
try_and_print(message='d7II...',
function=cleanup_d7ii, cs='Done')
try_and_print(message='{}...'.format(KIT_NAME_FULL),
function=delete_empty_folders, cs='Done',
folder_path=global_vars['ClientDir'])
# Done
print_standard('\nDone.')
pause('Press Enter to exit...')
exit_script()
except SystemExit:
pass
except:
major_exception()

View file

@ -18,6 +18,4 @@ if udevil mount $DEVICE; then
else else
echo "Failed" echo "Failed"
fi fi
sleep 2s
exit 0 exit 0

View file

@ -0,0 +1,53 @@
# Wizard Kit: Reset Browsers
import os
import sys
# Init
os.chdir(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(os.getcwd())
from functions.browsers import *
from functions.cleanup import *
from functions.setup import *
init_global_vars()
os.system('title {}: Browser Reset Tool'.format(KIT_NAME_FULL))
set_log_file('Browser Reset ({USERNAME}).log'.format(**global_vars['Env']))
D7_MODE = 'd7mode' in sys.argv
if __name__ == '__main__':
try:
stay_awake()
clear_screen()
print_info('{}: Browser Reset\n'.format(KIT_NAME_FULL))
other_results = {
'Warning': {
'NotInstalledError': 'Not installed',
'NoProfilesError': 'No profiles found',
}}
# Bail early
if not D7_MODE and not ask('Reset browsers to safe defaults first?'):
exit_script()
# Scan for supported browsers
print_info('Scanning for browsers')
scan_for_browsers()
# Homepages
print_info('Current homepages')
list_homepages()
# Backup
print_info('Backing up browsers')
backup_browsers()
# Reset
print_info('Resetting browsers')
reset_browsers()
# Done
exit_script()
except SystemExit:
pass
except:
major_exception()

View file

@ -17,16 +17,16 @@ if __name__ == '__main__':
other_results = { other_results = {
'Error': {'CalledProcessError': 'Unknown Error'}, 'Error': {'CalledProcessError': 'Unknown Error'},
'Warning': {}} 'Warning': {}}
if not ask('Enable booting to SafeMode (with Networking)?'): if not ask('Enable booting to SafeMode (with Networking)?'):
abort() abort()
# Configure SafeMode # Configure SafeMode
try_and_print(message='Set BCD option...', try_and_print(message='Set BCD option...',
function=enable_safemode, other_results=other_results) function=enable_safemode, other_results=other_results)
try_and_print(message='Enable MSI in SafeMode...', try_and_print(message='Enable MSI in SafeMode...',
function=enable_safemode_msi, other_results=other_results) function=enable_safemode_msi, other_results=other_results)
# Done # Done
print_standard('\nDone.') print_standard('\nDone.')
pause('Press Enter to reboot...') pause('Press Enter to reboot...')

View file

@ -17,16 +17,16 @@ if __name__ == '__main__':
other_results = { other_results = {
'Error': {'CalledProcessError': 'Unknown Error'}, 'Error': {'CalledProcessError': 'Unknown Error'},
'Warning': {}} 'Warning': {}}
if not ask('Disable booting to SafeMode?'): if not ask('Disable booting to SafeMode?'):
abort() abort()
# Configure SafeMode # Configure SafeMode
try_and_print(message='Remove BCD option...', try_and_print(message='Remove BCD option...',
function=disable_safemode, other_results=other_results) function=disable_safemode, other_results=other_results)
try_and_print(message='Disable MSI in SafeMode...', try_and_print(message='Disable MSI in SafeMode...',
function=disable_safemode_msi, other_results=other_results) function=disable_safemode_msi, other_results=other_results)
# Done # Done
print_standard('\nDone.') print_standard('\nDone.')
pause('Press Enter to reboot...') pause('Press Enter to reboot...')

View file

@ -8,16 +8,27 @@ LAUNCHERS = {
'L_ITEM': 'activate.py', 'L_ITEM': 'activate.py',
'L_ELEV': 'True', 'L_ELEV': 'True',
}, },
'd7II': {
'L_TYPE': 'Executable',
'L_PATH': 'd7II',
'L_ITEM': 'd7II.exe',
},
'Post-d7II Work': {
'L_TYPE': 'PyScript',
'L_PATH': 'Scripts',
'L_ITEM': 'post_d7.py',
'L_ELEV': 'True',
},
'System Checklist': { 'System Checklist': {
'L_TYPE': 'PyScript', 'L_TYPE': 'PyScript',
'L_PATH': 'Scripts', 'L_PATH': 'Scripts',
'L_ITEM': 'system_checklist.py', 'L_ITEM': 'system_checklist.py',
'L_ELEV': 'True', 'L_ELEV': 'True',
}, },
'System Diagnostics': { 'System Checklist (HW)': {
'L_TYPE': 'PyScript', 'L_TYPE': 'PyScript',
'L_PATH': 'Scripts', 'L_PATH': 'Scripts',
'L_ITEM': 'system_diagnostics.py', 'L_ITEM': 'system_checklist_hw.py',
'L_ELEV': 'True', 'L_ELEV': 'True',
}, },
'User Checklist': { 'User Checklist': {
@ -26,6 +37,41 @@ LAUNCHERS = {
'L_ITEM': 'user_checklist.py', 'L_ITEM': 'user_checklist.py',
}, },
}, },
r'.bin\Scripts\launchers_for_d7': {
'Browser Reset': {
'L_TYPE': 'PyScript',
'L_PATH': 'Scripts',
'L_ITEM': 'reset_browsers.py',
'L_ARGS': 'd7mode',
},
'Install SW Bundle': {
'L_TYPE': 'PyScript',
'L_PATH': 'Scripts',
'L_ITEM': 'install_sw_bundle.py',
'L_ARGS': 'd7mode',
'L_ELEV': 'True',
},
'System Checklist': {
'L_TYPE': 'PyScript',
'L_PATH': 'Scripts',
'L_ITEM': 'system_checklist.py',
'L_ARGS': 'd7mode',
'L_ELEV': 'True',
},
'System Diagnostics': {
'L_TYPE': 'PyScript',
'L_PATH': 'Scripts',
'L_ITEM': 'system_diagnostics.py',
'L_ARGS': 'd7mode',
'L_ELEV': 'True',
},
'User Checklist': {
'L_TYPE': 'PyScript',
'L_PATH': 'Scripts',
'L_ITEM': 'user_checklist.py',
'L_ARGS': 'd7mode',
},
},
r'Data Recovery': { r'Data Recovery': {
'PhotoRec (CLI)': { 'PhotoRec (CLI)': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
@ -49,12 +95,17 @@ LAUNCHERS = {
}, },
}, },
r'Data Transfers': { r'Data Transfers': {
"Fab's Autobackup Pro": {
'L_TYPE': 'Executable',
'L_PATH': 'AutoBackupPro',
'L_ITEM': 'autobackup6pro.exe',
},
'FastCopy (as ADMIN)': { 'FastCopy (as ADMIN)': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': 'FastCopy', 'L_PATH': 'FastCopy',
'L_ITEM': 'FastCopy.exe', 'L_ITEM': 'FastCopy.exe',
'L_ARGS': ( 'L_ARGS': (
r' /logfile=%log_dir%\FastCopy.log' r' /logfile=%log_dir%\Tools\FastCopy.log'
r' /cmd=noexist_only' r' /cmd=noexist_only'
r' /utf8' r' /utf8'
r' /skip_empty_dir' r' /skip_empty_dir'
@ -94,7 +145,7 @@ LAUNCHERS = {
), ),
'L_ELEV': 'True', 'L_ELEV': 'True',
'Extra Code': [ 'Extra Code': [
r'call "%bin%\Scripts\init_client_dir.cmd" /Info /Transfer', r'call "%bin%\Scripts\init_client_dir.cmd" /Logs /Transfer',
], ],
}, },
'FastCopy': { 'FastCopy': {
@ -102,7 +153,7 @@ LAUNCHERS = {
'L_PATH': 'FastCopy', 'L_PATH': 'FastCopy',
'L_ITEM': 'FastCopy.exe', 'L_ITEM': 'FastCopy.exe',
'L_ARGS': ( 'L_ARGS': (
r' /logfile=%log_dir%\FastCopy.log' r' /logfile=%log_dir%\Tools\FastCopy.log'
r' /cmd=noexist_only' r' /cmd=noexist_only'
r' /utf8' r' /utf8'
r' /skip_empty_dir' r' /skip_empty_dir'
@ -141,7 +192,7 @@ LAUNCHERS = {
r' /to=%client_dir%\Transfer_%iso_date%\ ' r' /to=%client_dir%\Transfer_%iso_date%\ '
), ),
'Extra Code': [ 'Extra Code': [
r'call "%bin%\Scripts\init_client_dir.cmd" /Info /Transfer', r'call "%bin%\Scripts\init_client_dir.cmd" /Logs /Transfer',
], ],
}, },
'KVRT': { 'KVRT': {
@ -161,6 +212,12 @@ LAUNCHERS = {
r'mkdir "%q_dir%">nul 2>&1', r'mkdir "%q_dir%">nul 2>&1',
], ],
}, },
'Mac & Linux Reader': {
'L_TYPE': 'Executable',
'L_PATH': 'LinuxReader',
'L_ITEM': 'LinuxReader.exe',
'L_ELEV': 'True',
},
'Transferred Keys': { 'Transferred Keys': {
'L_TYPE': 'PyScript', 'L_TYPE': 'PyScript',
'L_PATH': 'Scripts', 'L_PATH': 'Scripts',
@ -188,17 +245,10 @@ LAUNCHERS = {
}, },
}, },
r'Diagnostics': { r'Diagnostics': {
'HWiNFO': { 'AIDA64': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': 'HWiNFO', 'L_PATH': 'AIDA64',
'L_ITEM': 'HWiNFO.exe', 'L_ITEM': 'aida64.exe',
'Extra Code': [
r'for %%a in (32 64) do (',
r' copy /y "%bin%\HWiNFO\general.ini" "%bin%\HWiNFO\HWiNFO%%a.ini"',
r' (echo SensorsOnly=0)>>"%bin%\HWiNFO\HWiNFO%%a.ini"',
r' (echo SummaryOnly=0)>>"%bin%\HWiNFO\HWiNFO%%a.ini"',
r')',
],
}, },
'ProduKey': { 'ProduKey': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
@ -212,13 +262,14 @@ LAUNCHERS = {
r')', r')',
], ],
}, },
'System Diagnostics': {
'L_TYPE': 'PyScript',
'L_PATH': 'Scripts',
'L_ITEM': 'system_diagnostics.py',
'L_ELEV': 'True',
},
}, },
r'Diagnostics\Extras': { r'Diagnostics\Extras': {
'AIDA64': {
'L_TYPE': 'Executable',
'L_PATH': 'AIDA64',
'L_ITEM': 'aida64.exe',
},
'Autoruns (with VirusTotal Scan)': { 'Autoruns (with VirusTotal Scan)': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': 'Autoruns', 'L_PATH': 'Autoruns',
@ -251,18 +302,40 @@ LAUNCHERS = {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': 'erunt', 'L_PATH': 'erunt',
'L_ITEM': 'ERUNT.EXE', 'L_ITEM': 'ERUNT.EXE',
'L_ARGS': '%client_dir%\Backups\%iso_date%\Registry sysreg curuser otherusers', 'L_ARGS': '%client_dir%\Backups\Registry\%iso_date% sysreg curuser otherusers',
'L_ELEV': 'True', 'L_ELEV': 'True',
'Extra Code': [ 'Extra Code': [
r'call "%bin%\Scripts\init_client_dir.cmd" /Info', r'call "%bin%\Scripts\init_client_dir.cmd" /Logs',
], ],
}, },
'FurMark': {
'L_TYPE': 'Executable',
'L_PATH': 'FurMark',
'L_ITEM': 'FurMark.exe',
},
'HDTune Pro': {
'L_TYPE': 'Executable',
'L_PATH': 'HDTunePro',
'L_ITEM': 'HDTunePro.exe',
},
'HitmanPro': { 'HitmanPro': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': 'HitmanPro', 'L_PATH': 'HitmanPro',
'L_ITEM': 'HitmanPro.exe', 'L_ITEM': 'HitmanPro.exe',
'Extra Code': [ 'Extra Code': [
r'call "%bin%\Scripts\init_client_dir.cmd" /Info', r'call "%bin%\Scripts\init_client_dir.cmd" /Logs',
],
},
'HWiNFO': {
'L_TYPE': 'Executable',
'L_PATH': 'HWiNFO',
'L_ITEM': 'HWiNFO.exe',
'Extra Code': [
r'for %%a in (32 64) do (',
r' copy /y "%bin%\HWiNFO\general.ini" "%bin%\HWiNFO\HWiNFO%%a.ini"',
r' (echo SensorsOnly=0)>>"%bin%\HWiNFO\HWiNFO%%a.ini"',
r' (echo SummaryOnly=0)>>"%bin%\HWiNFO\HWiNFO%%a.ini"',
r')',
], ],
}, },
'HWiNFO (Sensors)': { 'HWiNFO (Sensors)': {
@ -282,8 +355,8 @@ LAUNCHERS = {
'Intel RST (Current Release)': { 'Intel RST (Current Release)': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': '_Drivers\Intel RST', 'L_PATH': '_Drivers\Intel RST',
'L_ITEM': 'SetupRST_16.0.exe', 'L_ITEM': 'SetupRST_16.5.exe',
'L_7ZIP': 'SetupRST_16.0.exe', 'L_7ZIP': 'SetupRST_16.5.exe',
}, },
'Intel RST (Previous Releases)': { 'Intel RST (Previous Releases)': {
'L_TYPE': 'Folder', 'L_TYPE': 'Folder',
@ -349,6 +422,12 @@ LAUNCHERS = {
}, },
}, },
r'Installers': { r'Installers': {
'ESET NOD32 AV': {
'L_TYPE': 'PyScript',
'L_PATH': 'Scripts',
'L_ITEM': 'install_eset_nod32_av.py',
'L_ELEV': 'True',
},
'SW Bundle': { 'SW Bundle': {
'L_TYPE': 'PyScript', 'L_TYPE': 'PyScript',
'L_PATH': 'Scripts', 'L_PATH': 'Scripts',
@ -356,32 +435,6 @@ LAUNCHERS = {
'L_ELEV': 'True', 'L_ELEV': 'True',
}, },
}, },
r'Installers\Extras\Office\2013': {
'Home and Business 2013 (x32)': {
'L_TYPE': 'Office',
'L_PATH': '2013',
'L_ITEM': 'hb_32.xml',
'L_NCMD': 'True',
},
'Home and Business 2013 (x64)': {
'L_TYPE': 'Office',
'L_PATH': '2013',
'L_ITEM': 'hb_64.xml',
'L_NCMD': 'True',
},
'Home and Student 2013 (x32)': {
'L_TYPE': 'Office',
'L_PATH': '2013',
'L_ITEM': 'hs_32.xml',
'L_NCMD': 'True',
},
'Home and Student 2013 (x64)': {
'L_TYPE': 'Office',
'L_PATH': '2013',
'L_ITEM': 'hs_64.xml',
'L_NCMD': 'True',
},
},
r'Installers\Extras\Office\2016': { r'Installers\Extras\Office\2016': {
'Home and Business 2016 (x32)': { 'Home and Business 2016 (x32)': {
'L_TYPE': 'Office', 'L_TYPE': 'Office',
@ -465,6 +518,11 @@ LAUNCHERS = {
'L_ITEM': 'safemode_exit.py', 'L_ITEM': 'safemode_exit.py',
'L_ELEV': 'True', 'L_ELEV': 'True',
}, },
'Network Stability Test': {
'L_TYPE': 'PyScript',
'L_PATH': 'Scripts',
'L_ITEM': 'network_stability_test.py',
},
'Notepad++': { 'Notepad++': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': 'notepadplusplus', 'L_PATH': 'notepadplusplus',
@ -475,17 +533,28 @@ LAUNCHERS = {
'L_PATH': 'PuTTY', 'L_PATH': 'PuTTY',
'L_ITEM': 'PUTTY.EXE', 'L_ITEM': 'PUTTY.EXE',
}, },
'TreeSizeFree': { 'ShutUp10': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': 'TreeSizeFree', 'L_PATH': 'ShutUp10',
'L_ITEM': 'TreeSizeFree.exe', 'L_ITEM': 'OOSU10.exe',
'L_ELEV': 'True', },
'ShutUp10 (1201 Minimal Selection)': {
'L_TYPE': 'Executable',
'L_PATH': 'ShutUp10',
'L_ITEM': 'OOSU10.exe',
'L_ARGS': '1201.cfg',
}, },
'Update Kit': { 'Update Kit': {
'L_TYPE': 'PyScript', 'L_TYPE': 'PyScript',
'L_PATH': 'Scripts', 'L_PATH': 'Scripts',
'L_ITEM': 'update_kit.py', 'L_ITEM': 'update_kit.py',
}, },
'WizTree': {
'L_TYPE': 'Executable',
'L_PATH': 'WizTree',
'L_ITEM': 'WizTree.exe',
'L_ELEV': 'True',
},
'XMPlay': { 'XMPlay': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': 'XMPlay', 'L_PATH': 'XMPlay',
@ -529,6 +598,11 @@ LAUNCHERS = {
'L_ITEM': 'dism.py', 'L_ITEM': 'dism.py',
'L_ELEV': 'True', 'L_ELEV': 'True',
}, },
'ESET Online Scanner': {
'L_TYPE': 'Executable',
'L_PATH': 'ESET',
'L_ITEM': 'ESET.exe',
},
'KVRT': { 'KVRT': {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': 'KVRT', 'L_PATH': 'KVRT',
@ -550,8 +624,10 @@ LAUNCHERS = {
'L_TYPE': 'Executable', 'L_TYPE': 'Executable',
'L_PATH': 'RKill', 'L_PATH': 'RKill',
'L_ITEM': 'RKill.exe', 'L_ITEM': 'RKill.exe',
'L_ARGS': '-s -l %log_dir%\Tools\RKill.log',
'L_ELEV': 'True',
'Extra Code': [ 'Extra Code': [
r'call "%bin%\Scripts\init_client_dir.cmd" /Info', r'call "%bin%\Scripts\init_client_dir.cmd" /Logs',
], ],
}, },
'SFC Scan': { 'SFC Scan': {
@ -565,7 +641,7 @@ LAUNCHERS = {
'L_PATH': 'TDSSKiller', 'L_PATH': 'TDSSKiller',
'L_ITEM': 'TDSSKiller.exe', 'L_ITEM': 'TDSSKiller.exe',
'L_ARGS': ( 'L_ARGS': (
r' -l %log_dir%\TDSSKiller.log' r' -l %log_dir%\Tools\TDSSKiller.log'
r' -qpath %q_dir%' r' -qpath %q_dir%'
r' -accepteula' r' -accepteula'
r' -accepteulaksn' r' -accepteulaksn'
@ -578,6 +654,33 @@ LAUNCHERS = {
r'mkdir "%q_dir%">nul 2>&1', r'mkdir "%q_dir%">nul 2>&1',
], ],
}, },
'WinAIO Repair': {
'L_TYPE': 'Executable',
'L_PATH': 'WinAIO Repair',
'L_ITEM': 'Repair_Windows.exe',
'L_ELEV': 'True',
'Extra Code': [
r'copy /y "%bin%\WinAIORepair\__empty.ini" "%bin%\WinAIORepair\settings.ini"',
],
},
'WinAIO Repair (Fix Associations)': {
'L_TYPE': 'Executable',
'L_PATH': 'WinAIO Repair',
'L_ITEM': 'Repair_Windows.exe',
'L_ELEV': 'True',
'Extra Code': [
r'copy /y "%bin%\WinAIORepair\__associations.ini" "%bin%\WinAIORepair\settings.ini"',
],
},
'WinAIO Repair (Fix Permissions)': {
'L_TYPE': 'Executable',
'L_PATH': 'WinAIO Repair',
'L_ITEM': 'Repair_Windows.exe',
'L_ELEV': 'True',
'Extra Code': [
r'copy /y "%bin%\WinAIORepair\__permissions.ini" "%bin%\WinAIORepair\settings.ini"',
],
},
}, },
r'Uninstallers': { r'Uninstallers': {
'IObit Uninstaller': { 'IObit Uninstaller': {

View file

@ -1,89 +1,99 @@
# Wizard Kit: Settings - Main / Branding # Wizard Kit: Settings - Main / Branding
# Features # Features
ENABLED_UPLOAD_DATA = False ENABLED_OPEN_LOGS = False
ENABLED_TICKET_NUMBERS = False ENABLED_TICKET_NUMBERS = False
ENABLED_UPLOAD_DATA = True
# STATIC VARIABLES (also used by BASH and BATCH files) # STATIC VARIABLES (also used by BASH and BATCH files)
## NOTE: There are no spaces around the = for easier parsing in BASH and BATCH ## NOTE: There are no spaces around the = for easier parsing in BASH and BATCH
# Main Kit # Main Kit
ARCHIVE_PASSWORD='Abracadabra' ARCHIVE_PASSWORD='Sorted1201'
KIT_NAME_FULL='Wizard Kit' KIT_NAME_FULL='1201-WizardKit'
KIT_NAME_SHORT='WK' KIT_NAME_SHORT='1201'
SUPPORT_MESSAGE='Please let 2Shirt know by opening an issue on GitHub' SUPPORT_MESSAGE='Please let support know by opening an issue on Gogs'
# osTicket
DB_HOST='osticket.1201.com'
DB_NAME='osticket'
DB_USER='wizardkit'
DB_PASS='U9bJnF9eamVkfsVw'
SSH_PORT='22'
SSH_USER='sql_tunnel'
# imgur
IMGUR_CLIENT_ID='3d1ee1d38707b85'
# Live Linux # Live Linux
MPRIME_LIMIT='7' # of minutes to run Prime95 during hw-diags MPRIME_LIMIT='7' # of minutes to run Prime95 during hw-diags
ROOT_PASSWORD='Abracadabra' ROOT_PASSWORD='1201 loves computers!'
TECH_PASSWORD='Abracadabra' TECH_PASSWORD='Sorted1201'
# Root Certificate Authority
ROOT_CA_NAME='1201_Root_CA.crt'
# Server IP addresses # Server IP addresses
OFFICE_SERVER_IP='10.0.0.10' OFFICE_SERVER_IP='10.11.1.20'
QUICKBOOKS_SERVER_IP='10.0.0.10' QUICKBOOKS_SERVER_IP='10.11.1.20'
# Time Zones # Time Zones
LINUX_TIME_ZONE='America/Los_Angeles' # See 'timedatectl list-timezones' for valid values LINUX_TIME_ZONE='America/Los_Angeles' # See 'timedatectl list-timezones' for valid values
WINDOWS_TIME_ZONE='Pacific Standard Time' # See 'tzutil /l' for valid values WINDOWS_TIME_ZONE='Pacific Standard Time' # See 'tzutil /l' for valid values
# WiFi # WiFi
WIFI_SSID='SomeWifi' WIFI_SSID='1201Computers'
WIFI_PASSWORD='Abracadabra' WIFI_PASSWORD='justintime!'
# SERVER VARIABLES # SERVER VARIABLES
## NOTE: Windows can only use one user per server. This means that if ## NOTE: Windows can only use one user per server. This means that if
## one server serves multiple shares then you have to use the same ## one server serves multiple shares then you have to use the same
## user/password for all of those shares. ## user/password for all of those shares.
BACKUP_SERVERS = [ BACKUP_SERVERS = [
{ 'IP': '10.0.0.10', { 'IP': '10.11.1.20',
'Name': 'ServerOne', 'Name': 'Anaconda',
'Mounted': False, 'Mounted': False,
'Share': 'Backups', 'Share': 'Backups',
'User': 'restore', 'User': 'cx',
'Pass': 'Abracadabra', 'Pass': 'cx',
'RW-User': 'backup', 'RW-User': 'backup',
'RW-Pass': 'Abracadabra', 'RW-Pass': '1201 loves computers!',
},
{ 'IP': '10.0.0.11',
'Name': 'ServerTwo',
'Mounted': False,
'Share': 'Backups',
'User': 'restore',
'Pass': 'Abracadabra',
'RW-User': 'backup',
'RW-Pass': 'Abracadabra',
}, },
] ]
BENCHMARK_SERVER = {
'Name': 'Nextcloud',
'Short Url': 'https://1201north.ddns.net:8001/index.php/f/27892',
'Url': 'https://1201north.ddns.net:8001/public.php/webdav/Benchmarks',
'User': 'RAE7ajRk25CBnW6',
'Pass': '',
}
CRASH_SERVER = { CRASH_SERVER = {
'Name': 'CrashServer', 'Name': 'Nextcloud',
'Url': '', 'Url': 'https://1201north.ddns.net:8001/public.php/webdav/WizardKit_Issues',
'User': '', 'User': 'LoQ97J3r6CFGT2T',
'Pass': '', 'Pass': '',
} }
OFFICE_SERVER = { OFFICE_SERVER = {
'IP': OFFICE_SERVER_IP, 'IP': OFFICE_SERVER_IP,
'Name': 'ServerOne', 'Name': 'Anaconda',
'Mounted': False, 'Mounted': False,
'Share': 'Office', 'Share': r'Public\Office\MS Office',
'User': 'restore', 'User': 'cx',
'Pass': 'Abracadabra', 'Pass': 'cx',
'RW-User': 'backup', 'RW-User': 'backup',
'RW-Pass': 'Abracadabra', 'RW-Pass': '1201 loves computers!',
} }
QUICKBOOKS_SERVER = { QUICKBOOKS_SERVER = {
'IP': QUICKBOOKS_SERVER_IP, 'IP': QUICKBOOKS_SERVER_IP,
'Name': 'ServerOne', 'Name': 'Anaconda',
'Mounted': False, 'Mounted': False,
'Share': 'QuickBooks', 'Share': r'Public\QuickBooks',
'User': 'restore', 'User': 'cx',
'Pass': 'Abracadabra', 'Pass': 'cx',
'RW-User': 'backup', 'RW-User': 'backup',
'RW-Pass': 'Abracadabra', 'RW-Pass': '1201 loves computers!',
} }
WINDOWS_SERVER = { WINDOWS_SERVER = {
'IP': '10.0.0.10', 'IP': '10.11.1.20',
'Name': 'ServerOne', 'Name': 'Anaconda',
'Mounted': False, 'Mounted': False,
'Share': 'Windows', 'Share': r'Public\Windows',
'User': 'restore', 'User': 'cx',
'Pass': 'Abracadabra', 'Pass': 'cx',
'RW-User': 'backup', 'RW-User': 'backup',
'RW-Pass': 'Abracadabra', 'RW-Pass': '1201 loves computers!',
} }
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -1,9 +1,10 @@
# Wizard Kit: Settings - Sources # Wizard Kit: Settings - Sources
SOURCE_URLS = { SOURCE_URLS = {
'Adobe Reader DC': 'http://ardownload.adobe.com/pub/adobe/reader/win/AcrobatDC/1801120058/AcroRdrDC1801120058_en_US.exe',
'AdwCleaner': 'https://downloads.malwarebytes.com/file/adwcleaner',
'AIDA64': 'http://download.aida64.com/aida64engineer597.zip', 'AIDA64': 'http://download.aida64.com/aida64engineer597.zip',
'Adobe Reader DC': 'http://ardownload.adobe.com/pub/adobe/reader/win/AcrobatDC/1801120040/AcroRdrDC1801120040_en_US.exe', 'aria2': 'https://github.com/aria2/aria2/releases/download/release-1.34.0/aria2-1.34.0-win-32bit-build1.zip',
'AdwCleaner': 'https://toolslib.net/downloads/finish/1-adwcleaner/',
'Autoruns': 'https://download.sysinternals.com/files/Autoruns.zip', 'Autoruns': 'https://download.sysinternals.com/files/Autoruns.zip',
'BleachBit': 'https://download.bleachbit.org/BleachBit-2.0-portable.zip', 'BleachBit': 'https://download.bleachbit.org/BleachBit-2.0-portable.zip',
'BlueScreenView32': 'http://www.nirsoft.net/utils/bluescreenview.zip', 'BlueScreenView32': 'http://www.nirsoft.net/utils/bluescreenview.zip',
@ -12,46 +13,47 @@ SOURCE_URLS = {
'ClassicStartSkin': 'http://www.classicshell.net/forum/download/file.php?id=3001&sid=9a195960d98fd754867dcb63d9315335', 'ClassicStartSkin': 'http://www.classicshell.net/forum/download/file.php?id=3001&sid=9a195960d98fd754867dcb63d9315335',
'Du': 'https://download.sysinternals.com/files/DU.zip', 'Du': 'https://download.sysinternals.com/files/DU.zip',
'ERUNT': 'http://www.aumha.org/downloads/erunt.zip', 'ERUNT': 'http://www.aumha.org/downloads/erunt.zip',
'ESET NOD32 AV': 'https://download.eset.com/com/eset/apps/home/eav/windows/latest/eav_nt64.exe',
'Everything32': 'https://www.voidtools.com/Everything-1.4.1.895.x86.zip', 'Everything32': 'https://www.voidtools.com/Everything-1.4.1.895.x86.zip',
'Everything64': 'https://www.voidtools.com/Everything-1.4.1.895.x64.zip', 'Everything64': 'https://www.voidtools.com/Everything-1.4.1.895.x64.zip',
'FastCopy32': 'http://ftp.vector.co.jp/69/93/2323/FastCopy341.zip', 'FastCopy': 'http://ftp.vector.co.jp/70/64/2323/FastCopy354_installer.zip',
'FastCopy64': 'http://ftp.vector.co.jp/69/93/2323/FastCopy341_x64.zip', 'FurMark': 'https://geeks3d.com/dl/get/569',
'Firefox uBO': 'https://addons.mozilla.org/firefox/downloads/file/956394/ublock_origin-1.16.6-an+fx.xpi', 'Firefox uBO': 'https://addons.mozilla.org/firefox/downloads/file/1056733/ublock_origin-1.16.20-an+fx.xpi',
'HWiNFO': 'http://app.oldfoss.com:81/download/HWiNFO/hwi_582.zip',
'HitmanPro32': 'https://dl.surfright.nl/HitmanPro.exe', 'HitmanPro32': 'https://dl.surfright.nl/HitmanPro.exe',
'HitmanPro64': 'https://dl.surfright.nl/HitmanPro_x64.exe', 'HitmanPro64': 'https://dl.surfright.nl/HitmanPro_x64.exe',
'IOBit_Uninstaller': 'https://portableapps.com/redirect/?a=IObitUninstallerPortable&t=http%3A%2F%2Fdownloads.portableapps.com%2Fportableapps%2Fiobituninstallerportable%2FIObitUninstallerPortable_7.3.0.13.paf.exe', 'HWiNFO': 'http://app.oldfoss.com:81/download/HWiNFO/hwi_588.zip',
'Intel SSD Toolbox': r'https://downloadmirror.intel.com/27656/eng/Intel%20SSD%20Toolbox%20-%20v3.5.2.exe', 'Intel SSD Toolbox': r'https://downloadmirror.intel.com/27656/eng/Intel%20SSD%20Toolbox%20-%20v3.5.2.exe',
'IOBit_Uninstaller': 'https://portableapps.duckduckgo.com/IObitUninstallerPortable_7.5.0.7.paf.exe',
'KVRT': 'http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe', 'KVRT': 'http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe',
'NotepadPlusPlus': 'https://notepad-plus-plus.org/repository/7.x/7.5.6/npp.7.5.6.bin.minimalist.7z', 'Linux Reader': 'https://www.diskinternals.com/download/Linux_Reader.exe',
'Office Deployment Tool 2013': 'https://download.microsoft.com/download/6/2/3/6230F7A2-D8A9-478B-AC5C-57091B632FCF/officedeploymenttool_x86_4827-1000.exe', 'Macs Fan Control': 'https://www.crystalidea.com/downloads/macsfancontrol_setup.exe',
'Office Deployment Tool 2016': 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_9326.3600.exe', 'NirCmd32': 'https://www.nirsoft.net/utils/nircmd.zip',
'NirCmd64': 'https://www.nirsoft.net/utils/nircmd-x64.zip',
'NotepadPlusPlus': 'https://notepad-plus-plus.org/repository/7.x/7.5.8/npp.7.5.8.bin.minimalist.7z',
'Office Deployment Tool 2016': 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_10810.33603.exe',
'ProduKey32': 'http://www.nirsoft.net/utils/produkey.zip', 'ProduKey32': 'http://www.nirsoft.net/utils/produkey.zip',
'ProduKey64': 'http://www.nirsoft.net/utils/produkey-x64.zip', 'ProduKey64': 'http://www.nirsoft.net/utils/produkey-x64.zip',
'PuTTY': 'https://the.earth.li/~sgtatham/putty/latest/w32/putty.zip', 'PuTTY': 'https://the.earth.li/~sgtatham/putty/latest/w32/putty.zip',
'RKill': 'https://www.bleepingcomputer.com/download/rkill/dl/10/', 'RKill': 'https://www.bleepingcomputer.com/download/rkill/dl/10/',
'Samsung Magician': 'https://s3.ap-northeast-2.amazonaws.com/global.semi.static/SAMSUNG_SSD_v5_2_1_180523/CD0CFAC4675B9E502899B41BE00525C3909ECE3AD57CC1A2FB6B74A766B2A1EA/Samsung_Magician_Installer.zip',
'SDIO Themes': 'http://snappy-driver-installer.org/downloads/SDIO_Themes.zip', 'SDIO Themes': 'http://snappy-driver-installer.org/downloads/SDIO_Themes.zip',
'SDIO Torrent': 'http://snappy-driver-installer.org/downloads/SDIO_Update.torrent', 'SDIO Torrent': 'http://snappy-driver-installer.org/downloads/SDIO_Update.torrent',
'Samsung Magician': 'http://downloadcenter.samsung.com/content/SW/201801/20180123130636806/Samsung_Magician_Installer.exe', 'ShutUp10': 'https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe',
'TDSSKiller': 'https://media.kaspersky.com/utilities/VirusUtilities/EN/tdsskiller.exe', 'TDSSKiller': 'https://media.kaspersky.com/utilities/VirusUtilities/EN/tdsskiller.exe',
'TestDisk': 'https://www.cgsecurity.org/testdisk-7.1-WIP.win.zip', 'TestDisk': 'https://www.cgsecurity.org/testdisk-7.1-WIP.win.zip',
'TreeSizeFree': 'https://www.jam-software.com/treesize_free/TreeSizeFree-Portable.zip',
'wimlib32': 'https://wimlib.net/downloads/wimlib-1.12.0-windows-i686-bin.zip', 'wimlib32': 'https://wimlib.net/downloads/wimlib-1.12.0-windows-i686-bin.zip',
'wimlib64': 'https://wimlib.net/downloads/wimlib-1.12.0-windows-x86_64-bin.zip', 'wimlib64': 'https://wimlib.net/downloads/wimlib-1.12.0-windows-x86_64-bin.zip',
'WinAIO Repair': 'http://www.tweaking.com/files/setups/tweaking.com_windows_repair_aio.zip',
'Winapp2': 'https://github.com/MoscaDotTo/Winapp2/archive/master.zip', 'Winapp2': 'https://github.com/MoscaDotTo/Winapp2/archive/master.zip',
'XMPlay 7z': 'http://support.xmplay.com/files/16/xmp-7z.zip?v=800962', 'WizTree': 'https://antibody-software.com/files/wiztree_3_26_portable.zip',
'XMPlay Game': 'http://support.xmplay.com/files/12/xmp-gme.zip?v=515637', 'XMPlay 7z': 'https://support.xmplay.com/files/16/xmp-7z.zip?v=800962',
'XMPlay RAR': 'http://support.xmplay.com/files/16/xmp-rar.zip?v=409646', 'XMPlay Game': 'https://support.xmplay.com/files/12/xmp-gme.zip?v=515637',
'XMPlay WAModern': 'http://support.xmplay.com/files/10/WAModern.zip?v=207099', 'XMPlay RAR': 'https://support.xmplay.com/files/16/xmp-rar.zip?v=409646',
'XMPlay': 'http://support.xmplay.com/files/20/xmplay383.zip?v=298195', 'XMPlay WAModern': 'https://support.xmplay.com/files/10/WAModern.zip?v=207099',
'XMPlay': 'https://support.xmplay.com/files/20/xmplay383.zip?v=298195',
'XYplorerFree': 'https://www.xyplorer.com/download/xyplorer_free_noinstall.zip', 'XYplorerFree': 'https://www.xyplorer.com/download/xyplorer_free_noinstall.zip',
'aria2': 'https://github.com/aria2/aria2/releases/download/release-1.33.1/aria2-1.33.1-win-32bit-build1.zip',
} }
VCREDIST_SOURCES = { VCREDIST_SOURCES = {
'2008sp1': {
'32': 'https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe',
'64': 'https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe',
},
'2010sp1': { '2010sp1': {
'32': 'https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe', '32': 'https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe',
'64': 'https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe', '64': 'https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe',
@ -65,15 +67,14 @@ VCREDIST_SOURCES = {
'64': 'https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x64.exe', '64': 'https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x64.exe',
}, },
'2017': { '2017': {
'32': 'https://download.visualstudio.microsoft.com/download/pr/100349138/88b50ce70017bf10f2d56d60fcba6ab1/VC_redist.x86.exe', '32': 'https://aka.ms/vs/15/release/vc_redist.x86.exe',
'64': 'https://download.visualstudio.microsoft.com/download/pr/100349091/2cd2dba5748dc95950a5c42c2d2d78e4/VC_redist.x64.exe', '64': 'https://aka.ms/vs/15/release/vc_redist.x64.exe',
}, },
} }
NINITE_SOURCES = { NINITE_SOURCES = {
'Bundles': { 'Bundles': {
'Runtimes.exe': '.net4.7.1-air-java8-silverlight', 'Legacy.exe': '.net4.7.2-7zip-chrome-firefox-sumatrapdf-vlc',
'Legacy.exe': '.net4.7.1-7zip-air-chrome-firefox-java8-silverlight-vlc', 'Modern.exe': '.net4.7.2-7zip-chrome-classicstart-firefox-sumatrapdf-vlc',
'Modern.exe': '.net4.7.1-7zip-air-chrome-classicstart-firefox-java8-silverlight-vlc',
}, },
'Audio-Video': { 'Audio-Video': {
'AIMP.exe': 'aimp', 'AIMP.exe': 'aimp',
@ -98,6 +99,7 @@ NINITE_SOURCES = {
'SugarSync.exe': 'sugarsync', 'SugarSync.exe': 'sugarsync',
}, },
'Communication': { 'Communication': {
'Discord': 'discord',
'Pidgin.exe': 'pidgin', 'Pidgin.exe': 'pidgin',
'Skype.exe': 'skype', 'Skype.exe': 'skype',
'Trillian.exe': 'trillian', 'Trillian.exe': 'trillian',
@ -109,7 +111,6 @@ NINITE_SOURCES = {
}, },
'Developer': { 'Developer': {
'Eclipse.exe': 'eclipse', 'Eclipse.exe': 'eclipse',
'FileZilla.exe': 'filezilla',
'JDK 8.exe': 'jdk8', 'JDK 8.exe': 'jdk8',
'JDK 8 (x64).exe': 'jdkx8', 'JDK 8 (x64).exe': 'jdkx8',
'Notepad++.exe': 'notepadplusplus', 'Notepad++.exe': 'notepadplusplus',
@ -153,7 +154,7 @@ NINITE_SOURCES = {
}, },
'Runtimes': { 'Runtimes': {
'Adobe Air.exe': 'air', 'Adobe Air.exe': 'air',
'dotNET.exe': '.net4.7.1', 'dotNET.exe': '.net4.7.2',
'Java 8.exe': 'java8', 'Java 8.exe': 'java8',
'Shockwave.exe': 'shockwave', 'Shockwave.exe': 'shockwave',
'Silverlight.exe': 'silverlight', 'Silverlight.exe': 'silverlight',
@ -197,8 +198,10 @@ RST_SOURCES = {
'SetupRST_15.8.exe': 'https://downloadmirror.intel.com/27442/eng/SetupRST.exe', 'SetupRST_15.8.exe': 'https://downloadmirror.intel.com/27442/eng/SetupRST.exe',
'SetupRST_15.9.exe': 'https://downloadmirror.intel.com/27400/eng/SetupRST.exe', 'SetupRST_15.9.exe': 'https://downloadmirror.intel.com/27400/eng/SetupRST.exe',
'SetupRST_16.0.exe': 'https://downloadmirror.intel.com/27681/eng/SetupRST.exe', 'SetupRST_16.0.exe': 'https://downloadmirror.intel.com/27681/eng/SetupRST.exe',
'SetupRST_16.5.exe': 'https://downloadmirror.intel.com/27984/eng/SetupRST.exe',
} }
if __name__ == '__main__': if __name__ == '__main__':
print("This file is not meant to be called directly.") print("This file is not meant to be called directly.")
# vim: sts=4 sw=4 ts=4 tw=0 nowrap

View file

@ -30,6 +30,9 @@ TOOLS = {
'64': r'HWiNFO\HWiNFO64.exe'}, '64': r'HWiNFO\HWiNFO64.exe'},
'KVRT': { 'KVRT': {
'32': r'KVRT\KVRT.exe'}, '32': r'KVRT\KVRT.exe'},
'NirCmd': {
'32': r'NirCmd\nircmdc.exe',
'64': r'NirCmd\nircmdc64.exe'},
'NotepadPlusPlus': { 'NotepadPlusPlus': {
'32': r'NotepadPlusPlus\notepadplusplus.exe'}, '32': r'NotepadPlusPlus\notepadplusplus.exe'},
'ProduKey': { 'ProduKey': {

View file

@ -6,16 +6,16 @@ WINDOWS_BUILDS = {
'6000': ( 'Vista', 'RTM', 'Longhorn', None, 'unsupported'), '6000': ( 'Vista', 'RTM', 'Longhorn', None, 'unsupported'),
'6001': ( 'Vista', 'SP1', 'Longhorn', None, 'unsupported'), '6001': ( 'Vista', 'SP1', 'Longhorn', None, 'unsupported'),
'6002': ( 'Vista', 'SP2', 'Longhorn', None, 'unsupported'), '6002': ( 'Vista', 'SP2', 'Longhorn', None, 'unsupported'),
'7600': ( '7', 'RTM', 'Vienna', None, 'unsupported'), '7600': ( '7', 'RTM', 'Vienna', None, 'unsupported'),
'7601': ( '7', 'SP1', 'Vienna', None, 'outdated'), '7601': ( '7', 'SP1', 'Vienna', None, 'outdated'),
#9199 is a fake build since Win 8 is 6.2.9200 but that collides with Win 8.1 (6.3.9200) #9199 is a fake build since Win 8 is 6.2.9200 but that collides with Win 8.1 (6.3.9200)
'9199': ( '8', 'RTM', None, None, 'unsupported'), '9199': ( '8', 'RTM', None, None, 'unsupported'),
'9200': ( '8.1', None, 'Blue', None, 'outdated'), '9200': ( '8.1', None, 'Blue', None, 'outdated'),
'9600': ( '8.1', None, 'Update', None, None), '9600': ( '8.1', None, 'Update', None, None),
'9841': ( '10', None, 'Threshold 1', None, 'preview build'), '9841': ( '10', None, 'Threshold 1', None, 'preview build'),
'9860': ( '10', None, 'Threshold 1', None, 'preview build'), '9860': ( '10', None, 'Threshold 1', None, 'preview build'),
'9879': ( '10', None, 'Threshold 1', None, 'preview build'), '9879': ( '10', None, 'Threshold 1', None, 'preview build'),

View file

@ -9,7 +9,7 @@ sys.path.append(os.getcwd())
from functions.repairs import * from functions.repairs import *
init_global_vars() init_global_vars()
os.system('title {}: SFC Tool'.format(KIT_NAME_FULL)) os.system('title {}: SFC Tool'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\SFC Tool.log'.format(**global_vars) set_log_file('SFC Tool.log')
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -28,7 +28,7 @@ if __name__ == '__main__':
function=run_sfc_scan, other_results=other_results) function=run_sfc_scan, other_results=other_results)
else: else:
abort() abort()
# Done # Done
print_standard('\nDone.') print_standard('\nDone.')
pause('Press Enter to exit...') pause('Press Enter to exit...')

View file

@ -14,7 +14,8 @@ from functions.product_keys import *
from functions.setup import * from functions.setup import *
init_global_vars() init_global_vars()
os.system('title {}: System Checklist Tool'.format(KIT_NAME_FULL)) os.system('title {}: System Checklist Tool'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\System Checklist.log'.format(**global_vars) set_log_file('System Checklist.log')
D7_MODE = 'd7mode' in sys.argv
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -24,11 +25,17 @@ if __name__ == '__main__':
ticket_number = get_ticket_number() ticket_number = get_ticket_number()
other_results = { other_results = {
'Error': { 'Error': {
'CalledProcessError': 'Unknown Error', 'BIOSKeyNotFoundError': 'BIOS key not found',
'BIOSKeyNotFoundError': 'BIOS key not found', 'CalledProcessError': 'Unknown Error',
'FileNotFoundError': 'File not found', 'FileNotFoundError': 'File not found',
'GenericError': 'Unknown Error',
'SecureBootDisabledError': 'Disabled',
}, },
'Warning': {}} 'Warning': {
'OSInstalledLegacyError': 'OS installed Legacy',
'SecureBootNotAvailError': 'Not available',
'SecureBootUnknownError': 'Unknown',
}}
if ENABLED_TICKET_NUMBERS: if ENABLED_TICKET_NUMBERS:
print_info('Starting System Checklist for Ticket #{}\n'.format( print_info('Starting System Checklist for Ticket #{}\n'.format(
ticket_number)) ticket_number))
@ -38,28 +45,40 @@ if __name__ == '__main__':
if global_vars['OS']['Version'] == '10': if global_vars['OS']['Version'] == '10':
try_and_print(message='Explorer...', try_and_print(message='Explorer...',
function=config_explorer_system, cs='Done') function=config_explorer_system, cs='Done')
try_and_print(message='Privacy...',
function=config_privacy_settings, cs='Done')
try_and_print(message='Updating Clock...', try_and_print(message='Updating Clock...',
function=update_clock, cs='Done') function=update_clock, cs='Done')
try_and_print(message='Enabling System Restore...',
function=enable_system_restore, cs='Done')
# Cleanup # Cleanup
print_info('Cleanup') print_info('Cleanup')
try_and_print(message='Desktop...',
function=cleanup_desktop, cs='Done')
try_and_print(message='AdwCleaner...', try_and_print(message='AdwCleaner...',
function=cleanup_adwcleaner, cs='Done', other_results=other_results) function=cleanup_adwcleaner, cs='Done', other_results=other_results)
try_and_print(message='Desktop...',
function=cleanup_desktop, cs='Done')
try_and_print(message='Emsisoft a2cmd...',
function=cleanup_emsisoft, cs='Done')
try_and_print(message='Registry Backup(s)...',
function=cleanup_regbackups, cs='Done')
try_and_print(message='{}...'.format(KIT_NAME_FULL),
function=delete_empty_folders, cs='Done',
folder_path=global_vars['ClientDir'])
# Export system info # Export system info
print_info('Backup System Information') if not D7_MODE:
try_and_print(message='AIDA64 reports...', print_info('Backup System Information')
function=run_aida64, cs='Done', other_results=other_results) try_and_print(message='AIDA64 reports...',
try_and_print(message='File listing...', function=run_aida64, cs='Done', other_results=other_results)
function=backup_file_list, cs='Done', other_results=other_results) try_and_print(message='File listing...',
try_and_print(message='Power plans...', function=backup_file_list, cs='Done', other_results=other_results)
function=backup_power_plans, cs='Done') try_and_print(message='Power plans...',
try_and_print(message='Product Keys...', other_results=other_results, function=backup_power_plans, cs='Done')
function=run_produkey, cs='Done') try_and_print(message='Product Keys...', other_results=other_results,
try_and_print(message='Registry...', function=run_produkey, cs='Done')
function=backup_registry, cs='Done', other_results=other_results) try_and_print(message='Registry...',
function=backup_registry, cs='Done', other_results=other_results)
# User data # User data
print_info('User Data') print_info('User Data')
@ -76,6 +95,8 @@ if __name__ == '__main__':
try_and_print(message='BIOS Activation:', try_and_print(message='BIOS Activation:',
function=activate_with_bios, function=activate_with_bios,
other_results=other_results) other_results=other_results)
try_and_print(message='Secure Boot Status:',
function=check_secure_boot_status, other_results=other_results)
try_and_print(message='Installed RAM:', try_and_print(message='Installed RAM:',
function=show_installed_ram, ns='Unknown', silent_function=False) function=show_installed_ram, ns='Unknown', silent_function=False)
show_free_space() show_free_space()
@ -85,6 +106,9 @@ if __name__ == '__main__':
try_and_print(message='Installed Office:', try_and_print(message='Installed Office:',
function=get_installed_office, ns='Unknown', function=get_installed_office, ns='Unknown',
other_results=other_results, print_return=True) other_results=other_results, print_return=True)
if D7_MODE:
try_and_print(message='Product Keys:',
function=get_product_keys, ns='Unknown', print_return=True)
# Play audio, show devices, open Windows updates, and open Activation # Play audio, show devices, open Windows updates, and open Activation
try_and_print(message='Opening Device Manager...', try_and_print(message='Opening Device Manager...',
@ -99,6 +123,11 @@ if __name__ == '__main__':
sleep(3) sleep(3)
try_and_print(message='Running XMPlay...', try_and_print(message='Running XMPlay...',
function=run_xmplay, cs='Started', other_results=other_results) function=run_xmplay, cs='Started', other_results=other_results)
try:
check_secure_boot_status(show_alert=True)
except:
# Only trying to open alert message boxes
pass
# Done # Done
print_standard('\nDone.') print_standard('\nDone.')

View file

@ -0,0 +1,117 @@
# Wizard Kit: System HW Checklist
import os
import sys
# Init
os.chdir(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(os.getcwd())
from functions.activation import *
from functions.cleanup import *
from functions.diags import *
from functions.info import *
from functions.product_keys import *
from functions.setup import *
init_global_vars()
os.system('title {}: System HW Checklist Tool'.format(KIT_NAME_FULL))
set_log_file('System HW Checklist.log')
if __name__ == '__main__':
try:
stay_awake()
clear_screen()
print_info('{}: System HW Checklist Tool\n'.format(KIT_NAME_FULL))
ticket_number = get_ticket_number()
other_results = {
'Error': {
'BIOSKeyNotFoundError': 'BIOS key not found',
'CalledProcessError': 'Unknown Error',
'FileNotFoundError': 'File not found',
'GenericError': 'Unknown Error',
'SecureBootDisabledError': 'Disabled',
},
'Warning': {
'OSInstalledLegacyError': 'OS installed Legacy',
'SecureBootNotAvailError': 'Not available',
'SecureBootUnknownError': 'Unknown',
}}
if ENABLED_TICKET_NUMBERS:
print_info('Starting System Checklist for Ticket #{}\n'.format(
ticket_number))
# Configure
print_info('Configure')
if global_vars['OS']['Version'] == '10':
try_and_print(message='Explorer...',
function=config_explorer_system_hw, cs='Done')
try_and_print(message='Enabling System Restore...',
function=enable_system_restore, cs='Done')
# Export system info
print_info('Backup System Information')
try_and_print(message='AIDA64 reports...',
function=run_aida64, cs='Done', other_results=other_results)
try_and_print(message='File listing...',
function=backup_file_list, cs='Done', other_results=other_results)
try_and_print(message='Power plans...',
function=backup_power_plans, cs='Done')
try_and_print(message='Product Keys...', other_results=other_results,
function=run_produkey, cs='Done')
try_and_print(message='Registry...',
function=backup_registry, cs='Done', other_results=other_results)
# Cleanup
print_info('Cleanup')
try_and_print(message='{}...'.format(KIT_NAME_FULL),
function=delete_empty_folders, cs='Done',
folder_path=global_vars['ClientDir'])
# User data
print_info('User Data')
show_user_data_summary()
# Summary
print_info('Summary')
try_and_print(message='Operating System:',
function=show_os_name, ns='Unknown', silent_function=False)
try_and_print(message='Activation:',
function=show_os_activation, ns='Unknown', silent_function=False)
try_and_print(message='Secure Boot Status:',
function=check_secure_boot_status, other_results=other_results)
try_and_print(message='Installed RAM:',
function=show_installed_ram, ns='Unknown', silent_function=False)
show_free_space()
try_and_print(message='Installed Antivirus:',
function=get_installed_antivirus, ns='Unknown',
other_results=other_results, print_return=True)
try_and_print(message='Installed Office:',
function=get_installed_office, ns='Unknown',
other_results=other_results, print_return=True)
# Play audio, show devices, open Windows updates, and open Activation
try_and_print(message='Opening Device Manager...',
function=open_device_manager, cs='Started')
try_and_print(message='Opening HWiNFO (Sensors)...',
function=run_hwinfo_sensors, cs='Started', other_results=other_results)
try_and_print(message='Opening Windows Updates...',
function=open_windows_updates, cs='Started')
if not windows_is_activated():
try_and_print(message='Opening Windows Activation...',
function=open_windows_activation, cs='Started')
sleep(3)
try_and_print(message='Running XMPlay...',
function=run_xmplay, cs='Started', other_results=other_results)
try:
check_secure_boot_status(show_alert=True)
except:
# Only trying to open alert message boxes
pass
# Done
print_standard('\nDone.')
pause('Press Enter exit...')
exit_script()
except SystemExit:
pass
except:
major_exception()

View file

@ -13,8 +13,68 @@ from functions.product_keys import *
from functions.repairs import * from functions.repairs import *
init_global_vars() init_global_vars()
os.system('title {}: System Diagnostics Tool'.format(KIT_NAME_FULL)) os.system('title {}: System Diagnostics Tool'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\System Diagnostics.log'.format( set_log_file('System Diagnostics.log')
**global_vars) D7_MODE = 'd7mode' in sys.argv
# Static Variables
BLEACH_BIT_CLEANERS = {
'Applications': (
'adobe_reader.cache',
'adobe_reader.tmp',
'amule.tmp',
'flash.cache',
'gimp.tmp',
'hippo_opensim_viewer.cache',
'java.cache',
'libreoffice.cache',
'liferea.cache',
'miro.cache',
'openofficeorg.cache',
'pidgin.cache',
'secondlife_viewer.Cache',
'thunderbird.cache',
'vuze.backup_files',
'vuze.cache',
'vuze.tmp',
'yahoo_messenger.cache',
),
'Browsers': (
'chromium.cache',
'chromium.current_session',
'firefox.cache',
'firefox.session_restore',
'google_chrome.cache',
'google_chrome.session',
'google_earth.temporary_files',
'internet_explorer.temporary_files',
'opera.cache',
'opera.current_session',
'safari.cache',
'seamonkey.cache',
),
'System': (
'system.clipboard',
'system.tmp',
'winapp2_windows.jump_lists',
'winapp2_windows.ms_search',
'windows_explorer.run',
'windows_explorer.search_history',
'windows_explorer.thumbnails',
),
}
def check_result(result, other_results):
"""Check result for warnings and errors."""
result_ok = True
if not result['CS']:
for warning in other_results.get('Warning', {}).keys():
if warning in str(result['Error']):
# Ignore warnings and repair statements
return True
# Error is not a warning
result_ok = False
return result_ok
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -22,6 +82,7 @@ if __name__ == '__main__':
clear_screen() clear_screen()
print_info('{}: System Diagnostics Tool\n'.format(KIT_NAME_FULL)) print_info('{}: System Diagnostics Tool\n'.format(KIT_NAME_FULL))
ticket_number = get_ticket_number() ticket_number = get_ticket_number()
system_ok = True
other_results = { other_results = {
'Error': { 'Error': {
'CalledProcessError': 'Unknown Error', 'CalledProcessError': 'Unknown Error',
@ -34,48 +95,66 @@ if __name__ == '__main__':
if ENABLED_TICKET_NUMBERS: if ENABLED_TICKET_NUMBERS:
print_info('Starting System Diagnostics for Ticket #{}\n'.format( print_info('Starting System Diagnostics for Ticket #{}\n'.format(
ticket_number)) ticket_number))
# Sanitize Environment # Sanitize Environment
print_info('Sanitizing Environment') print_info('Sanitizing Environment')
# try_and_print(message='Killing processes...', if not D7_MODE:
# function=run_process_killer, cs='Done') try_and_print(message='Running RKill...',
try_and_print(message='Running RKill...', function=run_rkill, cs='Done', other_results=other_results)
function=run_rkill, cs='Done', other_results=other_results) try_and_print(message='Running TDSSKiller...',
try_and_print(message='Running TDSSKiller...', function=run_tdsskiller, cs='Done', other_results=other_results)
function=run_tdsskiller, cs='Done', other_results=other_results)
# Re-run if earlier process was stopped. # Re-run if earlier process was stopped.
stay_awake() stay_awake()
# Start diags # Start diags
print_info('Starting Background Scans') if not D7_MODE:
check_connection() print_info('Starting Background Scans')
try_and_print(message='Running HitmanPro...', check_connection()
function=run_hitmanpro, cs='Started', other_results=other_results) try_and_print(message='Running HitmanPro...',
try_and_print(message='Running Autoruns...', function=run_hitmanpro, cs='Started', other_results=other_results)
function=run_autoruns, cs='Started', other_results=other_results) try_and_print(message='Running Autoruns...',
function=run_autoruns, cs='Started', other_results=other_results)
# OS Health Checks # OS Health Checks
print_info('OS Health Checks') print_info('OS Health Checks')
try_and_print( result = try_and_print(
message='CHKDSK ({SYSTEMDRIVE})...'.format(**global_vars['Env']), message='CHKDSK ({SYSTEMDRIVE})...'.format(**global_vars['Env']),
function=run_chkdsk, other_results=other_results) function=run_chkdsk, other_results=other_results)
try_and_print(message='SFC scan...', system_ok &= check_result(result, other_results)
result = try_and_print(message='SFC scan...',
function=run_sfc_scan, other_results=other_results) function=run_sfc_scan, other_results=other_results)
try_and_print(message='DISM CheckHealth...', system_ok &= check_result(result, other_results)
function=run_dism, other_results=other_results, repair=False) if D7_MODE:
result = try_and_print(message='DISM RestoreHealth...',
# Scan for supported browsers function=run_dism, other_results=other_results, repair=True)
print_info('Scanning for browsers') system_ok &= check_result(result, other_results)
scan_for_browsers() else:
try_and_print(message='DISM CheckHealth...',
function=run_dism, other_results=other_results, repair=False)
if D7_MODE:
# Archive all browsers for all users
archive_all_users()
else:
# Scan for supported browsers
print_info('Scanning for browsers')
scan_for_browsers()
# Run BleachBit cleaners
print_info('BleachBit Cleanup')
for k, v in sorted(BLEACH_BIT_CLEANERS.items()):
try_and_print(message='{}...'.format(k),
function=run_bleachbit,
cs='Done', other_results=other_results,
cleaners=v, preview=bool(not D7_MODE))
# Export system info # Export system info
print_info('Backup System Information') print_info('Backup System Information')
try_and_print(message='AIDA64 reports...', try_and_print(message='AIDA64 reports...',
function=run_aida64, cs='Done', other_results=other_results) function=run_aida64, cs='Done', other_results=other_results)
try_and_print(message='BleachBit report...', if not D7_MODE:
function=run_bleachbit, cs='Done', other_results=other_results) backup_browsers()
backup_browsers()
try_and_print(message='File listing...', try_and_print(message='File listing...',
function=backup_file_list, cs='Done', other_results=other_results) function=backup_file_list, cs='Done', other_results=other_results)
try_and_print(message='Power plans...', try_and_print(message='Power plans...',
@ -83,40 +162,46 @@ if __name__ == '__main__':
try_and_print(message='Product Keys...', try_and_print(message='Product Keys...',
function=run_produkey, cs='Done', other_results=other_results) function=run_produkey, cs='Done', other_results=other_results)
try_and_print(message='Registry...', try_and_print(message='Registry...',
function=backup_registry, cs='Done', other_results=other_results) function=backup_registry, cs='Done', other_results=other_results,
overwrite=True)
# Summary # Summary
print_info('Summary') if not D7_MODE:
try_and_print(message='Operating System:', print_info('Summary')
function=show_os_name, ns='Unknown', silent_function=False) try_and_print(message='Operating System:',
try_and_print(message='Activation:', function=show_os_name, ns='Unknown', silent_function=False)
function=show_os_activation, ns='Unknown', silent_function=False) try_and_print(message='Activation:',
try_and_print(message='Installed RAM:', function=show_os_activation, ns='Unknown', silent_function=False)
function=show_installed_ram, ns='Unknown', silent_function=False) try_and_print(message='Installed RAM:',
show_free_space() function=show_installed_ram, ns='Unknown', silent_function=False)
try_and_print(message='Temp Size:', show_free_space()
function=show_temp_files_size, silent_function=False) try_and_print(message='Temp Size:',
try_and_print(message='Installed Antivirus:', function=show_temp_files_size, silent_function=False)
function=get_installed_antivirus, ns='Unknown', try_and_print(message='Installed Antivirus:',
other_results=other_results, print_return=True) function=get_installed_antivirus, ns='Unknown',
try_and_print(message='Installed Office:', other_results=other_results, print_return=True)
function=get_installed_office, ns='Unknown', try_and_print(message='Installed Office:',
other_results=other_results, print_return=True) function=get_installed_office, ns='Unknown',
try_and_print(message='Product Keys:', other_results=other_results, print_return=True)
function=get_product_keys, ns='Unknown', print_return=True) try_and_print(message='Product Keys:',
function=get_product_keys, ns='Unknown', print_return=True)
# User data # User data
print_info('User Data') if not D7_MODE:
try: print_info('User Data')
show_user_data_summary() try:
except Exception: show_user_data_summary()
print_error(' Unknown error.') except Exception:
print_error(' Unknown error.')
# Done # Done
print_standard('\nDone.') if not D7_MODE or not system_ok:
pause('Press Enter to exit...') print_standard('\nDone.')
pause('Press Enter to exit...')
exit_script() exit_script()
except SystemExit: except SystemExit:
pass pass
except: except:
major_exception() major_exception()
# vim: sts=4 sw=4 ts=4

View file

@ -9,7 +9,7 @@ sys.path.append(os.getcwd())
from functions.product_keys import * from functions.product_keys import *
init_global_vars() init_global_vars()
os.system('title {}: Transferred Key Finder'.format(KIT_NAME_FULL)) os.system('title {}: Transferred Key Finder'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\Transferred Keys.log'.format(**global_vars) set_log_file('Transferred Keys.log')
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -18,7 +18,7 @@ if __name__ == '__main__':
print_info('{}: Transferred Key Finder\n'.format(KIT_NAME_FULL)) print_info('{}: Transferred Key Finder\n'.format(KIT_NAME_FULL))
try_and_print(message='Searching for keys...', try_and_print(message='Searching for keys...',
function=list_clientdir_keys, print_return=True) function=list_clientdir_keys, print_return=True)
# Done # Done
print_standard('\nDone.') print_standard('\nDone.')
exit_script() exit_script()

View file

@ -18,34 +18,37 @@ if __name__ == '__main__':
'Error': { 'Error': {
'CalledProcessError': 'Unknown Error', 'CalledProcessError': 'Unknown Error',
}} }}
## Prep ## ## Prep ##
update_sdio = ask('Update SDI Origin?') update_sdio = ask('Update SDI Origin?')
## Download ## ## Download ##
print_success('Downloading tools') print_success('Downloading tools')
# Data Recovery # Data Recovery
print_info(' Data Recovery') print_info(' Data Recovery')
try_and_print(message='TestDisk / PhotoRec...', function=update_testdisk, other_results=other_results, width=40) try_and_print(message='TestDisk / PhotoRec...', function=update_testdisk, other_results=other_results, width=40)
# Data Transfers # Data Transfers
print_info(' Data Transfers') print_info(' Data Transfers')
try_and_print(message='FastCopy...', function=update_fastcopy, other_results=other_results, width=40) try_and_print(message='FastCopy...', function=update_fastcopy, other_results=other_results, width=40)
try_and_print(message='Linux Reader...', function=update_linux_reader, other_results=other_results, width=40)
try_and_print(message='wimlib...', function=update_wimlib, other_results=other_results, width=40) try_and_print(message='wimlib...', function=update_wimlib, other_results=other_results, width=40)
try_and_print(message='XYplorer...', function=update_xyplorer, other_results=other_results, width=40) try_and_print(message='XYplorer...', function=update_xyplorer, other_results=other_results, width=40)
# Diagnostics # Diagnostics
print_info(' Diagnostics') print_info(' Diagnostics')
try_and_print(message='AIDA64...', function=update_aida64, other_results=other_results, width=40) try_and_print(message='AIDA64...', function=update_aida64, other_results=other_results, width=40)
try_and_print(message='Autoruns...', function=update_autoruns, other_results=other_results, width=40) try_and_print(message='Autoruns...', function=update_autoruns, other_results=other_results, width=40)
try_and_print(message='BleachBit...', function=update_bleachbit, other_results=other_results, width=40) try_and_print(message='BleachBit...', function=update_bleachbit, other_results=other_results, width=40)
try_and_print(message='BlueScreenView...', function=update_bluescreenview, other_results=other_results, width=40) try_and_print(message='Blue Screen View...', function=update_bluescreenview, other_results=other_results, width=40)
try_and_print(message='ERUNT...', function=update_erunt, other_results=other_results, width=40) try_and_print(message='ERUNT...', function=update_erunt, other_results=other_results, width=40)
try_and_print(message='HitmanPro...', function=update_hitmanpro, other_results=other_results, width=40) try_and_print(message='FurMark...', function=update_furmark, other_results=other_results, width=40)
try_and_print(message='Hitman Pro...', function=update_hitmanpro, other_results=other_results, width=40)
try_and_print(message='HWiNFO...', function=update_hwinfo, other_results=other_results, width=40) try_and_print(message='HWiNFO...', function=update_hwinfo, other_results=other_results, width=40)
try_and_print(message='NirCmd...', function=update_nircmd, other_results=other_results, width=40)
try_and_print(message='ProduKey...', function=update_produkey, other_results=other_results, width=40) try_and_print(message='ProduKey...', function=update_produkey, other_results=other_results, width=40)
# Drivers # Drivers
print_info(' Drivers') print_info(' Drivers')
try_and_print(message='Intel RST...', function=update_intel_rst, other_results=other_results, width=40) try_and_print(message='Intel RST...', function=update_intel_rst, other_results=other_results, width=40)
@ -53,41 +56,45 @@ if __name__ == '__main__':
try_and_print(message='Samsing Magician...', function=update_samsung_magician, other_results=other_results, width=40) try_and_print(message='Samsing Magician...', function=update_samsung_magician, other_results=other_results, width=40)
if update_sdio: if update_sdio:
try_and_print(message='Snappy Driver Installer Origin...', function=update_sdi_origin, other_results=other_results, width=40) try_and_print(message='Snappy Driver Installer Origin...', function=update_sdi_origin, other_results=other_results, width=40)
# Installers # Installers
print_info(' Installers') print_info(' Installers')
try_and_print(message='Adobe Reader DC...', function=update_adobe_reader_dc, other_results=other_results, width=40) try_and_print(message='Adobe Reader DC...', function=update_adobe_reader_dc, other_results=other_results, width=40)
try_and_print(message='ESET Configs...', function=update_eset_config, other_results=other_results, width=40)
try_and_print(message='Macs Fan Control...', function=update_macs_fan_control, other_results=other_results, width=40)
try_and_print(message='MS Office...', function=update_office, other_results=other_results, width=40) try_and_print(message='MS Office...', function=update_office, other_results=other_results, width=40)
try_and_print(message='Visual C++ Runtimes...', function=update_vcredists, other_results=other_results, width=40) try_and_print(message='Visual C++ Runtimes...', function=update_vcredists, other_results=other_results, width=40)
update_all_ninite(other_results=other_results, width=40) update_all_ninite(other_results=other_results, width=40)
# Misc # Misc
print_info(' Misc') print_info(' Misc')
try_and_print(message='Caffeine...', function=update_caffeine, other_results=other_results, width=40) try_and_print(message='Caffeine...', function=update_caffeine, other_results=other_results, width=40)
try_and_print(message='Classic Start Skin...', function=update_classic_start_skin, other_results=other_results, width=40) try_and_print(message='Classic Start Skin...', function=update_classic_start_skin, other_results=other_results, width=40)
try_and_print(message='Du...', function=update_du, other_results=other_results, width=40) try_and_print(message='Du...', function=update_du, other_results=other_results, width=40)
try_and_print(message='Everything...', function=update_everything, other_results=other_results, width=40) try_and_print(message='Everything...', function=update_everything, other_results=other_results, width=40)
try_and_print(message='FirefoxExtensions...', function=update_firefox_ublock_origin, other_results=other_results, width=40) try_and_print(message='Firefox Extensions...', function=update_firefox_ublock_origin, other_results=other_results, width=40)
try_and_print(message='PuTTY...', function=update_putty, other_results=other_results, width=40) try_and_print(message='PuTTY...', function=update_putty, other_results=other_results, width=40)
try_and_print(message='ShutUp10...', function=update_shutup10, other_results=other_results, width=40)
try_and_print(message='Notepad++...', function=update_notepadplusplus, other_results=other_results, width=40) try_and_print(message='Notepad++...', function=update_notepadplusplus, other_results=other_results, width=40)
try_and_print(message='TreeSizeFree...', function=update_treesizefree, other_results=other_results, width=40) try_and_print(message='WizTree...', function=update_wiztree, other_results=other_results, width=40)
try_and_print(message='XMPlay...', function=update_xmplay, other_results=other_results, width=40) try_and_print(message='XMPlay...', function=update_xmplay, other_results=other_results, width=40)
# Repairs # Repairs
print_info(' Repairs') print_info(' Repairs')
try_and_print(message='AdwCleaner...', function=update_adwcleaner, other_results=other_results, width=40) try_and_print(message='AdwCleaner...', function=update_adwcleaner, other_results=other_results, width=40)
try_and_print(message='KVRT...', function=update_kvrt, other_results=other_results, width=40) try_and_print(message='KVRT...', function=update_kvrt, other_results=other_results, width=40)
try_and_print(message='RKill...', function=update_rkill, other_results=other_results, width=40) try_and_print(message='RKill...', function=update_rkill, other_results=other_results, width=40)
try_and_print(message='TDSSKiller...', function=update_tdsskiller, other_results=other_results, width=40) try_and_print(message='TDSS Killer...', function=update_tdsskiller, other_results=other_results, width=40)
try_and_print(message='WinAIO Repair...', function=update_winaiorepair, other_results=other_results, width=40)
# Uninstallers # Uninstallers
print_info(' Uninstallers') print_info(' Uninstallers')
try_and_print(message='IObit Uninstaller...', function=update_iobit_uninstaller, other_results=other_results, width=40) try_and_print(message='IObit Uninstaller...', function=update_iobit_uninstaller, other_results=other_results, width=40)
## Review ## ## Review ##
print_standard('Please review the results and download/extract any missing items to .cbin') print_standard('Please review the results and download/extract any missing items to .cbin')
pause('Press Enter to compress the .cbin items') pause('Press Enter to compress the .cbin items')
## Compress ## ## Compress ##
print_success('Compressing tools') print_success('Compressing tools')
print_info(' _Drivers') print_info(' _Drivers')
@ -108,12 +115,12 @@ if __name__ == '__main__':
other_results = other_results, other_results = other_results,
width=40, width=40,
item = item) item = item)
## Search for network Office/QuickBooks installers & add to LAUNCHERS ## Search for network Office/QuickBooks installers & add to LAUNCHERS
print_success('Scanning for network installers') print_success('Scanning for network installers')
scan_for_net_installers(OFFICE_SERVER, 'Office', min_year=2010) scan_for_net_installers(OFFICE_SERVER, 'Office', min_year=2010)
scan_for_net_installers(QUICKBOOKS_SERVER, 'QuickBooks', min_year=2015) scan_for_net_installers(QUICKBOOKS_SERVER, 'QuickBooks', min_year=2015)
## Generate Launchers ## Generate Launchers
print_success('Generating launchers') print_success('Generating launchers')
for section in sorted(LAUNCHERS.keys()): for section in sorted(LAUNCHERS.keys()):
@ -122,7 +129,7 @@ if __name__ == '__main__':
try_and_print(message=name, function=generate_launcher, try_and_print(message=name, function=generate_launcher,
section=section, name=name, options=options, section=section, name=name, options=options,
other_results=other_results, width=40) other_results=other_results, width=40)
# Rename "Copy WizardKit.cmd" (if necessary) # Rename "Copy WizardKit.cmd" (if necessary)
source = r'{}\Scripts\Copy WizardKit.cmd'.format(global_vars['BinDir']) source = r'{}\Scripts\Copy WizardKit.cmd'.format(global_vars['BinDir'])
dest = r'{}\Copy {}.cmd'.format(global_vars['BaseDir'], KIT_NAME_FULL) dest = r'{}\Copy {}.cmd'.format(global_vars['BaseDir'], KIT_NAME_FULL)
@ -132,7 +139,7 @@ if __name__ == '__main__':
except Exception: except Exception:
print_error(' Failed to rename "{}.cmd" to "{}.cmd"'.format( print_error(' Failed to rename "{}.cmd" to "{}.cmd"'.format(
'Copy WizardKit', KIT_NAME_FULL)) 'Copy WizardKit', KIT_NAME_FULL))
# Done # Done
print_standard('\nDone.') print_standard('\nDone.')
pause("Press Enter to exit...") pause("Press Enter to exit...")

View file

@ -11,8 +11,8 @@ from functions.cleanup import *
from functions.setup import * from functions.setup import *
init_global_vars() init_global_vars()
os.system('title {}: User Checklist Tool'.format(KIT_NAME_FULL)) os.system('title {}: User Checklist Tool'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\User Checklist ({USERNAME}).log'.format( set_log_file('User Checklist ({USERNAME}).log'.format(**global_vars['Env']))
**global_vars, **global_vars['Env']) D7_MODE = 'd7mode' in sys.argv
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -24,36 +24,46 @@ if __name__ == '__main__':
'NotInstalledError': 'Not installed', 'NotInstalledError': 'Not installed',
'NoProfilesError': 'No profiles found', 'NoProfilesError': 'No profiles found',
}} }}
answer_config_browsers = ask('Install adblock?') #answer_config_browsers = ask('Install adblock?')
answer_config_browsers = True
if answer_config_browsers: if answer_config_browsers:
answer_reset_browsers = ask( if D7_MODE:
'Reset browsers to safe defaults first?') # This is handled by another script option in d7ii
answer_reset_browsers = False
else:
answer_reset_browsers = ask(
'Reset browsers to safe defaults first?')
if global_vars['OS']['Version'] == '10': if global_vars['OS']['Version'] == '10':
answer_config_classicshell = ask('Configure ClassicShell?') #answer_config_classicshell = ask('Configure ClassicShell?')
answer_config_explorer_user = ask('Configure Explorer?') #answer_config_explorer_user = ask('Configure Explorer?')
answer_config_classicshell = True
answer_config_explorer_user = True
# Cleanup # Cleanup
print_info('Cleanup') print_info('Cleanup')
try_and_print(message='Desktop...', try_and_print(message='Desktop...',
function=cleanup_desktop, cs='Done') function=cleanup_desktop, cs='Done')
# Scan for supported browsers # Scan for supported browsers
print_info('Scanning for browsers') print_info('Scanning for browsers')
scan_for_browsers() scan_for_browsers()
# Homepages # Homepages
print_info('Current homepages') if not D7_MODE:
list_homepages() print_info('Current homepages')
list_homepages()
# Backup # Backup
print_info('Backing up browsers') if not D7_MODE:
backup_browsers() # Done during system_diagnostics
print_info('Backing up browsers')
backup_browsers()
# Reset # Reset
if answer_config_browsers and answer_reset_browsers: if answer_config_browsers and answer_reset_browsers:
print_info('Resetting browsers') print_info('Resetting browsers')
reset_browsers() reset_browsers()
# Configure # Configure
print_info('Configuring programs') print_info('Configuring programs')
if answer_config_browsers: if answer_config_browsers:
@ -75,10 +85,11 @@ if __name__ == '__main__':
# Run speedtest # Run speedtest
popen_program(['start', '', 'https://fast.com'], shell=True) popen_program(['start', '', 'https://fast.com'], shell=True)
# Done # Done
print_standard('\nDone.') if not D7_MODE:
pause('Press Enter to exit...') print_standard('\nDone.')
pause('Press Enter to exit...')
exit_script() exit_script()
except SystemExit: except SystemExit:
pass pass

View file

@ -10,7 +10,7 @@ from functions.data import *
from functions.repairs import * from functions.repairs import *
init_global_vars() init_global_vars()
os.system('title {}: User Data Transfer Tool'.format(KIT_NAME_FULL)) os.system('title {}: User Data Transfer Tool'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\User Data Transfer.log'.format(**global_vars) set_log_file('User Data Transfer.log')
if __name__ == '__main__': if __name__ == '__main__':
try: try:
@ -18,7 +18,7 @@ if __name__ == '__main__':
stay_awake() stay_awake()
clear_screen() clear_screen()
print_info('{}: User Data Transfer Tool\n'.format(KIT_NAME_FULL)) print_info('{}: User Data Transfer Tool\n'.format(KIT_NAME_FULL))
# Get backup name prefix # Get backup name prefix
ticket_number = get_ticket_number() ticket_number = get_ticket_number()
if ENABLED_TICKET_NUMBERS: if ENABLED_TICKET_NUMBERS:
@ -26,16 +26,16 @@ if __name__ == '__main__':
else: else:
backup_prefix = get_simple_string(prompt='Enter backup name prefix') backup_prefix = get_simple_string(prompt='Enter backup name prefix')
backup_prefix = backup_prefix.replace(' ', '_') backup_prefix = backup_prefix.replace(' ', '_')
# Set destination # Set destination
folder_path = r'{}\Transfer'.format(KIT_NAME_SHORT) folder_path = r'{}\Transfer'.format(KIT_NAME_SHORT)
dest = select_destination(folder_path=folder_path, dest = select_destination(folder_path=folder_path,
prompt='Which disk are we transferring to?') prompt='Which disk are we transferring to?')
# Set source items # Set source items
source = select_source(backup_prefix) source = select_source(backup_prefix)
items = scan_source(source, dest) items = scan_source(source, dest)
# Transfer # Transfer
clear_screen() clear_screen()
print_info('Transfer Details:\n') print_info('Transfer Details:\n')
@ -43,17 +43,17 @@ if __name__ == '__main__':
show_data('Ticket:', ticket_number) show_data('Ticket:', ticket_number)
show_data('Source:', source.path) show_data('Source:', source.path)
show_data('Destination:', dest) show_data('Destination:', dest)
if (not ask('Proceed with transfer?')): if (not ask('Proceed with transfer?')):
umount_backup_shares() umount_backup_shares()
abort() abort()
print_info('Transferring Data') print_info('Transferring Data')
transfer_source(source, dest, items) transfer_source(source, dest, items)
try_and_print(message='Removing extra files...', try_and_print(message='Removing extra files...',
function=cleanup_transfer, cs='Done', dest_path=dest) function=cleanup_transfer, cs='Done', dest_path=dest)
umount_backup_shares() umount_backup_shares()
# Done # Done
try_and_print(message='Running KVRT...', try_and_print(message='Running KVRT...',
function=run_kvrt, cs='Started') function=run_kvrt, cs='Started')

View file

@ -11,7 +11,7 @@ from functions.winpe_menus import *
TOOLS['SevenZip'].pop('64') TOOLS['SevenZip'].pop('64')
init_global_vars() init_global_vars()
set_title('{}: Root Menu'.format(KIT_NAME_FULL)) set_title('{}: Root Menu'.format(KIT_NAME_FULL))
global_vars['LogFile'] = r'{LogDir}\WinPE.log'.format(**global_vars) set_log_file('WinPE.log')
if __name__ == '__main__': if __name__ == '__main__':
try: try:

21
.bin/Scripts/wk-power-command Executable file
View file

@ -0,0 +1,21 @@
#!/bin/bash
#
## Wizard Kit: Wrapper for logout, reboot, & poweroff
# Unmount filesystems
find /media -maxdepth 1 -mindepth 1 -type d \
-exec udevil umount "{}" \;
# Flush write cache
sudo sync
# Perform requested action
case "${1:-x}" in
poweroff)
sudo systemctl poweroff;;
reboot)
sudo systemctl reboot;;
*)
openbox --exit;;
esac
exit 0

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,27 @@
@echo off
setlocal
pushd "%~dp0"
rem Remove stale marker if present
if exist "%SYSTEMDRIVE%\1201\Preserve-MBAM.marker" (
del /f "%SYSTEMDRIVE%\1201\Preserve-MBAM.marker"
)
rem Set marker to prevent unintended MBAM removal
if exist "%PROGRAMFILES%\Malwarebytes\Anti-Malware\mbam.exe" (
echo Previous Malwarebytes installation detected.
echo. > "%SYSTEMDRIVE%\1201\Preserve-MBAM.marker"
)
if exist "%PROGRAMFILES(X86)%\Malwarebytes Anti-Malware\mbam.exe" (
rem MBAM v2 installation
echo Previous Malwarebytes [v2] installation detected.
echo. > "%SYSTEMDRIVE%\1201\Preserve-MBAM.marker"
)
rem Install/Upgrade MBAM
echo Installing Malwarebytes...
start "" /wait mbam-setup.exe /VERYSILENT /NORESTART
popd
endlocal

View file

@ -0,0 +1,63 @@
@echo off
setlocal
pushd "%~dp0"
:GetDate
:: Credit to SS64.com Code taken from http://ss64.com/nt/syntax-getdate.html
:: Use WMIC to retrieve date and time in ISO 8601 format.
for /f "skip=1 tokens=1-6" %%G in ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') do (
if "%%~L"=="" goto s_done
set _yyyy=%%L
set _mm=00%%J
set _dd=00%%G
set _hour=00%%H
set _minute=00%%I
)
:s_done
:: Pad digits with leading zeros
set _mm=%_mm:~-2%
set _dd=%_dd:~-2%
set _hour=%_hour:~-2%
set _minute=%_minute:~-2%
set iso_date=%_yyyy%-%_mm%-%_dd%
rem Get uninstaller path from registry
set "uninstaller="
for /f usebackq^ tokens^=2^ delims^=^" %%s in (
`reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{35065F43-4BB2-439A-BFF7-0F1014F2E0CD}_is1" /v UninstallString`
) do (
set "uninstaller=%%s"
)
rem Copy logs to 1201 folder
echo "Copying logs..."
robocopy /e "%PROGRAMDATA%\Malwarebytes\MBAMService\LOGS" "%SYSTEMDRIVE%\1201\Logs\%iso_date%\Tools\MBAM" >nul
robocopy /e "%PROGRAMDATA%\Malwarebytes\MBAMService\ScanResults" "%SYSTEMDRIVE%\1201\Logs\%iso_date%\Tools\MBAM" >nul
if exist "%SYSTEMDRIVE%\1201\Preserve-MBAM.marker" (
rem Keep MBAM
echo Previous Malwarebytes installation detected.
) else (
rem Move Quarantine to 1201 folder
move "%PROGRAMDATA%\Malwarebytes\Malwarebytes Anti-Malware\Quarantine" "%SYSTEMDRIVE%\1201\Quarantine\MBAM_%iso_date%_%_hour%%_minute%"
rem Remove MBAM
echo No previous Malwarebytes installation detected.
if exist "%uninstaller%" (
echo "Uninstalling Malwarebytes..."
start "" /wait "%uninstaller%" /VERYSILENT /NORESTART /LOG
) else (
color 4e
echo "Malwarebytes installation not found."
echo ""
echo "Press any key to exit... "
pause >nul
)
)
rem Remove marker
del /f "%SYSTEMDRIVE%\1201\Preserve-MBAM.marker"
popd
endlocal

View file

@ -0,0 +1,14 @@
:: Launch WizardKit item
@echo off
setlocal
pushd "%~dp0\..\..\.."
rem Run WizardKit Launcher
call "%*"
rem Sleep for 5 sec so d7II can wait for launched proc
"%systemroot%\System32\ping.exe" -n 5 127.0.0.1>nul
popd
endlocal

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,39 @@
[ShortDesc]
Autoruns=Manages Startup Items
Autoruns_Copy=Manages Startup Items
Autoruns (Verify and Log)=Manages Startup Items
Google Chrome Software Removal Tool=Remove add-ons, extensions, toolbars, and other software that may interfere with the operation of Google Chrome.
VipreRescueScanner (Deep Scan)=Virus scanner (Designed for both the Malware Removal and the Offline Operations tab)
VipreRescueScanner (Quick Scan)=Virus scanner (Designed for both the Malware Removal and the Offline Operations tab)
=Install/Upgrade MBAM
[ReportDesc]
Autoruns=Examined Windows startup items and removed unnecessary entries.
Autoruns_Copy=Examined Windows startup items and removed unnecessary entries.
Autoruns (Verify and Log)=Examined Windows startup items and removed unnecessary entries.
Google Chrome Software Removal Tool=Scanned for and removed any toolbars/extensions/add-ons that may interfere with the operation of Google Chrome.
VipreRescueScanner (Deep Scan)=Ran virus scans (Vipre)
VipreRescueScanner (Quick Scan)=Ran virus scans (Vipre)
28=Created a System Restore point.
32=Ran a Zero Access malware scan.
2=Uninstalled unnecessary applications
41=Re-wrote the default Safe Mode services to prevent potential issues with blue screens when entering Safe Mode.
33=Backed up all Registry Hives.
1=Uninstalled unnecessary applications
9=Repaired file associations for executable files.
10=Removed restrictive Windows policy settings.
11=Cleared proxy settings.
18=Scanned for known malware files and registry entries and removed anything found.
12=Deleted unnecessary temporary files from user profiles and temporary files used by Windows.
13=Deleted temporary internet cache from user profiles.
34=Scanned for viruses/malware with Microsoft Security Essentials / Windows Defender.
49=Scanned for Windows system component corruption to repair any issues found.
24=Repaired the built-in Windows firewall.
31=Set all network adapters to DHCP.
75=Apply static DNS settings to all NICs.
21=Ran repair and reset procedures on networking components.
25=Reset all settings to defaults for the built-in Windows firewall.
36=Manually examined the HOSTS file for hijacks or other issues.
22=Repaired the Windows Update services responsible for Windows Update functionality.
38=Performed repair routines to ensure the Winsock is operating properly.
83=Examined internet speed/bandwidth.
=Malwarebytes installed successfully.

View file

@ -0,0 +1,42 @@
[Autoruns]
PostRunApp=
AlwaysAttemptDownload=1
DLafterXdays=7
EmailBeforeExecution=0
PriorAlert=1
[Autoruns_Copy]
PostRunApp=
AlwaysAttemptDownload=1
DLafterXdays=7
EmailBeforeExecution=0
PriorAlert=1
[Autoruns (Verify and Log)]
PostRunApp=
AlwaysAttemptDownload=1
DLafterXdays=7
EmailBeforeExecution=0
PriorAlert=0
[Google Chrome Software Removal Tool]
PostRunApp=
AlwaysAttemptDownload=1
DLafterXdays=0
EmailBeforeExecution=0
PriorAlert=1
[VipreRescueScanner (Deep Scan)]
PostRunApp=
AlwaysAttemptDownload=1
DLafterXdays=1
EmailBeforeExecution=0
PriorAlert=0
[VipreRescueScanner (Quick Scan)]
PostRunApp=
AlwaysAttemptDownload=1
DLafterXdays=1
EmailBeforeExecution=0
PriorAlert=0
[]
PostRunApp=
AlwaysAttemptDownload=1
DLafterXdays=.5
EmailBeforeExecution=0
PriorAlert=0

View file

@ -0,0 +1,37 @@
[Config]
LastEditDate=10/8/2018 10:56:15 PM
PostRunApp=
AppWebsite=https://www.malwarebytes.com/adwcleaner/
AppDLPage=https://downloads.malwarebytes.com/file/adwcleaner
AppDesc=Toolbar Remover
App=AdwCleaner.exe
UseFTPServer=0
AppURL=https://downloads.malwarebytes.com/file/adwcleaner
AppDLName=AdwCleaner.exe
AlwaysAttemptDownload=1
DLafterXdays=.5
AppWait=1
EmailBeforeExecution=0
PriorAlert=1
ServiceWait=1
AppMsgBox=0
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=1
SnatchReportsLoc=%systemdrive%\AdwCleaner\AdwCleaner*.txt
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
LogVerbiage=Removed unnecessary internet browser add-ins (e.g. Toolbars) [AdwCleaner]
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=0
LastDownload=8/14/2018

View file

@ -0,0 +1,45 @@
[Config]
Author=2Shirt
LastEditDate=10/8/2018 10:56:18 PM
PostRunApp=
AppWebsite=http://www.surfright.nl/en/hitmanpro/
AppDLPage=http://www.surfright.nl/en/downloads/
AppDesc=Malware scanner
App=HitmanPro.exe
App64=HitmanPro_x64.exe
AppParms=/clean /noinstall /excludelist="%3rdpath%\HMP_Excludes.txt" /logtype=txt /log="%malreportdir%\HitmanPro_Scan_Log_%date%.txt"
AppURL64=https://dl.surfright.nl/HitmanPro_x64.exe
AppURL64B=http://dl.surfright.nl/FoolishIT/HitmanPro_x64.exe
AppDLName64=HitmanPro_x64.exe
UseFTPServer=0
AppURL=https://dl.surfright.nl/HitmanPro.exe
AppURLB=http://dl.surfright.nl/FoolishIT/HitmanPro.exe
AppDLName=HitmanPro.exe
AlwaysAttemptDownload=1
DLafterXdays=.5
AppWait=1
EmailBeforeExecution=0
PriorAlert=0
ServiceWait=0
AppMsgBox=1
AppWaitTime=60
AppRandomize=1
CopyConfigFirst=HMP.cmd
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
LogVerbiage=Ran Malware Scans (HitmanPro)
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=1
LastDownload=8/19/2018

View file

@ -0,0 +1,34 @@
[Config]
LastEditDate=8/25/2018 3:50:11 PM
PostRunApp=
App=WizardKit Launcher.cmd
UseFTPServer=0
AlwaysAttemptDownload=0
DLafterXdays=5
AppWait=1
EmailBeforeExecution=0
PriorAlert=1
ServiceWait=0
AppMsgBox=1
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=0
LogVerbiage=Uninstalled unnecessary / junk programs.
AppDesc=Application uninstaller and cleanup utility
AppParms=Uninstallers\IObit Uninstaller.cmd
WaitOnProcesses=IObitUninstallerPortable.exe
AppWaitTime=60

View file

@ -0,0 +1,34 @@
[Config]
LastEditDate=8/30/2018 10:49:46 AM
PostRunApp=
AppParms=.bin\Scripts\launchers_for_d7\Install SW Bundle.cmd
UseFTPServer=0
AlwaysAttemptDownload=0
DLafterXdays=5
AppWait=1
EmailBeforeExecution=0
PriorAlert=0
ServiceWait=0
AppMsgBox=1
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
App=WizardKit Launcher.cmd
AutoFlag=0
WaitOnProcesses=ConEmu.exe;ConEmuC.exe;ConEmu64.exe;ConEmuC64.exe;python.exe;Ninite.exe
AppDesc=Install software bundle
LogVerbiage=Installed or updated commonly used applications (Adobe Reader, Google Chrome, etc)
AppWaitTime=60

View file

@ -0,0 +1,35 @@
[Config]
LastEditDate=10/8/2018 10:55:27 PM
PostRunApp=
AppWebsite=https://www.malwarebytes.com/
AppDLPage=https://downloads.malwarebytes.com/file/mb3/
AppDesc=Download MBAM setup
UseFTPServer=0
AppURL=https://downloads.malwarebytes.com/file/mb3/
AppDLName=mbam-setup.exe
AlwaysAttemptDownload=1
DLafterXdays=3
AppWait=1
EmailBeforeExecution=0
PriorAlert=0
ServiceWait=0
AppMsgBox=0
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=1
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=1
App=exit
LastDownload=10/7/2018

View file

@ -0,0 +1,34 @@
[Config]
LastEditDate=10/7/2018 3:51:22 PM
PostRunApp=
App=MBAM_Install.cmd
UseFTPServer=0
AlwaysAttemptDownload=0
DLafterXdays=0
AppWait=1
EmailBeforeExecution=0
PriorAlert=0
ServiceWait=0
AppMsgBox=1
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=1
AppDesc=Install/Upgrade MBAM
LogVerbiage=Malwarebytes installed successfully.
LastDownload=8/18/2018
Author=2Shirt
AppWaitTime=5

View file

@ -0,0 +1,34 @@
[Config]
LastEditDate=8/13/2018 4:48:53 PM
PostRunApp=
AppWebsite=https://www.malwarebytes.com/
AppDLPage=https://downloads.malwarebytes.com/file/mb3/
AppDesc=Malwarebytes Execution
App=%programfiles%\Malwarebytes\Anti-Malware\mbam.exe
App64=%programfiles%\Malwarebytes\Anti-Malware\mbam.exe
UseFTPServer=0
AlwaysAttemptDownload=0
DLafterXdays=5
AppWait=1
EmailBeforeExecution=0
PriorAlert=1
ServiceWait=0
AppMsgBox=0
AppRandomize=1
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
LogVerbiage=Malwarebytes ran successfully.
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=0

View file

@ -0,0 +1,30 @@
[Config]
LastEditDate=8/13/2018 7:32:30 PM
PostRunApp=
App=MBAM_Uninstall.cmd
UseFTPServer=0
AlwaysAttemptDownload=0
DLafterXdays=5
AppWait=1
EmailBeforeExecution=0
PriorAlert=0
ServiceWait=0
AppMsgBox=0
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=1
AppDesc=Uninstall MBAM (if not previously installed)

View file

@ -0,0 +1,40 @@
[Config]
Author=2Shirt
LastEditDate=10/8/2018 10:56:23 PM
PostRunApp=
AppWebsite=http://www.bleepingcomputer.com/forums/t/308364/rkill-what-it-does-and-what-it-doesnt-a-brief-introduction-to-the-program/
AppDLPage=http://www.bleepingcomputer.com/download/rkill/
AppDesc=Anti-Malware app.
App=rkill.exe
AppParms=-s -w "%3rdpath%\rkill_Excludes.txt"
UseFTPServer=0
AppURL=https://download.bleepingcomputer.com/grinler/rkill.exe
AppDLName=rkill.exe
AlwaysAttemptDownload=1
DLafterXdays=.5
AppWait=1
EmailBeforeExecution=0
PriorAlert=0
ServiceWait=0
AppMsgBox=0
AppRandomize=1
CopyConfigFirst=rkill.cmd
SaveConfigAfter=0
MoveSnatchReports=1
SnatchReportsLoc=%userprofile%\Desktop\rkill*.txt
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
LogVerbiage=Ran Malware Scan (RKill)
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=1
LastDownload=10/7/2018

View file

@ -0,0 +1,35 @@
[Config]
Author=2Shirt
LastEditDate=8/25/2018 3:50:41 PM
PostRunApp=
AppDesc=WizardKit browser reset script (d7II mode)
App=WizardKit Launcher.cmd
AppParms=.bin\Scripts\launchers_for_d7\Browser Reset.cmd
UseFTPServer=0
AlwaysAttemptDownload=0
DLafterXdays=5
AppWait=1
WaitOnProcesses=ConEmu.exe;ConEmuC.exe;ConEmu64.exe;ConEmuC64.exe;python.exe
EmailBeforeExecution=0
PriorAlert=1
ServiceWait=0
AppMsgBox=1
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
LogVerbiage=Reset web browsers to safe defaults and removed any malicous addons found.
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=0
AppWaitTime=30

View file

@ -0,0 +1,35 @@
[Config]
Author=2Shirt
LastEditDate=8/25/2018 3:50:50 PM
PostRunApp=
AppDesc=WizardKit system checklist script (d7II mode)
App=WizardKit Launcher.cmd
AppParms=.bin\Scripts\launchers_for_d7\System Checklist.cmd
UseFTPServer=0
AlwaysAttemptDownload=0
DLafterXdays=5
AppWait=1
WaitOnProcesses=ConEmu.exe;ConEmuC.exe;ConEmu64.exe;ConEmuC64.exe;python.exe
EmailBeforeExecution=0
PriorAlert=1
ServiceWait=0
AppMsgBox=1
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=0
LogVerbiage=Examined and verified system-wide settings (available updates, drivers, activation, etc)
AppWaitTime=60

View file

@ -0,0 +1,35 @@
[Config]
Author=2Shirt
LastEditDate=8/25/2018 3:49:49 PM
PostRunApp=
AppDesc=WizardKit system diagnostics script (d7II mode)
App=WizardKit Launcher.cmd
AppParms=.bin\Scripts\launchers_for_d7\System Diagnostics.cmd
UseFTPServer=0
AlwaysAttemptDownload=0
DLafterXdays=5
AppWait=1
WaitOnProcesses=ConEmu.exe;ConEmuC.exe;ConEmu64.exe;ConEmuC64.exe;python.exe
EmailBeforeExecution=0
PriorAlert=1
ServiceWait=0
AppMsgBox=1
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=0
LogVerbiage=Ran OS built-in repairs and backed up system information
AppWaitTime=60

View file

@ -0,0 +1,35 @@
[Config]
Author=2Shirt
LastEditDate=8/25/2018 3:50:59 PM
PostRunApp=
AppDesc=WizardKit user checklist script (d7II mode)
App=WizardKit Launcher.cmd
AppParms=.bin\Scripts\launchers_for_d7\User Checklist.cmd
UseFTPServer=0
AlwaysAttemptDownload=0
DLafterXdays=5
AppWait=1
WaitOnProcesses=ConEmu.exe;ConEmuC.exe;ConEmu64.exe;ConEmuC64.exe;python.exe;firefox.exe;chrome.exe
EmailBeforeExecution=0
PriorAlert=1
ServiceWait=0
AppMsgBox=1
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
SendEnter=0
RunWithSystemAccess=0
IsDLInstaller=0
LogVerbiage=Verified web browser settings and functionality
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
AutoFlag=0
AppWaitTime=60

View file

@ -0,0 +1,485 @@
[Everything]
app_data=0
run_as_admin=1
window_x=1614
window_y=186
window_wide=794
window_high=664
maximized=0
minimized=0
fullscreen=0
ontop=0
match_whole_word=0
match_path=0
match_case=0
match_diacritics=0
match_regex=0
selection_mask_right_bottom_inclusive=1
allow_multiple_windows=0
allow_multiple_instances=0
run_in_background=1
show_tray_icon=1
alternate_row_color=0
show_mouseover=0
check_for_updates_on_startup=0
beta_updates=0
show_highlighted_search_terms=1
text_size=0
hide_empty_search_results=0
clear_selection_on_search=1
new_window_key=0
show_window_key=0
toggle_window_key=0
language=0
show_selected_item_in_statusbar=0
open_folder_command2=
open_file_command2=
open_path_command2=
explore_command2=
explore_path_command2=
window_title_format=
taskbar_notification_title_format=
instance_name=
translucent_selection_rectangle_alpha=70
min_zoom=-6
max_zoom=27
context_menu_type=0
auto_include_fixed_volumes=1
auto_include_removable_volumes=0
last_export_type=0
max_threads=0
reuse_threads=1
single_parent_context_menu=0
auto_size_1=512
auto_size_2=640
auto_size_3=768
auto_size_aspect_ratio_x=9
auto_size_aspect_ratio_y=7
auto_size_path_x=1
auto_size_path_y=2
sticky_vscroll_bottom=1
last_options_page=9
draw_focus_rect=1
date_format=
time_format=
invert_layout=0
listview_item_high=0
debug=0
home_match_case=0
home_match_whole_word=0
home_match_path=0
home_match_diacritics=0
home_regex=0
home_search=1
home_filter=0
home_sort=0
home_index=1
allow_multiple_windows_from_tray=0
single_click_tray=0
close_on_execute=0
double_click_path=0
update_display_after_scroll=0
update_display_after_mask=1
auto_scroll_view=0
double_quote_copy_as_path=0
snap=0
snaplen=10
rename_select_filepart_only=0
rename_move_caret_to_selection_end=0
search_edit_move_caret_to_selection_end=0
select_search_on_mouse_click=1
focus_search_on_activate=0
reset_vscroll_on_search=1
wrap_focus=0
load_icon_priority=0
load_fileinfo_priority=0
header_high=0
hide_on_close=0
winmm=0
menu_escape_amp=1
fast_ascii_search=1
match_path_when_search_contains_path_separator=1
allow_literal_operators=0
allow_round_bracket_parenthesis=0
expand_environment_variables=0
search_as_you_type=1
convert_forward_slash_to_backslash=0
match_whole_filename_when_using_wildcards=1
double_buffer=1
search=
show_number_of_results_with_selection=0
date_descending_first=0
size_descending_first=0
size_format=2
alpha_select=0
tooltips=1
rtl_listview_edit=0
bookmark_remember_case=1
bookmark_remember_wholeword=1
bookmark_remember_path=1
bookmark_remember_diacritic=1
bookmark_remember_regex=1
bookmark_remember_sort=1
bookmark_remember_filter=1
bookmark_remember_index=1
exclude_list_enabled=1
exclude_hidden_files_and_folders=0
exclude_system_files_and_folders=0
include_only_files=
exclude_files=
db_location=
db_multi_user_filename=0
db_compress=0
extended_information_cache_monitor=1
keep_missing_indexes=0
editor_x=0
editor_y=0
editor_wide=0
editor_high=0
editor_maximized=0
file_list_relative_paths=1
max_recv_size=8388608
display_full_path_name=0
size_tiny=10240
size_small=102400
size_medium=1048576
size_large=16777216
size_huge=134217728
themed_toolbar=1
show_copy_path=2
show_copy_full_name=2
show_open_path=2
show_explore=2
show_explore_path=2
copy_path_folder_append_backslash=0
custom_verb01=
custom_verb02=
custom_verb03=
custom_verb04=
custom_verb05=
custom_verb06=
custom_verb07=
custom_verb08=
custom_verb09=
custom_verb10=
custom_verb11=
custom_verb12=
filters_visible=0
filters_wide=128
filters_right_align=1
filters_tab_stop=0
filter=
filter_everything_name=
sort=Name
sort_ascending=1
always_keep_sort=0
index=0
index_file_list=
index_etp_server=
index_link_type=1
status_bar_visible=1
select_search_on_focus_mode=1
select_search_on_set_mode=2
search_history_enabled=0
run_history_enabled=1
search_history_days_to_keep=90
run_history_days_to_keep=90
search_history_always_suggest=0
search_history_max_results=24
search_history_show_above=0
service_port=15485
etp_server_enabled=0
etp_server_bindings=
etp_server_port=21
etp_server_username=
etp_server_password=
etp_server_welcome_message=
etp_server_log_file_name=
etp_server_logging_enabled=1
etp_server_log_max_size=4194304
etp_server_log_delta_size=524288
etp_server_allow_file_download=1
http_server_enabled=0
http_server_bindings=
http_title_format=
http_server_port=80
http_server_username=
http_server_password=
http_server_home=
http_server_default_page=
http_server_log_file_name=
http_server_logging_enabled=1
http_server_log_max_size=4194304
http_server_log_delta_size=524288
http_server_allow_file_download=1
name_column_pos=0
name_column_width=256
path_column_visible=1
path_column_pos=1
path_column_width=256
size_column_visible=1
size_column_pos=2
size_column_width=96
extension_column_visible=0
extension_column_pos=3
extension_column_width=96
type_column_visible=0
type_column_pos=4
type_column_width=96
last_write_time_column_visible=1
last_write_time_column_pos=3
last_write_time_column_width=153
creation_time_column_visible=0
creation_time_column_pos=6
creation_time_column_width=140
date_accessed_column_visible=0
date_accessed_column_pos=7
date_accessed_column_width=140
attribute_column_visible=0
attribute_column_pos=8
attribute_column_width=70
date_recently_changed_column_visible=0
date_recently_changed_column_pos=9
date_recently_changed_column_width=96
run_count_column_visible=0
run_count_column_pos=10
run_count_column_width=96
date_run_column_visible=0
date_run_column_pos=11
date_run_column_width=140
file_list_filename_column_visible=0
file_list_filename_column_pos=12
file_list_filename_column_width=96
translucent_selection_rectangle_background_color=
translucent_selection_rectangle_border_color=
ntfs_volume_paths=
ntfs_volume_includes=
ntfs_volume_load_recent_changes=
ntfs_volume_include_onlys=
ntfs_volume_monitors=
filelists=
folders=
folder_monitor_changes=
folder_update_types=
folder_update_days=
folder_update_ats=
folder_update_intervals=
folder_update_interval_types=
exclude_folders=
connect_history_hosts=
connect_history_ports=
connect_history_usernames=
connect_history_link_types=
file_new_search_window_keys=334
file_open_file_list_keys=335
file_close_file_list_keys=
file_close_keys=343,27
file_export_keys=339
file_copy_full_name_to_clipboard_keys=9539
file_copy_path_to_clipboard_keys=
file_set_run_count_keys=
file_create_shortcut_keys=
file_delete_keys=8238
file_delete_permanently_keys=9262
file_edit_keys=
file_open_keys=8205
file_open_selection_and_close_everything_keys=
file_explore_path_keys=
file_open_new_keys=
file_open_path_keys=8461
file_open_with_keys=
file_open_with_default_verb_keys=
file_play_keys=
file_preview_keys=
file_print_keys=
file_print_to_keys=
file_properties_keys=8717
file_read_extended_information_keys=8517
file_rename_keys=8305
file_run_as_keys=
file_exit_keys=337
file_custom_verb_1_keys=
file_custom_verb_2_keys=
file_custom_verb_3_keys=
file_custom_verb_4_keys=
file_custom_verb_5_keys=
file_custom_verb_6_keys=
file_custom_verb_7_keys=
file_custom_verb_8_keys=
file_custom_verb_9_keys=
file_custom_verb_10_keys=
file_custom_verb_11_keys=
file_custom_verb_12_keys=
edit_cut_keys=8536
edit_copy_keys=8515,8493
edit_paste_keys=8534,9261
edit_select_all_keys=8513
edit_invert_selection_keys=
view_filters_keys=
view_status_bar_keys=
view_window_size_small_keys=561
view_window_size_medium_keys=562
view_window_size_large_keys=563
view_window_size_auto_fit_keys=564
view_zoom_zoom_in_keys=443,363
view_zoom_zoom_out_keys=445,365
view_zoom_reset_keys=304,352
view_go_to_back_keys=549,166
view_go_to_forward_keys=551,167
view_go_to_home_keys=548
view_sort_by_name_keys=305
view_sort_by_path_keys=306
view_sort_by_size_keys=307
view_sort_by_extension_keys=308
view_sort_by_type_keys=309
view_sort_by_date_modified_keys=310
view_sort_by_date_created_keys=311
view_sort_by_attributes_keys=312
view_sort_by_file_list_filename_keys=
view_sort_by_run_count_keys=
view_sort_by_date_run_keys=
view_sort_by_date_recently_changed_keys=313
view_sort_by_date_accessed_keys=
view_sort_by_ascending_keys=
view_sort_by_descending_keys=
view_refresh_keys=116
view_fullscreen_keys=122
view_toggle_ltrrtl_keys=
view_on_top_never_keys=
view_on_top_always_keys=340
view_on_top_while_searching_keys=
search_match_case_keys=329
search_match_whole_word_keys=322
search_match_path_keys=341
search_match_diacritics_keys=333
search_enable_regex_keys=338
search_add_to_filters_keys=
search_organize_filters_keys=1350
bookmarks_add_to_bookmarks_keys=324
bookmarks_organize_bookmarks_keys=1346
tools_options_keys=336
tools_console_keys=448
tools_file_list_editor_keys=
tools_connect_to_etp_server_keys=
tools_disconnect_from_etp_server_keys=
help_everything_help_keys=112
help_search_syntax_keys=
help_regex_syntax_keys=
help_command_line_options_keys=
help_everything_website_keys=
help_check_for_updates_keys=
help_about_everything_keys=368
search_edit_focus_search_edit_keys=326,114
search_edit_delete_previous_word_keys=4360
search_edit_auto_complete_search_keys=4384
search_edit_show_search_history_keys=
search_edit_show_all_search_history_keys=4646,4648
result_list_item_up_keys=8230,4134
result_list_item_down_keys=8232,4136
result_list_page_up_keys=8225,4129
result_list_page_down_keys=8226,4130
result_list_start_of_list_keys=8228
result_list_end_of_list_keys=8227
result_list_item_up_extend_keys=9254,5158
result_list_item_down_extend_keys=9256,5160
result_list_page_up_extend_keys=9249,5153
result_list_page_down_extend_keys=9250,5154
result_list_start_of_list_extend_keys=9252
result_list_end_of_list_extend_keys=9251
result_list_focus_up_keys=8486,4390
result_list_focus_down_keys=8488,4392
result_list_focus_page_up_keys=8481,4385
result_list_focus_page_down_keys=8482,4386
result_list_focus_start_of_list_keys=8484
result_list_focus_end_of_list_keys=8483
result_list_focus_up_extend_keys=9510,5414
result_list_focus_down_extend_keys=9512,5416
result_list_focus_page_up_extend_keys=9505,5409
result_list_focus_page_down_extend_keys=9506,5410
result_list_focus_start_of_list_extend_keys=9508
result_list_focus_end_of_list_extend_keys=9507
result_list_focus_result_list_keys=
result_list_toggle_path_column_keys=1330
result_list_toggle_size_column_keys=1331
result_list_toggle_extension_column_keys=1332
result_list_toggle_type_column_keys=1333
result_list_toggle_date_modified_column_keys=1334
result_list_toggle_date_created_column_keys=1335
result_list_toggle_attributes_column_keys=1336
result_list_toggle_file_list_filename_column_keys=
result_list_toggle_run_count_column_keys=
result_list_toggle_date_recently_changed_column_keys=1337
result_list_toggle_date_accessed_column_keys=
result_list_toggle_date_run_column_keys=
result_list_size_all_columns_to_fit_keys=8555
result_list_size_result_list_to_fit_keys=
result_list_context_menu_keys=9337
result_list_scroll_left_keys=8229
result_list_scroll_right_keys=8231
result_list_scroll_page_left_keys=8485
result_list_scroll_page_right_keys=8487
result_list_select_focus_keys=8224
result_list_toggle_focus_selection_keys=8480
result_list_copy_selection_to_clipboard_as_csv_keys=
result_list_font=
result_list_font_size=
search_edit_font=
search_edit_font_size=
status_bar_font=
status_bar_font_size=
header_font=
header_font_size=
normal_background_color=
normal_foreground_color=
normal_bold=
highlighted_background_color=
highlighted_foreground_color=
highlighted_bold=
selected_background_color=
selected_foreground_color=
selected_bold=
highlighted_selected_background_color=
highlighted_selected_foreground_color=
highlighted_selected_bold=
selected_inactive_background_color=
selected_inactive_foreground_color=
selected_inactive_bold=
highlighted_selected_inactive_background_color=
highlighted_selected_inactive_foreground_color=
highlighted_selected_inactive_bold=
drop_target_background_color=
drop_target_foreground_color=
drop_target_bold=
highlighted_drop_target_background_color=
highlighted_drop_target_foreground_color=
highlighted_drop_target_bold=
current_sort_background_color=
current_sort_foreground_color=
current_sort_bold=
highlighted_current_sort_background_color=
highlighted_current_sort_foreground_color=
highlighted_current_sort_bold=
mouseover_background_color=
mouseover_foreground_color=
mouseover_bold=
mouseover_highlighted_background_color=
mouseover_highlighted_foreground_color=
mouseover_highlighted_bold=
current_sort_mouseover_background_color=
current_sort_mouseover_foreground_color=
current_sort_mouseover_bold=
mouseover_current_sort_highlighted_background_color=
mouseover_current_sort_highlighted_foreground_color=
mouseover_current_sort_highlighted_bold=
alternate_row_background_color=
alternate_row_foreground_color=
alternate_row_bold=
alternate_row_highlighted_background_color=
alternate_row_highlighted_foreground_color=
alternate_row_highlighted_bold=
current_sort_alternate_row_background_color=
current_sort_alternate_row_foreground_color=
current_sort_alternate_row_bold=
current_sort_alternate_row_highlighted_background_color=
current_sort_alternate_row_highlighted_foreground_color=
current_sort_alternate_row_highlighted_bold=

View file

@ -0,0 +1,11 @@
pushd "%~dp0"
cd..
set d7IIpath=%cd%
pushd "%~dp0"
echo %d7IIpath%\>HMP_Excludes.txt
echo %programfiles%\dSupportSuite\>>HMP_Excludes.txt
echo %programfiles(x86)%\dSupportSuite\>>HMP_Excludes.txt
echo %programfiles%\CryptoPrevent\>>HMP_Excludes.txt
echo %programfiles(x86)%\CryptoPrevent\>>HMP_Excludes.txt
echo %programfiles%\Foolish IT\CryptoPrevent\>>HMP_Excludes.txt
echo %programfiles(x86)%\Foolish IT\CryptoPrevent\>>HMP_Excludes.txt

View file

@ -0,0 +1,17 @@
@echo off&pushd "%~dp0"
start /wait JRT.exe -y -nr
pushd "%temp%\jrt"
if not exist "get.bat" pushd %systemdrive%\JRT
if not exist "get.bat" goto :eof
findstr /v /i "pause" get.bat>tmp.txt
findstr /v /i /b "notepad" tmp.txt>get.bat
echo.>>"%temp%\jrt\wl_services.cfg"
echo d7iisvc>>"%temp%\jrt\wl_services.cfg"
echo dSSEventSvc>>"%temp%\jrt\wl_services.cfg"
echo CryptoPreventEventSvc>>"%temp%\jrt\wl_services.cfg"
echo.>>"%temp%\jrt\wl_processes.cfg"
echo d7ii>>"%temp%\jrt\wl_processes.cfg"
echo dfunk>>"%temp%\jrt\wl_processes.cfg"
echo dSupportSuite>>"%temp%\jrt\wl_processes.cfg"
echo CryptoPrevent>>"%temp%\jrt\wl_processes.cfg"
start /wait cmd.exe /c get.bat

View file

@ -0,0 +1,26 @@
[Options]
AutoSync=1
AutoExit=1
Retry=1
[Servers]
0="time-a.nist.gov"
1="time-a.timefreq.bldrdoc.gov"
2="time-b.nist.gov"
3="time-b.timefreq.bldrdoc.gov"
4="time-c.timefreq.bldrdoc.gov"
5="us.pool.ntp.org"
6="1.us.pool.ntp.org"
7="2.us.pool.ntp.org"
8="3.us.pool.ntp.org"
9="pubts1-sj.witime.net"
10="pubts2-sj.witime.net"
11="rolex.usg.edu"
12="timekeeper.isi.edu"
13="nist1.symmetricom.com"
14="clock.via.net"
15="nist1.aol-ca.truetime.com"
16="nist.expertsmi.com"
17="nist1-dc.WiTime.net"
18="nist1-sj.WiTime.net"
19="utcnist.colorado.edu"

View file

@ -0,0 +1,167 @@
::
:: --- BEGIN INFO ---
::
::
:: Applicable Custom App: All 'Emsisoft xxx' app configurations in d7II default custom app configurations.
::
:: Last Update: 2017-02-03
::
:: Created by Nick @ FoolishIT.com [Foolish IT LLC] as an example for the user-configurable d7II custom app's system.
::
::
:: - d7II Config Location: (applicable to most anything having to do with this batch file)
:: Open Config (under Main drop down menu) \ Custom Apps (tab) \ (search/find/highlight desired custom app in left column/box first) \ New/Edit App (sub-tab)
::
:: - This batch file is referenced from custom app configuration items in d7II Config, and may make references to other data available from within
:: the custom app configuration or used by it such as noted here.
::
:: - The 'Whitelist.txt' file created by this batch file will by referenced in the command line arguments passed to the custom app; the configuration
:: for this is located in custom apps config as mentioned above \ then the Execution (sub-tab)
::
:: - This batch file is called into action when configured in the 'Import Config Before Execution' setting in a d7II custom app configuration,
:: which can be found on the 'Pre-Execution' tab of the custom app configuration mentioned above.
::
:: NOTES: * When a .BAT/.CMD file such as this is found configured under this setting (as opposed to any other text or data file) it will be
:: copied to the custom app's final running directory (the same as any other files would be) but then executed as a batch script (after
:: the installer is executed if one is configured, but prior to execution of the main custom app itself.
::
:: * Similarly, a .VBS file would be copied to the custom app directory and executed as a script as above.
::
:: * Further, a .REG file would be imported to the registry if found configured for this setting.
::
:: * This setting may reference multiple files separated by a comma with no spacing required; e.g. 'file1.bat,file2.txt,file3.reg'
::
:: * All files (no paths) configured here must be located within your 'd7II\Config\CustomApps\3rd Party Configs' path (create the last
:: dirs if not exist.) They will likely work if located in the 'd7II\Config\CustomApps_d7II\3rd Party Configs' path, but with all
:: d7II default custom app configurations, this path with all content will be deleted and rewritten during updates to the default apps.
::
::
:: Batch File Objectives:
::
:: 1. Obtain d7II path via registry; use this in creating a whitelist to be used by the custom app
:: (to include all custom apps in subdirs of d7II)
::
:: 2. Obtain 3rd Party Tools path via registry; if this is not a subdir of the main d7II Path, then
:: add this to a whitelist to be used by the custom app (to include all custom apps in subdirs)
::
:: 3. create a2cmd whitelist as a new file in the location/directory of the custom app (overwrite existing if any)
:: - batch file current directory should be same as the main executable of the custom app (Execution tab)
:: - add d7II path and include all custom apps within the d7II subdir structure) and other Foolish IT apps
:: to a new file (overwrite) in the current directory (of the custom app whitelist for a2cmd.)
::
::
:: --- BEGIN CODE ---
:: Disable local echo, clear screen, output a blank line.
::
@echo off&cls&echo.
:: Set window title to visually identify what this console window is doing.
title [a2cmd] Performing Additional Custom App Tasks...
:: Change from the Current Working Directory (available to the %cd% variable)
:: to the Current Directory (available as %~dp0 below) where the file actually "lives"
:: and was the location where this batch file was copied to by d7II.exe prior to running it.
::
:: - This should be the path of the main exe for this custom app as configured in d7II;
:: located in custom apps config as mentioned above \ then the Execution (sub-tab)
::
:: - Syntax explanation:
::
:: '~' removes wrapping quotes (never use in a variable if possible, instead wrap the variable as necessary!)
:: 'd' returns a drive letter and colon
:: 'p' returns a full directory path (without a prepended driveletter, and including a trailing backslash)
:: '0' refers to self (this batch file) as the subject of the above conditions
::
pushd "%~dp0"
:: Set variables for registry value queries and app info
::
set "RegKey=HKLM\Software\Foolish IT\d7II\Session\Paths"
set "RegNameEXE=AppEXE"
set "RegName3PT=3PTDir"
set "MainPath=%systemdrive%\EmsisoftCmd"
set "MainEXE=a2cmd.exe"
set "InstEXE32=EmsisoftCommandlineScanner32.exe"
set "InstEXE64=EmsisoftCommandlineScanner64.exe"
set "InstParms=/S"
:: Determine if 64bit paths should be used. Note that by using the syntax '%programfiles% (x86)' and not the single
:: '%programfiles(x86)%' then we avoid any errors with the variable not existing and throwing off the actual exist check.
::
if "[%programfiles(x86)%]" NEQ "[]" if exist "%programfiles% (x86)" set Win64=True
::
if defined Win64 (
set "ProgramDir32=%programfiles(x86)%"
set "InstEXE=%InstEXE64%"
) else (
set "ProgramDir32=%programfiles%"
set "InstEXE=%InstEXE32%"
)
:: Run installer/self-extractor
::
if not exist "%MainPath%\%MainEXE%" if exist %InstEXE% start "" /wait "%InstEXE%" %InstParms%
:: Exit if install path does not exist...
::
if not exist "%MainPath%" (
goto :eof
) else (
pushd "%MainPath%"
)
:: Add exclusions for other Foolish IT product paths (unrelated to d7II) that may be on a system;
:: While we could first test for dir exist, the dumb addition of a few extra exclusions to the
:: whitelist without checking for their existence will make much of a difference to any custom app...
::
:: - NOTE: observe the first code line using a single ">" chr prior to the whitelist filename,
:: this creates new or overwrites an existing file; all subsequent usage for the same
:: filename must include the syntax of double ">>" chrs, which creates new or appends
:: to an existing file.
::
echo %ProgramDir32%\dSupportSuite\>a2cmd_Whitelist.txt
echo %ProgramDir32%\CryptoPrevent\>>a2cmd_Whitelist.txt
echo %ProgramDir32%\Foolish IT\CryptoPrevent\>>a2cmd_Whitelist.txt
:: Extract the full path to d7II.exe for the "d7IIPath" variable; obtain d7II path for the currently active
:: d7II 'session' via a registry query to the registry's copy of d7II's current session configuration.
::
:: - NOTE: The ' 2^>nul' syntax below redirects errors from the 'reg query' command to 'nul' in order to
:: keep garbage/error messages from defining this variable on an unexpected error...
::
:: Also, similar to the '%~dp0' syntax used with pushd at the beginning of the batch file, the
:: variable syntax '~dp' is used with the variable '%%_' to ensure output as a drive\path without
:: without a filename and without wrapping quotes (a trailing backslash is included in the output
:: and for these purposes it is also expected syntax for the custom app whitelist.
::
for /f "usebackq tokens=2*" %%a in (`reg query "%RegKey%" /v "%RegNameEXE%" 2^>nul`) do set "d7IIPath=%%~dpb"
::
:: Check for a result; if variable is defined above then add this path to the whitelist.
::
if defined d7IIPath echo %d7IIpath%>>a2cmd_Whitelist.txt
:: Next get the path to d7II custom apps / 3rd party tools via reg query, to provide redundancy if this path
:: for any reason is not located within a subdir of d7II.exe itself. First set the new registry value name.
::
for /f "usebackq tokens=2*" %%a in (`reg query "%RegKey%" /v "%RegName3PT%" 2^>nul`) do set "ToolsPath=%%~b"
::
:: Check for a result; if variable is defined above then add this path to the whitelist, otherwise the rest
:: of this script is useless, so exit.
::
if not defined ToolsPath goto :eof
echo %ToolsPath%\>>a2cmd_Whitelist.txt
:: If no parameters were passed to this batch file, it is being run as part of the "Copy Config" custom app
:: setting (it will be run a second time with parameters for the execution of the custom app itself, which is
:: configured to run this batch file again instead of %MainEXE% as the actual configured exe for this custom
:: app.)
::
:: Test to find out if any parameters were passed to this batch file, and if none are found just update...
::
if [%1] EQU [] goto :RunUpdate
:: If we make it this far then this batch file was launched with command line parameters intended for %MainEXE%,
:: so run the custom app passing all parameters as received and waiting for exit.
::
echo Running scan... (in a separate window; please do NOT close this window!)
::
start "" /wait "%MainEXE%" %*
goto :eof
:RunUpdate
::
:: Since getting here means no parameters were passed, run %MainEXE% using parameters for it's own internal
:: definition/signature update, then exit.
::
echo Starting update... (in a separate window; please do NOT close this window!)
::
start "" /wait "%MainEXE%" /update
goto :eof

View file

@ -0,0 +1,5 @@
pushd "%~dp0"
cd..
set d7IIpath=%cd%
pushd "%~dp0"
echo %d7IIpath%\d7II.exe>rkill_Excludes.txt

View file

@ -0,0 +1,35 @@
[Config]
DisableCloudShare=0
AppURL=http://www.alex-is.de/PHP/fusion/downloads.php?cat_id=4&file_id=9
AppDLName=AS SSD Benchmark.zip
AlwaysAttemptDownload=1
AppWait=1
ServiceWait=0
AppMsgBox=0
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
App=AS SSD Benchmark\AS SSD Benchmark.exe
UseFTPServer=0
DLafterXdays=7
PriorAlert=0
LogVerbiage=Ran SSD testing/benchmark
LastDownload=10/27/2017
AppWebsite=www.alex-is.de/PHP/fusion/downloads.php?cat_id=4&download_id=9
Author=FoolishTech
LastEditDate=2/7/2014 9:45:12 AM
NonDirectURLs=0
AppDLPage=www.alex-is.de/PHP/fusion/downloads.php?cat_id=4&download_id=9
AppDesc=SSD Benchmark Utility
AutoFlag=0

View file

@ -0,0 +1,36 @@
[Config]
Author=FoolishTech
LastEditDate=7/21/2014 11:16:06 AM
AppWebsite=http://www.bleepingcomputer.com/download/adwcleaner/
AppDLPage=http://www.bleepingcomputer.com/download/adwcleaner/
AppDesc=Toolbar Remover
App=AdwCleaner.exe
UseFTPServer=0
AppURL=http://download.bleepingcomputer.com/Xplode/AdwCleaner.exe
AppURLB=http://general-changelog-team.fr/fr/downloads/finish/20-outils-de-xplode/2-adwcleaner
AppDLName=AdwCleaner.exe
AlwaysAttemptDownload=1
DLafterXdays=.5
AppWait=1
PriorAlert=1
ServiceWait=1
AppMsgBox=0
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=1
SnatchReportsLoc=%systemdrive%\AdwCleaner\AdwCleaner*.txt
SnatchReportsToMalwareLogs=1
RunInCMD=0
RunWithSystemAccess=0
IsDLInstaller=0
LogVerbiage=Removed unnecessary internet browser add-ins (e.g. Toolbars) [AdwCleaner]
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
NonDirectURLs=0
LastDownload=10/27/2017
AutoFlag=0

View file

@ -0,0 +1,34 @@
[Config]
DisableCloudShare=0
AppWebsite=http://www.auslogics.com/en/software/disk-defrag/command-line/
App=ausdiskdefragportable.exe
AppURL=http://www.auslogics.com/en/downloads/disk-defrag/ausdiskdefragportable.exe
AppDLName=ausdiskdefragportable.exe
AlwaysAttemptDownload=1
AppWait=1
ServiceWait=0
AppMsgBox=0
AppRandomize=0
SaveConfigAfter=0
MoveSnatchReports=0
SnatchReportsToMalwareLogs=0
RunInCMD=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=0
UseFTPServer=0
DLafterXdays=7
PriorAlert=1
LogVerbiage=Defragmented file system (Auslogics)
Author=FoolishTech
LastEditDate=2/7/2014 9:45:41 AM
NonDirectURLs=0
AppDesc=Disk Defragmenter
AppDLPage=http://www.auslogics.com/en/software/disk-defrag/
AutoFlag=0

View file

@ -0,0 +1,36 @@
[Config]
App=autoruns\autoruns.exe
AppURL=http://download.sysinternals.com/files/Autoruns.zip
AppDLName=autoruns.zip
AppWait=1
AppMsgBox=0
AppRandomize=1
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
AppParms=-accepteula
DisableCloudShare=0
UseFTPServer=0
AlwaysAttemptDownload=1
DLafterXdays=7
PriorAlert=1
ServiceWait=0
SaveConfigAfter=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
AppWebsite=http://technet.microsoft.com/en-us/sysinternals/bb963902
LogVerbiage=Examined Windows startup items and removed unnecessary entries.
LastDownload=10/27/2017
Author=FoolishTech
LastEditDate=2/7/2014 9:46:37 AM
NonDirectURLs=0
AppDLPage=http://technet.microsoft.com/en-us/sysinternals/bb963902
AppDesc=Manages Startup Items
AutoFlag=0

View file

@ -0,0 +1,33 @@
[Config]
App=aswMBR.exe
AppURL=http://public.avast.com/~gmerek/aswMBR.exe
AppWait=1
AppMsgBox=0
AppRandomize=1
MoveSnatchReports=0
SnatchReportsToMalwareLogs=1
RunInCMD=0
AppDLName=aswMBR.exe
DisableCloudShare=0
UseFTPServer=0
AlwaysAttemptDownload=0
PriorAlert=1
ServiceWait=0
SaveConfigAfter=0
RunWithSystemAccess=0
IsDLInstaller=0
32=1
64=1
XP=1
Vista=1
7=1
8=1
Servers=1
AppWebsite=http://public.avast.com/~gmerek/aswMBR.htm
LogVerbiage=Checked MBR for infections and scanned for additional malicious items (Avast!).
Author=FoolishTech
LastEditDate=2/7/2014 9:46:53 AM
AppDLPage=http://public.avast.com/~gmerek/aswMBR.htm
AppDesc=MBR Checker and Virus Scanner
NonDirectURLs=0
AutoFlag=0

Some files were not shown because too many files have changed in this diff Show more