|
| 1 | +#RequireAdmin |
| 2 | + |
| 3 | +#include <Date.au3> |
| 4 | +#include <String.au3> |
| 5 | + |
| 6 | +FileInstall('idm_reset.reg', @TempDir & '\idm_reset.reg', 1) |
| 7 | +FileInstall('idm_trial.reg', @TempDir & '\idm_trial.reg', 1) |
| 8 | +FileInstall('idm_reg.reg', @TempDir & '\idm_reg.reg', 1) |
| 9 | +FileInstall('SetACLx32.exe', @TempDir & '\SetACLx32.exe', 1) |
| 10 | +FileInstall('SetACLx64.exe', @TempDir & '\SetACLx64.exe', 1) |
| 11 | + |
| 12 | +Global $setacl = (@OSArch = 'X86') ? '"' & @TempDir & "\SetACLx32.exe" & '"' : '"' & @TempDir & "\SetACLx64.exe" & '"' |
| 13 | + |
| 14 | +Global Const $version = 21 |
| 15 | +Global Const $urlForum = "http://bit.ly/IDMresetTrialForum" |
| 16 | +Global Const $urlDownload = "http://bit.ly/IDMresetTrial" |
| 17 | + |
| 18 | +Global $isAuto = isAuto() |
| 19 | + |
| 20 | +Global $allkey[6] |
| 21 | +$allkey[0] = '{6DDF00DB-1234-46EC-8356-27E7B2051192}' |
| 22 | +$allkey[1] = '{7B8E9164-324D-4A2E-A46D-0165FB2000EC}' |
| 23 | +$allkey[2] = '{D5B91409-A8CA-4973-9A0B-59F713D25671}' |
| 24 | +$allkey[3] = '{5ED60779-4DE2-4E07-B862-974CA4FF2E9C}' |
| 25 | +$allkey[4] = '' |
| 26 | +$allkey[5] = '{07999AC3-058B-40BF-984F-69EB1E554CA7}' |
| 27 | + |
| 28 | +Func SetOwner($owner) |
| 29 | + ; $owner : everyone or nobody |
| 30 | + Switch $owner |
| 31 | + Case 'everyone' |
| 32 | + $owner = 'S-1-1-0' |
| 33 | + Case 'nobody' |
| 34 | + $owner = 'S-1-0-0' |
| 35 | + EndSwitch |
| 36 | + |
| 37 | + For $i = 0 To UBound($allkey) - 1 Step 1 |
| 38 | + If $allkey[$i] <> '' Then |
| 39 | + RunWait($setacl & ' -on HKCU\Software\Classes\CLSID\' & $allkey[$i] & ' -ot reg -actn setowner -ownr "n:' & $owner & '" -silent', "", @SW_HIDE) |
| 40 | + RunWait($setacl & ' -on HKCU\Software\Classes\Wow6432Node\CLSID\' & $allkey[$i] & ' -ot reg -actn setowner -ownr "n:' & $owner & '" -silent', "", @SW_HIDE) |
| 41 | + RunWait($setacl & ' -on HKLM\Software\Classes\CLSID\' & $allkey[$i] & ' -ot reg -actn setowner -ownr "n:' & $owner & '" -silent', "", @SW_HIDE) |
| 42 | + RunWait($setacl & ' -on HKLM\Software\Classes\Wow6432Node\CLSID\' & $allkey[$i] & ' -ot reg -actn setowner -ownr "n:' & $owner & '" -silent', "", @SW_HIDE) |
| 43 | + EndIf |
| 44 | + Next |
| 45 | +EndFunc ;==>SetOwner |
| 46 | + |
| 47 | +Func SetPermission($permission) |
| 48 | + ; $permission : read or full |
| 49 | + For $i = 0 To UBound($allkey) - 1 Step 1 |
| 50 | + If $allkey[$i] <> '' Then |
| 51 | + RunWait($setacl & ' -on HKCU\Software\Classes\CLSID\' & $allkey[$i] & ' -ot reg -actn ace -ace "n:everyone;p:' & $permission & '" -actn setprot -op "dacl:p_nc;sacl:p_nc" -silent', "", @SW_HIDE) |
| 52 | + RunWait($setacl & ' -on HKCU\Software\Classes\Wow6432Node\CLSID\' & $allkey[$i] & ' -ot reg -actn ace -ace "n:everyone;p:' & $permission & '" -actn setprot -op "dacl:p_nc;sacl:p_nc" -silent', "", @SW_HIDE) |
| 53 | + RunWait($setacl & ' -on HKLM\Software\Classes\CLSID\' & $allkey[$i] & ' -ot reg -actn ace -ace "n:everyone;p:' & $permission & '" -actn setprot -op "dacl:p_nc;sacl:p_nc" -silent', "", @SW_HIDE) |
| 54 | + RunWait($setacl & ' -on HKLM\Software\Classes\Wow6432Node\CLSID\' & $allkey[$i] & ' -ot reg -actn ace -ace "n:everyone;p:' & $permission & '" -actn setprot -op "dacl:p_nc;sacl:p_nc" -silent', "", @SW_HIDE) |
| 55 | + EndIf |
| 56 | + Next |
| 57 | +EndFunc ;==>SetPermission |
| 58 | + |
| 59 | +Func Reset() |
| 60 | + $allkey[4] = RegSearch('cDTvBFquXk0') |
| 61 | + |
| 62 | + SetOwner('everyone') |
| 63 | + SetPermission('full') |
| 64 | + |
| 65 | + ; reset everything |
| 66 | + RunWait('reg import "' & @TempDir & "\idm_reset.reg" & '"', "", @SW_HIDE) |
| 67 | + If $allkey[4] <> '' Then |
| 68 | + RegDelete("HKEY_CURRENT_USER\Software\Classes\CLSID\" & $allkey[4]) |
| 69 | + RegDelete("HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\" & $allkey[4]) |
| 70 | + RegDelete("HKEY_LOCAL_MACHINE\Software\Classes\CLSID\" & $allkey[4]) |
| 71 | + RegDelete("HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\" & $allkey[4]) |
| 72 | + EndIf |
| 73 | +EndFunc ;==>Reset |
| 74 | + |
| 75 | +Func autorun($s) |
| 76 | + Switch $s |
| 77 | + ; Disable autorun |
| 78 | + Case 'off' |
| 79 | + RunWait('reg delete "HKCU\Software\DownloadManager" /v "auto_reset_trial" /f', "", @SW_HIDE) |
| 80 | + RunWait('reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "IDM trial reset" /f', "", @SW_HIDE) |
| 81 | + ; Enable autorun |
| 82 | + Case 'trial' |
| 83 | + RunWait('reg add "HKCU\Software\DownloadManager" /v "auto_reset_trial" /t "REG_SZ" /d "' & _DateAdd("D", 15, @YEAR & "/" & @MON & "/" & @MDAY) & '" /f', "", @SW_HIDE) |
| 84 | + RunWait('reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "IDM trial reset" /t "REG_SZ" /d "\"' & @ScriptFullPath & '\" /trial" /f', "", @SW_HIDE) |
| 85 | + EndSwitch |
| 86 | +EndFunc ;==>autorun |
| 87 | + |
| 88 | +Func Trial() |
| 89 | + Reset() |
| 90 | + RunWait('reg import "' & @TempDir & "\idm_trial.reg" & '"', "", @SW_HIDE) |
| 91 | + SetPermission('read') |
| 92 | + SetOwner('nobody') |
| 93 | +EndFunc ;==>Trial |
| 94 | + |
| 95 | +Func TrialSilent() |
| 96 | + Local $auto_reset_trial = RegRead("HKCU\Software\DownloadManager", "auto_reset_trial") |
| 97 | + Local $day_to_reset = _DateDiff("D", @YEAR & "/" & @MON & "/" & @MDAY, $auto_reset_trial) |
| 98 | + If $day_to_reset <= 0 Then |
| 99 | + Trial() |
| 100 | + autorun('trial') |
| 101 | + If GotUpdate() Then |
| 102 | + Local $Download = (MsgBox(1, "IDM trial reset", "Update me now?") == 1) |
| 103 | + If $Download Then ShellExecute($urlDownload) |
| 104 | + EndIf |
| 105 | + EndIf |
| 106 | +EndFunc ;==>TrialSilent |
| 107 | + |
| 108 | +Func Register($FName = "IDM trial reset") |
| 109 | + Reset() |
| 110 | + autorun('off') |
| 111 | + RunWait('reg import "' & @TempDir & "\idm_reg.reg" & '"', "", @SW_HIDE) |
| 112 | + |
| 113 | + If $allkey[4] <> '' Then |
| 114 | + RegWrite("HKEY_CURRENT_USER\Software\Classes\CLSID\" & $allkey[4]) |
| 115 | + RegWrite("HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\" & $allkey[4]) |
| 116 | + RegWrite("HKEY_LOCAL_MACHINE\Software\Classes\CLSID\" & $allkey[4]) |
| 117 | + RegWrite("HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\" & $allkey[4]) |
| 118 | + EndIf |
| 119 | + |
| 120 | + RunWait('reg add "HKCU\Software\DownloadManager" /v "FName" /t "REG_SZ" /d "' & $FName & '" /f', "", @SW_HIDE) |
| 121 | + SetPermission('read') |
| 122 | + SetOwner('nobody') |
| 123 | +EndFunc ;==>Register |
| 124 | + |
| 125 | +Func GotUpdate() |
| 126 | + Local $info = InetRead('http://pastebin.com/raw/uYr0cstV', 1) |
| 127 | + If $info <> '' Then |
| 128 | + Local $latest = _StringBetween(BinaryToString($info), "<version>", "</version>")[0] |
| 129 | + Return ($latest > $version) |
| 130 | + EndIf |
| 131 | + |
| 132 | + Return 0 |
| 133 | +EndFunc ;==>GotUpdate |
| 134 | + |
| 135 | +Func isAuto() |
| 136 | + Local $checkTime = _DateIsValid(RegRead("HKCU\Software\DownloadManager", "auto_reset_trial")) |
| 137 | + Local $Autorun = FileExists("""" & _StringBetween("" & RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", "IDM trial reset"), """", """") & """") |
| 138 | + Return $Autorun * $checkTime |
| 139 | +EndFunc ;==>isAuto |
| 140 | + |
| 141 | +Func clearTemp() |
| 142 | + ; Delete temp files |
| 143 | + FileDelete(@TempDir & "\idm_reset.reg") |
| 144 | + FileDelete(@TempDir & "\idm_trial.reg") |
| 145 | + FileDelete(@TempDir & "\idm_reg.reg") |
| 146 | + FileDelete(@TempDir & "\SetACLx32.exe") |
| 147 | + FileDelete(@TempDir & "\SetACLx64.exe") |
| 148 | + FileDelete(@TempDir & "\reg_query.tmp") |
| 149 | +EndFunc ;==>clearTemp |
| 150 | + |
| 151 | +Func RegSearch($value = '') |
| 152 | + |
| 153 | + Local $key = '' |
| 154 | + |
| 155 | + Local $DOS = RunWait(@ComSpec & " /c reg query hkcr\clsid /s > " & @TempDir & "\reg_query.tmp", "", @SW_HIDE, 0x10000) |
| 156 | + |
| 157 | + Local $find = StringSplit(_getDOSOutput('findstr /N /I ' & $value & ' ' & @TempDir & "\reg_query.tmp"), ':')[1] |
| 158 | + $find = Number($find) - 1 |
| 159 | + $find = _getDOSOutput('findstr /N . ' & @TempDir & "\reg_query.tmp" & ' | findstr /b ' & $find & ':') |
| 160 | + |
| 161 | + If StringInStr($find, "{") And StringInStr($find, "}") Then |
| 162 | + $key = "{" & _StringBetween($find, "{", "}")[0] & "}" |
| 163 | + EndIf |
| 164 | + |
| 165 | + Return $key |
| 166 | + |
| 167 | +EndFunc ;==>RegSearch |
| 168 | + |
| 169 | +Func _getDOSOutput($command) |
| 170 | + Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4) |
| 171 | + While 1 |
| 172 | + $text &= StdoutRead($Pid, False, False) |
| 173 | + If @error Then ExitLoop |
| 174 | + Sleep(10) |
| 175 | + WEnd |
| 176 | + Return StringStripWS($text, 7) |
| 177 | +EndFunc ;==>_getDOSOutput |
0 commit comments