Created
June 18, 2024 08:16
-
-
Save rise-worlds/8f4138f1c485eeedcdf15ac8da6ec55c to your computer and use it in GitHub Desktop.
IDM-Activation-Script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@set iasver=1.2 | |
@setlocal DisableDelayedExpansion | |
@echo off | |
::============================================================================ | |
:: | |
:: IDM Activation Script (IAS) | |
:: | |
:: Homepages: https://github.com/WindowsAddict/IDM-Activation-Script | |
:: https://massgrave.dev/idm-activation-script | |
:: | |
:: Email: [email protected] | |
:: | |
::============================================================================ | |
:: To activate, run the script with "/act" parameter or change 0 to 1 in below line | |
set _activate=0 | |
:: To Freeze the 30 days trial period, run the script with "/frz" parameter or change 0 to 1 in below line | |
set _freeze=0 | |
:: To reset the activation and trial, run the script with "/res" parameter or change 0 to 1 in below line | |
set _reset=0 | |
:: If value is changed in above lines or parameter is used then script will run in unattended mode | |
::======================================================================================================================================== | |
:: Set Path variable, it helps if it is misconfigured in the system | |
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" | |
if exist "%SystemRoot%\Sysnative\reg.exe" ( | |
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%" | |
) | |
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows | |
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows | |
set "_cmdf=%~f0" | |
for %%# in (%*) do ( | |
if /i "%%#"=="r1" set r1=1 | |
if /i "%%#"=="r2" set r2=1 | |
) | |
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( | |
setlocal EnableDelayedExpansion | |
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" | |
exit /b | |
) | |
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows | |
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( | |
setlocal EnableDelayedExpansion | |
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" | |
exit /b | |
) | |
::======================================================================================================================================== | |
set "blank=" | |
set "mas=ht%blank%tps%blank%://mass%blank%grave.dev/" | |
:: Check if Null service is working, it's important for the batch script | |
sc query Null | find /i "RUNNING" | |
if %errorlevel% NEQ 0 ( | |
echo: | |
echo Null service is not running, script may crash... | |
echo: | |
echo: | |
echo Help - %mas%idm-activation-script.html#Troubleshoot | |
echo: | |
echo: | |
ping 127.0.0.1 -n 10 | |
) | |
cls | |
:: Check LF line ending | |
pushd "%~dp0" | |
>nul findstr /v "$" "%~nx0" && ( | |
echo: | |
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing. | |
echo: | |
ping 127.0.0.1 -n 6 >nul | |
popd | |
exit /b | |
) | |
popd | |
::======================================================================================================================================== | |
cls | |
color 07 | |
title IDM Activation Script %iasver% | |
set _args= | |
set _elev= | |
set _unattended=0 | |
set _args=%* | |
if defined _args set _args=%_args:"=% | |
if defined _args ( | |
for %%A in (%_args%) do ( | |
if /i "%%A"=="-el" set _elev=1 | |
if /i "%%A"=="/res" set _reset=1 | |
if /i "%%A"=="/frz" set _freeze=1 | |
if /i "%%A"=="/act" set _activate=1 | |
) | |
) | |
for %%A in (%_activate% %_freeze% %_reset%) do (if "%%A"=="1" set _unattended=1) | |
::======================================================================================================================================== | |
set "nul1=1>nul" | |
set "nul2=2>nul" | |
set "nul6=2^>nul" | |
set "nul=>nul 2>&1" | |
set psc=powershell.exe | |
set winbuild=1 | |
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G | |
set _NCS=1 | |
if %winbuild% LSS 10586 set _NCS=0 | |
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) | |
if %_NCS% EQU 1 ( | |
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" | |
set "Red="41;97m"" | |
set "Gray="100;97m"" | |
set "Green="42;97m"" | |
set "Blue="44;97m"" | |
set "_White="40;37m"" | |
set "_Green="40;92m"" | |
set "_Yellow="40;93m"" | |
) else ( | |
set "Red="Red" "white"" | |
set "Gray="Darkgray" "white"" | |
set "Green="DarkGreen" "white"" | |
set "Blue="Blue" "white"" | |
set "_White="Black" "Gray"" | |
set "_Green="Black" "Green"" | |
set "_Yellow="Black" "Yellow"" | |
) | |
set "nceline=echo: &echo ==== ERROR ==== &echo:" | |
set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:" | |
set "line=___________________________________________________________________________________________________" | |
set "_buf={$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=34;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" | |
::======================================================================================================================================== | |
if %winbuild% LSS 7600 ( | |
%nceline% | |
echo Unsupported OS version Detected [%winbuild%]. | |
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent. | |
goto done2 | |
) | |
for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( | |
%nceline% | |
echo Unable to find powershell.exe in the system. | |
goto done2 | |
) | |
::======================================================================================================================================== | |
:: Fix for the special characters limitation in path name | |
set "_work=%~dp0" | |
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" | |
set "_batf=%~f0" | |
set "_batp=%_batf:'=''%" | |
set _PSarg="""%~f0""" -el %_args% | |
set _PSarg=%_PSarg:'=''% | |
set "_appdata=%appdata%" | |
set "_ttemp=%userprofile%\AppData\Local\Temp" | |
setlocal EnableDelayedExpansion | |
::======================================================================================================================================== | |
echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( | |
if /i not "!_work!"=="!_ttemp!" ( | |
%eline% | |
echo Script is launched from the temp folder, | |
echo Most likely you are running the script directly from the archive file. | |
echo: | |
echo Extract the archive file and launch the script from the extracted folder. | |
goto done2 | |
) | |
) | |
::======================================================================================================================================== | |
:: Check PowerShell | |
REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: | |
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])" | find /i "FullLanguage" %nul1% || ( | |
%eline% | |
%psc% $ExecutionContext.SessionState.LanguageMode | |
echo: | |
echo PowerShell is not working. Aborting... | |
echo If you have applied restrictions on Powershell then undo those changes. | |
echo: | |
echo Check this page for help. %mas%idm-activation-script.html#Troubleshoot | |
goto done2 | |
) | |
::======================================================================================================================================== | |
:: Elevate script as admin and pass arguments and preventing loop | |
%nul1% fltmc || ( | |
if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg!\"' -verb runas" && exit /b | |
%eline% | |
echo This script requires admin privileges. | |
echo To do so, right click on this script and select 'Run as administrator'. | |
goto done2 | |
) | |
::======================================================================================================================================== | |
:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app | |
set quedit= | |
set terminal= | |
if %_unattended%==1 ( | |
set quedit=1 | |
set terminal=1 | |
) | |
for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1) | |
if %winbuild% LSS 10586 ( | |
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set quedit=1 | |
) | |
if %winbuild% GEQ 17763 ( | |
set "launchcmd=start conhost.exe %psc%" | |
) else ( | |
set "launchcmd=%psc%" | |
) | |
set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" | |
set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" | |
set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" | |
set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" | |
if defined quedit goto :skipQE | |
%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" &exit /b | |
:skipQE | |
::======================================================================================================================================== | |
:: Check for updates | |
set -= | |
set old= | |
for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 iasupdatecheck.mass%-%grave.dev') do ( | |
if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%iasver%" %nul1% || set old=1)) | |
) | |
if defined old ( | |
echo ________________________________________________ | |
%eline% | |
echo You are running outdated version IAS %iasver% | |
echo ________________________________________________ | |
echo: | |
if not %_unattended%==1 ( | |
echo [1] Get Latest IAS | |
echo [0] Continue Anyway | |
echo: | |
call :_color %_Green% "Enter a menu option in the Keyboard [1,0] :" | |
choice /C:10 /N | |
if !errorlevel!==2 rem | |
if !errorlevel!==1 (start https://github.com/WindowsAddict/IDM-Activation-Script & start %mas%/idm-activation-script & exit /b) | |
) | |
) | |
::======================================================================================================================================== | |
cls | |
title IDM Activation Script %iasver% | |
echo: | |
echo Initializing... | |
:: Check WMI | |
%psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1% || ( | |
%eline% | |
%psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" | |
echo: | |
echo WMI is not working. Aborting... | |
echo: | |
echo Check this page for help. %mas%idm-activation-script.html#Troubleshoot | |
goto done2 | |
) | |
:: Check user account SID | |
set _sid= | |
for /f "delims=" %%a in ('%psc% "([System.Security.Principal.NTAccount](Get-WmiObject -Class Win32_ComputerSystem).UserName).Translate([System.Security.Principal.SecurityIdentifier]).Value" %nul6%') do (set _sid=%%a) | |
reg query HKU\%_sid%\Software %nul% || ( | |
for /f "delims=" %%a in ('%psc% "$explorerProc = Get-Process -Name explorer | Where-Object {$_.SessionId -eq (Get-Process -Id $pid).SessionId} | Select-Object -First 1; $sid = (gwmi -Query ('Select * From Win32_Process Where ProcessID=' + $explorerProc.Id)).GetOwnerSid().Sid; $sid" %nul6%') do (set _sid=%%a) | |
) | |
reg query HKU\%_sid%\Software %nul% || ( | |
%eline% | |
echo: | |
echo [%_sid%] | |
echo User Account SID not found. Aborting... | |
echo: | |
echo Check this page for help. %mas%idm-activation-script.html#Troubleshoot | |
goto done2 | |
) | |
::======================================================================================================================================== | |
:: Check if the current user SID is syncing with the HKCU entries | |
%nul% reg delete HKCU\IAS_TEST /f | |
%nul% reg delete HKU\%_sid%\IAS_TEST /f | |
set HKCUsync=$null | |
%nul% reg add HKCU\IAS_TEST | |
%nul% reg query HKU\%_sid%\IAS_TEST && ( | |
set HKCUsync=1 | |
) | |
%nul% reg delete HKCU\IAS_TEST /f | |
%nul% reg delete HKU\%_sid%\IAS_TEST /f | |
:: Below code also works for ARM64 Windows 10 (including x64 bit emulation) | |
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b | |
if /i not "%arch%"=="x86" set arch=x64 | |
if "%arch%"=="x86" ( | |
set "CLSID=HKCU\Software\Classes\CLSID" | |
set "CLSID2=HKU\%_sid%\Software\Classes\CLSID" | |
set "HKLM=HKLM\Software\Internet Download Manager" | |
) else ( | |
set "CLSID=HKCU\Software\Classes\Wow6432Node\CLSID" | |
set "CLSID2=HKU\%_sid%\Software\Classes\Wow6432Node\CLSID" | |
set "HKLM=HKLM\SOFTWARE\Wow6432Node\Internet Download Manager" | |
) | |
for /f "tokens=2*" %%a in ('reg query "HKU\%_sid%\Software\DownloadManager" /v ExePath %nul6%') do call set "IDMan=%%b" | |
if not exist "%IDMan%" ( | |
if %arch%==x64 set "IDMan=%ProgramFiles(x86)%\Internet Download Manager\IDMan.exe" | |
if %arch%==x86 set "IDMan=%ProgramFiles%\Internet Download Manager\IDMan.exe" | |
) | |
if not exist %SystemRoot%\Temp md %SystemRoot%\Temp | |
set "idmcheck=tasklist /fi "imagename eq idman.exe" | findstr /i "idman.exe" %nul1%" | |
:: Check CLSID registry access | |
%nul% reg add %CLSID2%\IAS_TEST | |
%nul% reg query %CLSID2%\IAS_TEST || ( | |
%eline% | |
echo Failed to write in %CLSID2% | |
echo: | |
echo Check this page for help. %mas%idm-activation-script.html#Troubleshoot | |
goto done2 | |
) | |
%nul% reg delete %CLSID2%\IAS_TEST /f | |
::======================================================================================================================================== | |
if %_reset%==1 goto :_reset | |
if %_activate%==1 (set frz=0&goto :_activate) | |
if %_freeze%==1 (set frz=1&goto :_activate) | |
:MainMenu | |
cls | |
title IDM Activation Script %iasver% | |
if not defined terminal mode 75, 28 | |
echo: | |
echo: | |
echo: | |
echo: | |
echo: | |
echo: This script is NOT working with latest IDM. | |
echo: ___________________________________________________ | |
echo: | |
echo: [1] Freeze Trial | |
echo: [2] Activate | |
echo: [3] Reset Activation / Trial | |
echo: _____________________________________________ | |
echo: | |
echo: [4] Download IDM | |
echo: [5] Help | |
echo: [0] Exit | |
echo: ___________________________________________________ | |
echo: | |
call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,0]" | |
choice /C:123450 /N | |
set _erl=%errorlevel% | |
if %_erl%==6 exit /b | |
if %_erl%==5 start https://github.com/WindowsAddict/IDM-Activation-Script & start https://massgrave.dev/idm-activation-script & goto MainMenu | |
if %_erl%==4 start https://www.internetdownloadmanager.com/download.html & goto MainMenu | |
if %_erl%==3 goto _reset | |
if %_erl%==2 (set frz=0&goto :_activate) | |
if %_erl%==1 (set frz=1&goto :_activate) | |
goto :MainMenu | |
::======================================================================================================================================== | |
:_reset | |
cls | |
if not %HKCUsync%==1 ( | |
if not defined terminal mode 153, 35 | |
) else ( | |
if not defined terminal mode 113, 35 | |
) | |
if not defined terminal %psc% "&%_buf%" %nul% | |
echo: | |
%idmcheck% && taskkill /f /im idman.exe | |
set _time= | |
for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a | |
echo: | |
echo Creating backup of CLSID registry keys in %SystemRoot%\Temp | |
reg export %CLSID% "%SystemRoot%\Temp\_Backup_HKCU_CLSID_%_time%.reg" | |
if not %HKCUsync%==1 reg export %CLSID2% "%SystemRoot%\Temp\_Backup_HKU-%_sid%_CLSID_%_time%.reg" | |
call :delete_queue | |
%psc% "$sid = '%_sid%'; $HKCUsync = %HKCUsync%; $lockKey = $null; $deleteKey = 1; $f=[io.file]::ReadAllText('!_batp!') -split ':regscan\:.*';iex ($f[1])" | |
call :add_key | |
echo: | |
echo %line% | |
echo: | |
call :_color %Green% "The IDM reset process has been completed." | |
goto done | |
:delete_queue | |
echo: | |
echo Deleting IDM registry keys... | |
echo: | |
for %%# in ( | |
""HKCU\Software\DownloadManager" "/v" "FName"" | |
""HKCU\Software\DownloadManager" "/v" "LName"" | |
""HKCU\Software\DownloadManager" "/v" "Email"" | |
""HKCU\Software\DownloadManager" "/v" "Serial"" | |
""HKCU\Software\DownloadManager" "/v" "scansk"" | |
""HKCU\Software\DownloadManager" "/v" "tvfrdt"" | |
""HKCU\Software\DownloadManager" "/v" "radxcnt"" | |
""HKCU\Software\DownloadManager" "/v" "LstCheck"" | |
""HKCU\Software\DownloadManager" "/v" "ptrk_scdt"" | |
""HKCU\Software\DownloadManager" "/v" "LastCheckQU"" | |
"%HKLM%" | |
) do for /f "tokens=* delims=" %%A in ("%%~#") do ( | |
set "reg="%%~A"" ® query !reg! %nul% && call :del | |
) | |
if not %HKCUsync%==1 for %%# in ( | |
""HKU\%_sid%\Software\DownloadManager" "/v" "FName"" | |
""HKU\%_sid%\Software\DownloadManager" "/v" "LName"" | |
""HKU\%_sid%\Software\DownloadManager" "/v" "Email"" | |
""HKU\%_sid%\Software\DownloadManager" "/v" "Serial"" | |
""HKU\%_sid%\Software\DownloadManager" "/v" "scansk"" | |
""HKU\%_sid%\Software\DownloadManager" "/v" "tvfrdt"" | |
""HKU\%_sid%\Software\DownloadManager" "/v" "radxcnt"" | |
""HKU\%_sid%\Software\DownloadManager" "/v" "LstCheck"" | |
""HKU\%_sid%\Software\DownloadManager" "/v" "ptrk_scdt"" | |
""HKU\%_sid%\Software\DownloadManager" "/v" "LastCheckQU"" | |
) do for /f "tokens=* delims=" %%A in ("%%~#") do ( | |
set "reg="%%~A"" ® query !reg! %nul% && call :del | |
) | |
exit /b | |
:del | |
reg delete %reg% /f %nul% | |
if "%errorlevel%"=="0" ( | |
set "reg=%reg:"=%" | |
echo Deleted - !reg! | |
) else ( | |
set "reg=%reg:"=%" | |
call :_color2 %Red% "Failed - !reg!" | |
) | |
exit /b | |
::======================================================================================================================================== | |
:_activate | |
cls | |
if not %HKCUsync%==1 ( | |
if not defined terminal mode 153, 35 | |
) else ( | |
if not defined terminal mode 113, 35 | |
) | |
if not defined terminal %psc% "&%_buf%" %nul% | |
if %frz%==0 if %_unattended%==0 ( | |
echo: | |
echo %line% | |
echo: | |
echo Activation is not working for some users and IDM may show fake serial nag screen. | |
echo: | |
call :_color2 %_White% " " %_Green% "Its recommended to use Freeze Trial option instead." | |
echo %line% | |
echo: | |
choice /C:19 /N /M "> [1] Go Back [9] Activate : " | |
if !errorlevel!==1 goto :MainMenu | |
cls | |
) | |
echo: | |
if not exist "%IDMan%" ( | |
call :_color %Red% "IDM [Internet Download Manager] is not Installed." | |
echo You can download it from https://www.internetdownloadmanager.com/download.html | |
goto done | |
) | |
:: Internet check with internetdownloadmanager.com ping and port 80 test | |
set _int= | |
for /f "delims=[] tokens=2" %%# in ('ping -n 1 internetdownloadmanager.com') do (if not [%%#]==[] set _int=1) | |
if not defined _int ( | |
%psc% "$t = New-Object Net.Sockets.TcpClient;try{$t.Connect("""internetdownloadmanager.com""", 80)}catch{};$t.Connected" | findstr /i "true" %nul1% || ( | |
call :_color %Red% "Unable to connect internetdownloadmanager.com, aborting..." | |
goto done | |
) | |
call :_color %Gray% "Ping command failed for internetdownloadmanager.com" | |
echo: | |
) | |
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "regwinos=%%b" | |
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set "regarch=%%b" | |
for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if "%%j"=="" (set fullbuild=%%i) else (set fullbuild=%%i.%%j) | |
for /f "tokens=2*" %%a in ('reg query "HKU\%_sid%\Software\DownloadManager" /v idmvers %nul6%') do set "IDMver=%%b" | |
echo Checking Info - [%regwinos% ^| %fullbuild% ^| %regarch% ^| IDM: %IDMver%] | |
%idmcheck% && (echo: & taskkill /f /im idman.exe) | |
set _time= | |
for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a | |
echo: | |
echo Creating backup of CLSID registry keys in %SystemRoot%\Temp | |
reg export %CLSID% "%SystemRoot%\Temp\_Backup_HKCU_CLSID_%_time%.reg" | |
if not %HKCUsync%==1 reg export %CLSID2% "%SystemRoot%\Temp\_Backup_HKU-%_sid%_CLSID_%_time%.reg" | |
call :delete_queue | |
call :add_key | |
%psc% "$sid = '%_sid%'; $HKCUsync = %HKCUsync%; $lockKey = 1; $deleteKey = $null; $toggle = 1; $f=[io.file]::ReadAllText('!_batp!') -split ':regscan\:.*';iex ($f[1])" | |
if %frz%==0 call :register_IDM | |
call :download_files | |
if not defined _fileexist ( | |
%eline% | |
echo Error: Unable to download files with IDM. | |
echo: | |
echo Help: %mas%idm-activation-script.html#Troubleshoot | |
goto :done | |
) | |
%psc% "$sid = '%_sid%'; $HKCUsync = %HKCUsync%; $lockKey = 1; $deleteKey = $null; $f=[io.file]::ReadAllText('!_batp!') -split ':regscan\:.*';iex ($f[1])" | |
echo: | |
echo %line% | |
echo: | |
if %frz%==0 ( | |
call :_color %Green% "The IDM Activation process has been completed." | |
echo: | |
call :_color %Gray% "If the fake serial screen appears, use the Freeze Trial option instead." | |
) else ( | |
call :_color %Green% "The IDM 30 days trial period is successfully freezed for Lifetime." | |
echo: | |
call :_color %Gray% "If IDM is showing a popup to register, reinstall IDM." | |
) | |
::======================================================================================================================================== | |
:done | |
echo %line% | |
echo: | |
echo: | |
if %_unattended%==1 timeout /t 2 & exit /b | |
if defined terminal ( | |
call :_color %_Yellow% "Press 0 key to return..." | |
choice /c 0 /n | |
) else ( | |
call :_color %_Yellow% "Press any key to return..." | |
pause %nul1% | |
) | |
goto MainMenu | |
:done2 | |
if %_unattended%==1 timeout /t 2 & exit /b | |
if defined terminal ( | |
echo Press 0 key to exit... | |
choice /c 0 /n | |
) else ( | |
echo Press any key to exit... | |
pause %nul1% | |
) | |
exit /b | |
::======================================================================================================================================== | |
:_rcont | |
reg add %reg% %nul% | |
call :add | |
exit /b | |
:register_IDM | |
echo: | |
echo Applying registration details... | |
echo: | |
set /a fname = %random% %% 9999 + 1000 | |
set /a lname = %random% %% 9999 + 1000 | |
set email=%fname%.%lname%@tonec.com | |
for /f "delims=" %%a in ('%psc% "$key = -join ((Get-Random -Count 20 -InputObject ([char[]]('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'))));$key = ($key.Substring(0, 5) + '-' + $key.Substring(5, 5) + '-' + $key.Substring(10, 5) + '-' + $key.Substring(15, 5) + $key.Substring(20));Write-Output $key" %nul6%') do (set key=%%a) | |
set "reg=HKCU\SOFTWARE\DownloadManager /v FName /t REG_SZ /d "%fname%"" & call :_rcont | |
set "reg=HKCU\SOFTWARE\DownloadManager /v LName /t REG_SZ /d "%lname%"" & call :_rcont | |
set "reg=HKCU\SOFTWARE\DownloadManager /v Email /t REG_SZ /d "%email%"" & call :_rcont | |
set "reg=HKCU\SOFTWARE\DownloadManager /v Serial /t REG_SZ /d "%key%"" & call :_rcont | |
if not %HKCUsync%==1 ( | |
set "reg=HKU\%_sid%\SOFTWARE\DownloadManager /v FName /t REG_SZ /d "%fname%"" & call :_rcont | |
set "reg=HKU\%_sid%\SOFTWARE\DownloadManager /v LName /t REG_SZ /d "%lname%"" & call :_rcont | |
set "reg=HKU\%_sid%\SOFTWARE\DownloadManager /v Email /t REG_SZ /d "%email%"" & call :_rcont | |
set "reg=HKU\%_sid%\SOFTWARE\DownloadManager /v Serial /t REG_SZ /d "%key%"" & call :_rcont | |
) | |
exit /b | |
:download_files | |
echo: | |
echo Triggering a few downloads to create certain registry keys, please wait... | |
echo: | |
set "file=%SystemRoot%\Temp\temp.png" | |
set _fileexist= | |
set link=https://www.internetdownloadmanager.com/images/idm_box_min.png | |
call :download | |
set link=https://www.internetdownloadmanager.com/register/IDMlib/images/idman_logos.png | |
call :download | |
set link=https://www.internetdownloadmanager.com/pictures/idm_about.png | |
call :download | |
echo: | |
timeout /t 3 %nul1% | |
%idmcheck% && taskkill /f /im idman.exe | |
if exist "%file%" del /f /q "%file%" | |
exit /b | |
:download | |
set /a attempt=0 | |
if exist "%file%" del /f /q "%file%" | |
start "" /B "%IDMan%" /n /d "%link%" /p "%SystemRoot%\Temp" /f temp.png | |
:check_file | |
timeout /t 1 %nul1% | |
set /a attempt+=1 | |
if exist "%file%" set _fileexist=1&exit /b | |
if %attempt% GEQ 20 exit /b | |
goto :Check_file | |
::======================================================================================================================================== | |
:add_key | |
echo: | |
echo Adding registry key... | |
echo: | |
set "reg="%HKLM%" /v "AdvIntDriverEnabled2"" | |
reg add %reg% /t REG_DWORD /d "1" /f %nul% | |
:add | |
if "%errorlevel%"=="0" ( | |
set "reg=%reg:"=%" | |
echo Added - !reg! | |
) else ( | |
set "reg=%reg:"=%" | |
call :_color2 %Red% "Failed - !reg!" | |
) | |
exit /b | |
::======================================================================================================================================== | |
:regscan: | |
$finalValues = @() | |
$arch = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment').PROCESSOR_ARCHITECTURE | |
if ($arch -eq "x86") { | |
$regPaths = @("HKCU:\Software\Classes\CLSID", "Registry::HKEY_USERS\$sid\Software\Classes\CLSID") | |
} else { | |
$regPaths = @("HKCU:\Software\Classes\WOW6432Node\CLSID", "Registry::HKEY_USERS\$sid\Software\Classes\Wow6432Node\CLSID") | |
} | |
foreach ($regPath in $regPaths) { | |
if (($regPath -match "HKEY_USERS") -and ($HKCUsync -ne $null)) { | |
continue | |
} | |
Write-Host | |
Write-Host "Searching IDM CLSID Registry Keys in $regPath" | |
Write-Host | |
$subKeys = Get-ChildItem -Path $regPath -ErrorAction SilentlyContinue -ErrorVariable lockedKeys | Where-Object { $_.PSChildName -match '^\{[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}\}$' } | |
foreach ($lockedKey in $lockedKeys) { | |
$leafValue = Split-Path -Path $lockedKey.TargetObject -Leaf | |
$finalValues += $leafValue | |
Write-Output "$leafValue - Found Locked Key" | |
} | |
if ($subKeys -eq $null) { | |
continue | |
} | |
$subKeysToExclude = "LocalServer32", "InProcServer32", "InProcHandler32" | |
$filteredKeys = $subKeys | Where-Object { !($_.GetSubKeyNames() | Where-Object { $subKeysToExclude -contains $_ }) } | |
foreach ($key in $filteredKeys) { | |
$fullPath = $key.PSPath | |
$keyValues = Get-ItemProperty -Path $fullPath -ErrorAction SilentlyContinue | |
$defaultValue = $keyValues.PSObject.Properties | Where-Object { $_.Name -eq '(default)' } | Select-Object -ExpandProperty Value | |
if (($defaultValue -match "^\d+$") -and ($key.SubKeyCount -eq 0)) { | |
$finalValues += $($key.PSChildName) | |
Write-Output "$($key.PSChildName) - Found Digit In Default and No Subkeys" | |
continue | |
} | |
if (($defaultValue -match "\+|=") -and ($key.SubKeyCount -eq 0)) { | |
$finalValues += $($key.PSChildName) | |
Write-Output "$($key.PSChildName) - Found + or = In Default and No Subkeys" | |
continue | |
} | |
$versionValue = Get-ItemProperty -Path "$fullPath\Version" -ErrorAction SilentlyContinue | Select-Object -ExpandProperty '(default)' -ErrorAction SilentlyContinue | |
if (($versionValue -match "^\d+$") -and ($key.SubKeyCount -eq 1)) { | |
$finalValues += $($key.PSChildName) | |
Write-Output "$($key.PSChildName) - Found Digit In \Version and No Other Subkeys" | |
continue | |
} | |
$keyValues.PSObject.Properties | ForEach-Object { | |
if ($_.Name -match "MData|Model|scansk|Therad") { | |
$finalValues += $($key.PSChildName) | |
Write-Output "$($key.PSChildName) - Found MData Model scansk Therad" | |
continue | |
} | |
} | |
if (($key.ValueCount -eq 0) -and ($key.SubKeyCount -eq 0)) { | |
$finalValues += $($key.PSChildName) | |
Write-Output "$($key.PSChildName) - Found Empty Key" | |
continue | |
} | |
} | |
} | |
$finalValues = @($finalValues | Select-Object -Unique) | |
if ($finalValues -ne $null) { | |
Write-Host | |
if ($lockKey -ne $null) { | |
Write-Host "Locking IDM CLSID Registry Keys..." | |
} | |
if ($deleteKey -ne $null) { | |
Write-Host "Deleting IDM CLSID Registry Keys..." | |
} | |
Write-Host | |
} else { | |
Write-Host "IDM CLSID Registry Keys are not found." | |
Exit | |
} | |
if (($finalValues.Count -gt 20) -and ($toggle -ne $null)) { | |
$lockKey = $null | |
$deleteKey = 1 | |
Write-Host "The IDM keys count is more than 20. Deleting them now instead of locking..." | |
Write-Host | |
} | |
function Take-Permissions { | |
param($rootKey, $regKey) | |
$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) | |
$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) | |
$TypeBuilder = $ModuleBuilder.DefineType(0) | |
$TypeBuilder.DefinePInvokeMethod('RtlAdjustPrivilege', 'ntdll.dll', 'Public, Static', 1, [int], @([int], [bool], [bool], [bool].MakeByRefType()), 1, 3) | Out-Null | |
9,17,18 | ForEach-Object { $TypeBuilder.CreateType()::RtlAdjustPrivilege($_, $true, $false, [ref]$false) | Out-Null } | |
$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544') | |
$IDN = ($SID.Translate([System.Security.Principal.NTAccount])).Value | |
$Admin = New-Object System.Security.Principal.NTAccount($IDN) | |
$everyone = New-Object System.Security.Principal.SecurityIdentifier('S-1-1-0') | |
$none = New-Object System.Security.Principal.SecurityIdentifier('S-1-0-0') | |
$key = [Microsoft.Win32.Registry]::$rootKey.OpenSubKey($regkey, 'ReadWriteSubTree', 'TakeOwnership') | |
$acl = New-Object System.Security.AccessControl.RegistrySecurity | |
$acl.SetOwner($Admin) | |
$key.SetAccessControl($acl) | |
$key = $key.OpenSubKey('', 'ReadWriteSubTree', 'ChangePermissions') | |
$rule = New-Object System.Security.AccessControl.RegistryAccessRule($everyone, 'FullControl', 'ContainerInherit', 'None', 'Allow') | |
$acl.ResetAccessRule($rule) | |
$key.SetAccessControl($acl) | |
if ($lockKey -ne $null) { | |
$acl = New-Object System.Security.AccessControl.RegistrySecurity | |
$acl.SetOwner($none) | |
$key.SetAccessControl($acl) | |
$key = $key.OpenSubKey('', 'ReadWriteSubTree', 'ChangePermissions') | |
$rule = New-Object System.Security.AccessControl.RegistryAccessRule($everyone, 'FullControl', 'Deny') | |
$acl.ResetAccessRule($rule) | |
$key.SetAccessControl($acl) | |
} | |
} | |
foreach ($regPath in $regPaths) { | |
if (($regPath -match "HKEY_USERS") -and ($HKCUsync -ne $null)) { | |
continue | |
} | |
foreach ($finalValue in $finalValues) { | |
$fullPath = Join-Path -Path $regPath -ChildPath $finalValue | |
if ($fullPath -match 'HKCU:') { | |
$rootKey = 'CurrentUser' | |
} else { | |
$rootKey = 'Users' | |
} | |
$position = $fullPath.IndexOf("\") | |
$regKey = $fullPath.Substring($position + 1) | |
if ($lockKey -ne $null) { | |
if (-not (Test-Path -Path $fullPath -ErrorAction SilentlyContinue)) { New-Item -Path $fullPath -Force -ErrorAction SilentlyContinue | Out-Null } | |
Take-Permissions $rootKey $regKey | |
try { | |
Remove-Item -Path $fullPath -Force -Recurse -ErrorAction Stop | |
Write-Host -back 'DarkRed' -fore 'white' "Failed - $fullPath" | |
} | |
catch { | |
Write-Host "Locked - $fullPath" | |
} | |
} | |
if ($deleteKey -ne $null) { | |
if (Test-Path -Path $fullPath) { | |
Remove-Item -Path $fullPath -Force -Recurse -ErrorAction SilentlyContinue | |
if (Test-Path -Path $fullPath) { | |
Take-Permissions $rootKey $regKey | |
try { | |
Remove-Item -Path $fullPath -Force -Recurse -ErrorAction Stop | |
Write-Host "Deleted - $fullPath" | |
} | |
catch { | |
Write-Host -back 'DarkRed' -fore 'white' "Failed - $fullPath" | |
} | |
} | |
else { | |
Write-Host "Deleted - $fullPath" | |
} | |
} | |
} | |
} | |
} | |
:regscan: | |
::======================================================================================================================================== | |
:_color | |
if %_NCS% EQU 1 ( | |
echo %esc%[%~1%~2%esc%[0m | |
) else ( | |
%psc% write-host -back '%1' -fore '%2' '%3' | |
) | |
exit /b | |
:_color2 | |
if %_NCS% EQU 1 ( | |
echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m | |
) else ( | |
%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' | |
) | |
exit /b | |
::======================================================================================================================================== | |
:: Leave empty line below |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment