Gemostarter
  - Longevity: 8 years 1 month
- Posts: 323
- REPUTATION:35[+] [-]
|
В этой теме предлагаю выкладывать скрипты на AutoIt, полезные и не очень. Как в той теме с батниками, только AutoIt  Для почина - деобфускатор строк, превращённых в вызовы функции BinaryToString(). Писалось для разборки китайской альтернативы стандартной проге установки Windows из этого сообщения. В той же теме чуть дальше выложена первая версия скрипта. Но эта версия лучше, надёжнее, и в несколько сотен раз быстрее при обработке больших файлов. Правда, 100% гарантии работоспособности деобфусцированного скрипта не даю. Интересно, кто-нибудь рискнёт теперь выложить в теме обфускатор такого типа?  Opt( "MustDeclareVars", 1 ) Global $g_s_FileName $g_s_FileName = FileOpenDialog ( "Выберите скрипт", @ScriptDir, "Скрипты AutoIt3 (*.au3)|Все файлы (*.*)" ) Global $g_s_Src $g_s_Src = FileRead( $g_s_FileName ) Global $g_as_Src $g_as_Src = StringSplit( $g_s_Src, @CRLF, 1 ) Global $g_i_RegExpResultsExists Do $g_i_RegExpResultsExists = False For $i_Str = 1 To $g_as_Src[0] Global $g_as_ObfStrings $g_as_ObfStrings = StringRegExp( $g_as_Src[$i_Str], 'BinaryToString\h*\([^()]+\)', 3 ) If @Error Then ContinueLoop EndIf $g_i_RegExpResultsExists = True For $i = 0 To UBound($g_as_ObfStrings) - 1 Global $g_s_DeobfString $g_s_DeobfString = Execute( $g_as_ObfStrings[$i] ) $g_s_DeobfString = StringReplace( $g_s_DeobfString, '"', '""' ) $g_s_DeobfString = StringReplace( $g_s_DeobfString, @CRLF, '" & @CRLF &"' ) $g_s_DeobfString = StringReplace( $g_s_DeobfString, @CR, '" & @CR &"' ) $g_s_DeobfString = StringReplace( $g_s_DeobfString, @LF, '" & @LF &"' ) $g_s_DeobfString = '"' & $g_s_DeobfString & '"' $g_as_Src[$i_Str] = StringReplace( $g_as_Src[$i_Str], $g_as_ObfStrings[$i], $g_s_DeobfString, 1 ) Next Next Until Not $g_i_RegExpResultsExists $g_s_Src = "" For $i_Str = 1 To $g_as_Src[0] $g_s_Src &= $g_as_Src[$i_Str] & @CRLF Next Global $g_s_DeobfFileName $g_s_DeobfFileName = StringRegExpReplace( $g_s_FileName, '^(?:.*\\)([^\\]*?)(?:\.[^.]+)?$', '\1' ) $g_s_DeobfFileName &= "_deobfuscate_" Global $g_i_DeobfFilesCount $g_i_DeobfFilesCount = 0 While FileExists( $g_s_DeobfFileName & $g_i_DeobfFilesCount & ".au3" ) $g_i_DeobfFilesCount += 1 WEnd $g_s_DeobfFileName &= $g_i_DeobfFilesCount & ".au3" FileWrite( $g_s_DeobfFileName, $g_s_Src )
|
 Отправлено: 12-Mar-2019 16:13
(after 1 hour 44 minutes)
nikzzzz
  - Longevity: 10 years
- Posts: 3114
- REPUTATION:127[+] [-]
|
Gemostarter,63353Интересно, кто-нибудь рискнёт теперь выложить в теме обфускатор такого типа? Деобфускатор, написан для личных целей, выкладываю как есть.#include <String.au3> #include <Array.au3> Global $sAu3Source = 'Source.au3' ;Исходник Global $sTblNm = '' ;Кодовая таблица ConsoleWrite('Pass 0' & @CRLF) Global $sRg = '' Global $iMax = 0 Global $sDelims = '' If $sTblNm <> '' Then ;Поиск ключа кодовой таблицы $sTbl = FileRead($sTblNm, 8192) For $iLen = 4 To 8 $iMax1 = $iMax $sDelims1 = $sDelims For $i = 1 To StringLen($sTbl) - $iLen - 1 $sDelims0 = StringMid($sTbl, $i, $iLen) If ($sDelims0 = '20') Or ($sDelims0 = '2020') Or ($sDelims0 = '202020') Then ContinueLoop $sDelims0 = '(?-i)' & $sDelims0 $iM = StringRegExp($sTbl, $sDelims0, 3, $i + $iLen) If @error Then ContinueLoop If UBound($iM) >= $iMax1 Then $iMax1 = UBound($iM) $sDelims1 = StringRight($sDelims0, $iLen) ConsoleWrite('?? : ' & $sDelims1 & @CRLF) EndIf Next If $iMax1 >= $iMax Then $iMax = $iMax1 $sDelims = $sDelims1 ConsoleWrite('++ : ' & $sDelims & @CRLF) Else ExitLoop EndIf Next ConsoleWrite('******** : ' & $sDelims & @CRLF) $asTbl = StringSplit(FileRead($sTblNm), $sDelims, 1) EndIf $sSrc = FileRead($sAu3Source) $asX = StringRegExp($sSrc, '#OnAutoItStartRegister\s*"(.+)_"', 1) If Not @error Then $sRg = $asX[0] ConsoleWrite('******** : ' & $sRg & @CRLF) $hf1 = FileOpen('Result.txt', 2 + 128) $hf = FileOpen('Result.au3', 2 + 128) FileWrite($hf, ConvXX1($sSrc)) FileClose($hf) FileClose($hf1) Func ConvXX1($sStr) Local $asX, $sRet = $sStr, $sX, $iPoint = 1 ConsoleWrite('Pass 1' & @CRLF) If $sRg <> '' Then While 1 $asX = StringRegExp($sRet, '(?i-s-m)((?<=[^0-9a-z_])(\$[0-9a-z_]+)\s*=\s*' & $sRg & '\(\$os\[([0-9]+)\]\)[\s,]*)', 1) If @error Then ExitLoop $iPoint = @extended $sRet = StringLeft($sRet, $iPoint - StringLen($asX[0]) - 1) & StringMid($sRet, $iPoint) $sRet = StringRegExpReplace($sRet, RegStr($asX[1]), "'" & RegStr1(Hex2Str($asTbl[$asX[2]])) & "'") WEnd $sRet = StringRegExpReplace($sRet, "Number\('\s*([0-9]+)\s*\'\)", '\1') EndIf ConsoleWrite('Pass 2' & @CRLF) $sRet = ConvXX2($sRet) While 1 $asX = StringRegExp($sRet, "(?i)(BinaryToString\(['""](0x[0-9a-f]+)['""]\s*,*\s*([0-9]+)\))", 1) If @error Then ExitLoop $iPoint = @extended $sRet = StringLeft($sRet, $iPoint - StringLen($asX[0]) - 1) & "'" & BinaryToString($asX[1], $asX[2]) & "'" & StringMid($sRet, $iPoint) FileWrite($hf1, BinaryToString($asX[1], $asX[2]) & @CRLF) WEnd ConsoleWrite('Pass 3' & @CRLF) While 1 $asX = StringRegExp($sRet, "(?i)(BinaryToString\(['""](0x[0-9a-f]+)['""]\))", 1) If @error Then ExitLoop $iPoint = @extended $sRet = StringLeft($sRet, $iPoint - StringLen($asX[0]) - 1) & "'" & BinaryToString($asX[1]) & "'" & StringMid($sRet, $iPoint) WEnd $sRet = StringRegExpReplace($sRet, "(?i)Execute\('\s*(@[a-z0-9_]+)\s*\'\)", '\1') $sRet = StringRegExpReplace($sRet, "(?i)(Global\s*)+", '\1') ConsoleWrite('**** Completed ****' & @CRLF) Return $sRet EndFunc ;==>ConvXX1 Func ConvXX2($sStr) Local $asX, $sRet = $sStr, $sX $asX = StringRegExp($sStr, '(?i)(Execute\s*\(\s*binaryToString\(\s*["'']\s*(0x.*)["'']\)\s*\))', 1) If @error Then SetError(1) Return $sRet EndIf $sX = StringStripWS(BinaryToString($asX[1]), 3) $sRet = StringReplace($sStr, $asX[0], $sX, 1, 1) SetError(0) Return ConvXX2($sRet) EndFunc ;==>ConvXX2 Func Hex2Str($sStr) Local $sRet = '' For $x = 1 To StringLen($sStr) Step 2 $sRet &= Chr(Dec(StringMid($sStr, $x, 2))) Next Return $sRet EndFunc ;==>Hex2Str Func a2900403044($a2900403044) Local $a2900403044_ For $x = 1 To StringLen($a2900403044) Step 2 $a2900403044_ &= Chr(Dec(StringMid($a2900403044, $x, 2))) Next Return $a2900403044_ EndFunc ;==>a2900403044 Func RegStr($sStr) Return StringRegExpReplace($sStr, "[\\\.\(\)\{\}\*\+\?\$\[\]]", "\\\0") EndFunc ;==>RegStr Func RegStr1($sStr) Return StringRegExpReplace(StringRegExpReplace($sStr, "[\\\$]", "\\\0"), "'", "''") EndFunc ;==>RegStr1
|
Xemom1
  - Longevity: 10 years
- Posts: 862
- REPUTATION:88[+] [-]
|
nikzzzz, Результат одинаков, разница в кавычках:  DllStructSetData($323738352d3032, "Text", $323639372d3032) DllStructSetData($323735302d3032, "Mask", $323738362d3032) DllStructSetData($323735302d3032, "Item", $323635342d3032) DllStructSetData($323735302d3032, "SubItem", $313735302d3032) DllStructSetData($323735302d3032, "Image", $323738322d3032) DllStructSetData($323738352d3032, 'Text', $323639372d3032) DllStructSetData($323735302d3032, 'Mask', $323738362d3032) DllStructSetData($323735302d3032, 'Item', $323635342d3032) DllStructSetData($323735302d3032, 'SubItem', $313735302d3032) DllStructSetData($323735302d3032, 'Image', $323738322d3032)
|
 Отправлено: 12-Mar-2019 18:32
(after 1 hour 32 minutes)
nikzzzz
  - Longevity: 10 years
- Posts: 3114
- REPUTATION:127[+] [-]
|
Небольшая библиотека, написана под себя, может кому пригодится.#include-once ; #FUNCTION# ==================================================================================================================================== ; Name...........: _ParsePath ; Description ...: Разбор пути файла ; Syntax.........: _ParsePath($sFile, $sStr [, $iFlag = 1]) ; Parameters ....: $sFile - путь к файлу ; $sStr - шаблон, %d - диск, %p - путь, %n - имя, %x - расширение включая точку, %y - расширение без точки, %- удаляет последний символ, например "\" из пути. ; $iFlag - 1 - преобразует путь в полный, 2 - разворачивает переменные %var% , 4 - разворачивает переменные $var ; Author ........: Nikzzzz ; Examples ......: ConsoleWrite(_ParsePath("%SystemRoot%\system32\notepad.exe", "** %d%p%n%x **" & @crlf,7)) ; =============================================================================================================================================== Func _ParsePath($sFile, $sStr, $iFlag = 1) Local $i, $sRet = '', $sDrive = '', $sPath = '', $sName = '', $vTemp If $sFile = 'con:' Or $sFile = 'con' Then Return $sFile If BitAND($iFlag, 2) Then $vTemp = Opt('ExpandEnvStrings', 1) $sFile = $sFile Opt('ExpandEnvStrings', $vTemp) EndIf If BitAND($iFlag, 4) Then $vTemp = Opt('ExpandVarStrings', 1) $sFile = $sFile Opt('ExpandVarStrings', $vTemp) EndIf If BitAND($iFlag, 1) Then $vTemp = DllCall('kernel32.dll', 'dword', 'GetFullPathNameW', 'wstr', $sFile, 'dword', 4096, 'wstr', '', 'ptr', 0) If Not (@error Or Not $vTemp[0]) Then $sFile = $vTemp[3] EndIf If StringInStr($sFile, ':') Then $sDrive = _StringLeftStr($sFile, ':') & ':\' $sFile = _StringRightStr($sFile, ':') EndIf Local $sExt = '.' & _StringRightStr($sFile, '.', -1) If $sExt = '.' Then $sExt = '' If StringInStr($sExt, '\') Then $sExt = "" $sFile = StringTrimRight($sFile, StringLen($sExt)) If StringLeft($sFile, 1) = '\' Then $sFile = StringTrimLeft($sFile, 1) If StringInStr($sFile, '\') Then $sPath = _StringLeftStr($sFile, '\', -1) & '\' $sName = _StringRightStr($sFile, '\', -1) Else $sName = $sFile EndIf While StringLen($sStr) If StringLeft($sStr, 1) = '%' Then $sStr = StringTrimLeft($sStr, 1) Switch StringLeft($sStr, 1) Case 'd' $sRet &= $sDrive Case 'p' $sRet &= $sPath Case 'n' $sRet &= $sName Case 'x' $sRet &= $sExt Case 'y' $sRet &= StringTrimLeft($sExt, 1) Case '-' $sRet = StringTrimRight($sRet, 1) Case Else $sRet &= StringLeft($sStr, 1) EndSwitch Else $sRet &= StringLeft($sStr, 1) EndIf $sStr = StringTrimLeft($sStr, 1) WEnd Return SetError(0, 0, $sRet) EndFunc ;==>_ParsePath ; #FUNCTION# ==================================================================================================================================== ; Name...........: _StringLeftStr ; Description ...: Возвращает левую часть строки $Str относительно $sStr, $iFlag - номер вхождения подстроки $sStr, если он отрицательный, ищется с конца строки. ; Syntax.........: _StringLeftStr($Str, $sStr [, $iFlag = 1]) ; Author ........: Nikzzzz ; Examples ......: ConsoleWrite(_StringLeftStr("C:\Windows\system32\notepad.exe","\",-1) & @crlf) ; =============================================================================================================================================== Func _StringLeftStr($Str, $sStr, $iFlag = 1) If StringInStr($Str, $sStr, 0, $iFlag) Then Return StringLeft($Str, StringInStr($Str, $sStr, 0, $iFlag) - 1) EndIf Return $Str EndFunc ;==>_StringLeftStr ; #FUNCTION# ==================================================================================================================================== ; Name...........: _StringRightStr ; Description ...: Возвращает правую часть строки $Str относительно $sStr, $iFlag - номер вхождения подстроки $sStr, если он отрицательный, ищется с конца строки. ; Syntax.........: _StringRightStr($Str, $sStr [, $iFlag = 1]) ; Author ........: Nikzzzz ; Examples ......: ConsoleWrite(_StringRightStr("C:\Windows\system32\notepad.exe","\",-1) & @crlf) ; =============================================================================================================================================== Func _StringRightStr($Str, $sStr, $iFlag = 1) If StringInStr($Str, $sStr, 0, $iFlag) Then Return StringMid($Str, StringInStr($Str, $sStr, 0, $iFlag) + StringLen($sStr)) EndIf Return '' EndFunc ;==>_StringRightStr ; #FUNCTION# ==================================================================================================================================== ; Name...........: _EmptyName ; Description ...: Генерирует не занятое имя файлана на основе шаблона ; Syntax.........: _EmptyName($sFile) ; Author ........: Nikzzzz ; Examples ......: ConsoleWrite(_EmptyName("C:\Windows\system32\notepad.exe") & @crlf) ; =============================================================================================================================================== Func _EmptyName($sFile) If FileExists($sFile) = 0 Then Return $sFile Local $i = 1, $sFile1 While 1 $sFile1 = _ParsePath($sFile, '%d%p%n[' & $i & ']%x') If FileExists($sFile1) = 0 Then Return $sFile1 $i += 1 WEnd EndFunc ;==>_EmptyName ; #FUNCTION# ==================================================================================================================================== ; Name...........: _EscChar ; Description ...: Преобразует строку в формат регулярных выражений ; Syntax.........: _EscChar($sStr) ; Author ........: Nikzzzz ; Examples ......: ConsoleWrite(_EscChar("C:\Windows\system32\notepad.exe") & @crlf) ; =============================================================================================================================================== Func _EscChar($sStr) Return StringRegExpReplace($sStr, '[][{}()*+?.\\^$|]', '\\\0') EndFunc ;==>_EscChar ; #FUNCTION# ==================================================================================================================================== ; Name...........: _FileRead ; Description ...: Чтение файла ; Syntax.........: _FileRead($sFile, $iMode = 0) ; Author ........: Nikzzzz ; =============================================================================================================================================== Func _FileRead($sFile, $iMode = 0) Local $vData If $sFile = 'con:' Or $sFile = 'con' Then $vData = ConsoleRead() Else Local $hF = FileOpen($sFile, $iMode) Local $vData = FileRead($hF) FileClose($hF) EndIf Return $vData EndFunc ;==>_FileRead ; #FUNCTION# ==================================================================================================================================== ; Name...........: _FileRead ; Description ...: Запись в файл ; Syntax.........: _FileRead($sFile, $iMode = 0) ; Author ........: Nikzzzz ; =============================================================================================================================================== Func _FileWrite($sFile, $vData, $iMode = 2) If $sFile = 'con:' Or $sFile = 'con' Then ConsoleWrite($vData) Else Local $hF = FileOpen($sFile, $iMode) FileWrite($hF, $vData) FileClose($hF) EndIf EndFunc ;==>_FileWrite ; #FUNCTION# ==================================================================================================================================== ; Name...........: _StringRegExp5 ; Description ...: Возвращает первое вхождение регулярного выражения ; Syntax.........: _StringRegExp5($sStr, $sStr1, $iOffset = 1) ; Author ........: Nikzzzz ; =============================================================================================================================================== Func _StringRegExp5($sStr, $sStr1, $iOffset = 1) Local $sRet = '', $asStr = StringRegExp($sStr, '(?im-s)' & $sStr1, 1, $iOffset) If @error Then Return SetError(1, 0, '') Return SetError(0, 0, $asStr[0]) EndFunc ;==>_StringRegExp5 ; #FUNCTION# ==================================================================================================================================== ; Name...........: _StringRegExpReplaceEx ; Description ...: Расширенный вариант StringRegExpReplace, в качестве строки замену может использоваться функция ; Syntax.........: _StringRegExpReplaceEx($sStr, $sPattern, $sFunc, $sReplace [, $iCount = 0]) ; Author ........: Nikzzzz ; Examples ......: ;ConsoleWrite(_StringRegExpReplaceEx("a=2,b=3,c=4", ".*=(\d+).*=(\d+).*=(\d+)", "_Mult", "\1,\2,\3") & @CRLF) ;Func _Mult($sStr) ; Local $aStr = StringSplit($sStr, ",", 2) ; Return $aStr[0] & '*' & $aStr[1] & '*' & $aStr[2] & '=' & $aStr[0] * $aStr[1] * $aStr[2] ;EndFunc ;==>Mult ; =============================================================================================================================================== Func _StringRegExpReplaceEx($sStr, $sPattern, $sFunc, $sReplace, $iCount = 0) If $iCount = 0 Then $iCount = -1 Local $vTmp, $sRes = '', $iOffset, $i, $sSym, $sSym1, $sFlag = '', $sStr3, $sStr4 While 1 $vTmp = StringRegExp($sStr, $sPattern, 2) If @error Then ExitLoop $iOffset = @extended $sRes &= StringLeft($sStr, $iOffset - StringLen($vTmp[0]) - 1) $sFlag = '' $sStr3 = $sReplace $sStr4 = '' While StringLen($sStr3) $sSym = StringLeft($sStr3, 1) If $sFlag = '' Then Switch $sSym Case '\' $sFlag = $sSym Case Else $sStr4 &= $sSym EndSwitch Else Select Case StringInStr('0123456789', $sSym) If UBound($vTmp) > $sSym Then $sStr4 &= $vTmp[$sSym] EndIf Case Else $sStr4 &= $sSym EndSelect $sFlag = '' EndIf $sStr3 = StringTrimLeft($sStr3, 1) WEnd $sRes &= Call($sFunc, $sStr4) $sStr = StringMid($sStr, $iOffset) $iCount -= 1 If $iCount = 0 Then ExitLoop WEnd $sRes &= $sStr Return $sRes EndFunc ;==>_StringRegExpReplaceEx ; #INDEX# ======================================================================================================================= ; Title .........: FileFind ; AutoIt Version : 3.2.3++ ; Language ......: Русский ; Description ...: Поиск файлов, включая подкаталоги, синтаксис и возвращаемое значение в основном совпадают с FileFindFirstFile() ; и FileFindNextFile() ; в _FileFindFirstFile("filename" [,flag][,MaxLevel]) добавлены необязатенльные параметры ; flag=1 - поиск файлов ; flag=2 - поиск каталогов ; flag=4 - поиск по иаске регулярного выражения (перед именем файла "\" должжна удваиваться) ; flag=8 - _FileFindNextFile выводит полный путь, вместо относительного, по умолчанию flag=3 ; MaxLevel - максимальный уровень вложенности подкаталоглв, по умолчанию MaxLevel=9999 ; Author(s) .....: Nikzzzz ; =============================================================================================================================== Func _FileFindFirstFile($sFile, $iMode = 3, $iLevels = 9999) Local $avStack[6] $avStack[0] = 4 $avStack[2] = $iMode $avStack[3] = $iLevels If Not BitAND($iMode, 4) Then $avStack[1] = StringMid($sFile, StringInStr($sFile, "\", 0, -1) + 1) $avStack[1] = StringRegExpReplace($avStack[1], "[\\\(\)\{\}\+\$\.]", "\\\0") $avStack[1] = StringReplace($avStack[1], "*", ".*") $avStack[1] = StringReplace($avStack[1], "?", ".") $avStack[4] = StringLeft($sFile, StringInStr($sFile, "\", 0, -1) - 1) Else $avStack[1] = StringMid($sFile, StringInStr($sFile, "\\", 0, -1) + 2) $avStack[4] = StringLeft($sFile, StringInStr($sFile, "\\", 0, -1) - 1) EndIf $avStack[5] = FileFindFirstFile($avStack[4] & "\*.*") If $avStack[5] = -1 Then SetError(1) Return -1 EndIf Return $avStack EndFunc ;==>_FileFindFirstFile Func _FileFindNextFile(ByRef $avStack) Local $sFindFile, $sFindFileFulName While 1 $sFindFile = FileFindNextFile($avStack[$avStack[0] + 1]) If Not @error Then If @extended Then $sFindFileFulName = $avStack[$avStack[0]] & "\" & $sFindFile If ($avStack[0] - 4) / 2 < $avStack[3] Then $avStack[0] += 2 ReDim $avStack[$avStack[0] + 2] $avStack[$avStack[0]] = $sFindFileFulName $avStack[$avStack[0] + 1] = FileFindFirstFile($avStack[$avStack[0]] & "\*.*") EndIf If StringRegExpReplace($sFindFile, "(?i)" & $avStack[1], "", 1) = "" And BitAND($avStack[2], 2) Then If BitAND($avStack[2], 8) Then Return $sFindFileFulName Else Return StringMid($sFindFileFulName, StringLen($avStack[4]) + 2) EndIf EndIf ContinueLoop Else If StringRegExpReplace($sFindFile, "(?i)" & $avStack[1], "", 1) = "" And BitAND($avStack[2], 1) Then If BitAND($avStack[2], 8) Then Return $avStack[$avStack[0]] & "\" & $sFindFile Else Return StringMid($avStack[$avStack[0]] & "\" & $sFindFile, StringLen($avStack[4]) + 2) EndIf EndIf ContinueLoop EndIf Else If $avStack[0] = 4 Then SetError(-1) Return "" Else FileClose($avStack[$avStack[0] + 1]) $avStack[0] -= 2 ReDim $avStack[$avStack[0] + 2] EndIf EndIf WEnd EndFunc ;==>_FileFindNextFile Func _FileFindClose(ByRef $avStack) Local $iRetVaue While $avStack[0] >= 4 $iRetVaue = FileClose($avStack[$avStack[0] + 1]) $avStack[0] -= 2 WEnd ReDim $avStack[1] Return $iRetVaue EndFunc ;==>_FileFindClose
|
Xemom1
  - Longevity: 10 years
- Posts: 862
- REPUTATION:88[+] [-]
|
Попробовал перевести от китайцев. Install и backup Windows: https://yadi.sk/d/XX9ha2cLzUiuUA Хотелось бы сделать поиск по маске: install*.wim,esd,swm
|
AZJIO
  - Longevity: 7 years 2 months
- Posts: 1321
- REPUTATION:127[+] [-]
|
Xemom1, Melda включил в поиск возможность использовать в качестве маски регулярное выражение, впрочем как и я но на старой версии 3.3.8.1. Тогда поиск заключается лишь правильном рег.выре (install.*?\.wim|.*?\.(esd|swm))#include <Array.au3> ; для _ArrayDisplay #include <FileOperations.au3> $timer = TimerInit() $aFileList = _FO_FileSearch('D:', '(install.*?\.wim|.*?\.(?:esd|swm))', True, 125, 1, 1, 3) If @error Then MsgBox(0, 'Сообщение', @error) $timer = Round(TimerDiff($timer) / 1000, 2) & ' сек' _ArrayDisplay($aFileList, $timer & ' - время поиска') FileConstants.au3 для 3.3.8.1 (на 3.3.14.3 работать не будет) кстати, для адаптации регвыров, чтобы старые работали на новой версии без переписывания всего вроде сказали надо в начале каждого регвыра поставить (CRLF), то есть обозначить перенос строк 2-мя символами, так как сейчас он является комбинацией из 3-х вариантов CRLF, CR, LF. Это надо делать кончено же в исходнике, а не в поисковой строке. Без этого моя UDF возвращает файлы с переносом строк на конце, с CR
|
Current time is: 28-Apr 04:56
All times are UTC + 3
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|