Что нового

[Ошибки] Как избавиться от ошибки "Autoit line-1"

cool-on

Новичок
Сообщения
6
Репутация
0
Помогите пожалуйста. Я в Autoit не соображаю. Каждый раз при загрузке системы (ХР) выскакивает ошибка "Autoit line-1: Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded." я уже и в гугле искал ответы, но ничего не помогло. :( Подскажите что делать...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: [Ошибки] Как избавиться от ошибки

Предупреждение
Переименуй тему так, чтобы глядя на нее можно было понять в чем проблема, без необходимости заглядывать внутрь.

А по существу, у тебя в автозагрузке сидит скомпилированный скрипт (exe файл), который имеет в своем коде ошибку связанную с неправильным использованием массивов. убери его оттуда.
 
Автор
C

cool-on

Новичок
Сообщения
6
Репутация
0
я с автозапуска все проги поубирал, кроме антивируса... не помогло.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
это очень странно, т.к. другой причины я не вижу. попробуй зайти в безопасном режиме и там посмотреть автозагрузку
выложи сюда содержимое следующих разделов
Код:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
cool-on
Я бы исследовал пути автозапуска либо с помощью системной утилиты "msconfig", либо с помощью утилиты "autoruns", входящей в комплект утилит "Sysinternals"...
 
Автор
C

cool-on

Новичок
Сообщения
6
Репутация
0
HKCU: 1)имя- (по умолчанию), тип- reg_sz, (значение не присвоино) ; 2) "RocketDock", тип- reg_sz.
HKLM: 1) (по умолчанию),тип- reg_sz ,(значение не присвоино); 2) "avast!",тип- reg_sz.
А через "msconfig"- стоят две проги (антивирь и панель "RocketDock"). Всё отключал- не помогает. Наверно проще виндовс переустановить...
 

ynbIpb

Скриптер
Сообщения
399
Репутация
109
это просто вирус, написанный на автоите. Покажи список процессов при НЕзакрытой ошибке.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Переустанавливать Windows из-за такой проблемы - это не серъёзно.

Скачай Process Explorer http://technet.microsoft.com/ru-ru/sysinternals/bb896653.aspx
Выйди из системы и зайди снова (ну или перезагрузка)
Когда появится ошибка - не нажимай Ок
Запусти Process Explorer
Сделай скриншот, на котором видны все процессы.
Скинь его сюда.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
хм. если это вирус, но при этом его нет в списке автозагрузки, то могу предположить только следующее
запуск компа - запуск вируса из автозагрузки - удаление себя из автозагрузки
как следствие отсутствие вируса при просмотре списка программ. а при выключении
запись себя в автозагрузки - выключение. чтобы все повторялось по кругу.
но все равно, кривоватенький вирус получается, если в нем ошибки ;D
 

SyDr

Сидра
Сообщения
651
Репутация
158
После ошибки AutoIt автоматически завершает выполнение скрипта, а посему такого быть не может.
msconfig показывает далеко не всю информацию о автоматически запускаемых программах.
http://technet.microsoft.com/ru-ru/sysinternals/bb963902.aspx
 

ynbIpb

Скриптер
Сообщения
399
Репутация
109
вот именно что в винде очень много способов автозагрузки.
скриншот процессов в студию. я даже подозреваю какой это: csrcs.exe, очень популярен, размножается через флешки.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
SyDr [?]
а посему такого быть не может.
если это адресовано мне, то могу предложить не быть столь категоричным :smile:
AutoIt завершит скрипт после ошибки, но не отменит уже сделанные операции.
но тем не менее, пока все отписавшиеся лишь гадают на кофейной гуще. не известно даже что это, не говоря про то, как оно работает. так что подождем автора :smile:
 
Автор
C

cool-on

Новичок
Сообщения
6
Репутация
0
Всем огромное СПАСИБО! Я уже не выдержал и переустановил винду. Теперь не ошибки, не "головняка". Ещё раз, спасибо. :smile:
 

SyDr

Сидра
Сообщения
651
Репутация
158
Зря. Если ещё раз столкнёшься с этой проблемой - опять будешь винду переустанавливать? А не проще потратить один-два дня и больше никогда с этой проблемой не встречаться?
 
Автор
C

cool-on

Новичок
Сообщения
6
Репутация
0
за 5 лет никогда с такой ошибкой не сталкивался. Надеюсь, что ещё столько же лет её видеть не буду.
 
Автор
C

cool-on

Новичок
Сообщения
6
Репутация
0
ynbIpb сказал(а):
вот именно что в винде очень много способов автозагрузки.
скриншот процессов в студию. я даже подозреваю какой это: csrcs.exe, очень популярен, размножается через флешки.
Ты был прав! я нашёл где он сидит (снова подцепил его с диска с прогами). Щя я его порву... :laugh:
 

ynbIpb

Скриптер
Сообщения
399
Репутация
109
Именно csrcs.exe ?
Я его даже пытался декомпилировать, но там прошлись обфускатором и код сплошная каша. Похож на бота, отстукивается куда в интернет.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Если эта зараза написана на AutoIt, то ее легко можно вычислить по классу окна "AutoIt v3" (а из этого получим путь к исполняемому файлу), без него AutoIt - не AutoIt. Изменить класс автор вряд ли сможет, а избавиться от этого окна невозможно (я думаю). Ну а дальше убиваем в реестре все ссылки на этот файл и сам файл (если конечно это "вирус").

Вот простой скрипт для обнаружения всех запущенных AutoIt программ.

Код:
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $Path, $Data = WinList('[CLASS:AutoIt v3]')

If IsArray($Data) Then
	For $i = 1 To $Data[0][0]
		$Path = _WinAPI_GetModuleFileNameEx(WinGetProcess($Data[$i][1]))
		If $Path <> @AutoItExe Then
			MsgBox(48, 'Обнаружен AutoIt :)', $Path)
		EndIf
	Next
EndIf


EXE - скомпилированная версия
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 470
Репутация
2 401
Yashied [?]
Вот простой скрипт для обнаружения всех запущенных AutoIt программ
На самом деле это может вернуть не только AutoIt'овские программы, т.к класс окна можно имитировать.
Вот ещё один пример, основываясь на ресурсе Exe-файла CompiledScript:

Код:
#include <Array.au3>

$aAutoItProcList = _ProcessListEx("CompiledScript", "AutoIt", 0)

If @error Then
	MsgBox(48, "_ProcessListEx - Error", StringFormat("There was an error to get ProcessList (@error = %i)", @error))
Else
	_ArrayDisplay($aAutoItProcList, "_ProcessListEx Demo (AutoIt Processes)")
EndIf

;===============================================================================
;
; Function Name:  		   _ProcessListEx()
;
; Function Description:    Gets Process List with extended info, plus can retrieve only a processes with specific resources strings.
;
; Parameter(s):            $sResourceName [Optional] - Resource name of the process filename, i.e. "CompiledScript".
;                          $sInResString [Optional] - String to check in the resource name.
;                          $iWholeWord [Optional] - Defines if the $sInResString will be compared as whole string (default is 1).
;
; Requirement(s):          None.
;
; Return Value(s):         On Success -  Return 2-dimentional array, where:
;                                                                   $aRet_List[0][0] = Total processes (array elements).
;                                                                   $aRet_List[N][0] = Process Name.
;                                                                   $aRet_List[N][1] = PID (Process ID).
;                                                                   $aRet_List[N][2] = Process File Path.
;                          On Failure -  Return '' (empty string) and set @error to:
;                                                                   1 - Unable to Open Kernel32.dll.
;                                                                   2 - Unable to Open Psapi.dll.
;                                                                   3 - No Processes Found.
;
; Author(s):               G.Sandler (a.k.a MrCreatoR) - CreatoR's Lab (http://creator-lab.ucoz.ru)
;
;=====================================================================
Func _ProcessListEx($sResourceName="", $sInResString="", $iWholeWord=1)
	Local $aProcList = ProcessList()
	Local $hKernel32_Dll = DllOpen('Kernel32.dll'), $hPsapi_Dll = DllOpen('Psapi.dll')
	Local $aOpenProc, $aProcPath, $sFileVersion, $aRet_List[1][1]
	
	If $hKernel32_Dll = -1 Then Return SetError(1, 0, '')
	
	If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@SystemDir & '\Psapi.dll')
	If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@WindowsDir & '\Psapi.dll')
	If $hPsapi_Dll = -1 Then Return SetError(2, 0, '')
	
	Local $vStruct 		= DllStructCreate('int[1024]')
	Local $pStructPtr 	= DllStructGetPtr($vStruct)
	Local $iStructSize 	= DllStructGetSize($vStruct)
	
	For $i = 1 To UBound($aProcList)-1
		$aOpenProc = DllCall($hKernel32_Dll, 'hwnd', 'OpenProcess', _
			'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $aProcList[$i][1])
		
		If Not IsArray($aOpenProc) Or Not $aOpenProc[0] Then ContinueLoop
		
		DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _
			'hwnd', $aOpenProc[0], _
			'ptr', $pStructPtr, _
			'int', $iStructSize, _
			'int*', 0)
		
		$aProcPath = DllCall($hPsapi_Dll, 'int', 'GetModuleFileNameEx', _
			'hwnd', $aOpenProc[0], _
			'int', DllStructGetData($vStruct, 1), _
			'str', '', _
			'int', 2048)
		
		DllCall($hKernel32_Dll, 'int', 'CloseHandle', 'int', $aOpenProc[0])
		
		If Not IsArray($aProcPath) Or StringLen($aProcPath[3]) = 0 Then ContinueLoop
		
		$sFileVersion = FileGetVersion($aProcPath[3], $sResourceName)
		
		If $sResourceName = "" Or $sFileVersion = $sInResString Or _
			($iWholeWord = 0 And StringInStr($sFileVersion, $sInResString)) Then
			
			$aRet_List[0][0] += 1
			ReDim $aRet_List[$aRet_List[0][0]+1][3]
			$aRet_List[$aRet_List[0][0]][0] = $aProcList[$i][0] 	;Process Name
			$aRet_List[$aRet_List[0][0]][1] = $aProcList[$i][1] 	;PID (Process ID)
			$aRet_List[$aRet_List[0][0]][2] = $aProcPath[3] 		;Process File Path
		EndIf
	Next
	
	DllClose($hKernel32_Dll)
	DllClose($hPsapi_Dll)
	
	If $aRet_List[0][0] < 1 Then Return SetError(3, 0, '')
	Return $aRet_List
EndFunc


Хотя это тоже естественно можно обойти.
 

e-Mike

Новичок
Сообщения
15
Репутация
1
Проще всего посмотреть в ветке реестра Winlogon, вирус обычно прописывается хвостом к параметру Shell или Userinit.
Или взять прогу Hijackthis и изучить все, что подгружается с системой.
 
Верх