1 (изменено: sanny0112, 2017-02-25 13:58:51)

Тема: SAMP: ESET Nod32 принимает код за вредоносный

По мнению антивируса ESET Nod32 следующий участок кода содержит угрозу "Win32/AHK.BX".

waitForSingleObject(hThread, dwMilliseconds) {
    if(!hThread) {
        ErrorLevel := ERROR_INVALID_HANDLE
        return 0
    }
    
    dwRet := DllCall(    "WaitForSingleObject"
                        , "UInt", hThread
                        , "UInt", dwMilliseconds
                        , "UInt")
    if(dwRet == 0xFFFFFFFF) {
        ErrorLEvel := ERROR_WAIT_FOR_OBJECT
        return 0
    }
    
    ErrorLevel := ERROR_OK
    return dwRet
}

readMem(hProcess, dwAddress, dwLen=4, type="UInt") {
    if(!hProcess) {
        ErrorLevel := ERROR_INVALID_HANDLE
        return 0
    }
    
    VarSetCapacity(dwRead, dwLen)
    dwRet := DllCall(    "ReadProcessMemory"
                        , "UInt",  hProcess
                        , "UInt",  dwAddress
                        , "Str",   dwRead
                        , "UInt",  dwLen
                        , "UInt*", 0)
    if(dwRet == 0) {
        ErrorLevel := ERROR_READ_MEMORY
        return 0
    }
    
    ErrorLevel := ERROR_OK
    return NumGet(dwRead, 0, type)
}

callWithParams(hProcess, dwFunc, aParams, bCleanupStack = true) {
    if(!hProcess) {
        ErrorLevel := ERROR_INVALID_HANDLE
        return false
    }
    validParams := 0
    
    i := aParams.MaxIndex()
    
    ;         i * PUSH + CALL + RETN
    dwLen := i * 5    + 5    + 1
    if(bCleanupStack)
        dwLen += 3
    VarSetCapacity(injectData, i * 5    + 5       + 3       + 1, 0)
    
    i_ := 1
    while(i > 0) {
        if(aParams[i][1] != "") {
            dwMemAddress := 0x0
            if(aParams[i][1] == "p") {
                dwMemAddress := aParams[i][2]
            } else if(aParams[i][1] == "s") {
                if(i_>3)
                    return false
                dwMemAddress := pParam%i_%
                writeString(hProcess, dwMemAddress, aParams[i][2])
                if(ErrorLevel)
                    return false
                i_ += 1
            } else if(aParams[i][1] == "i") {
                dwMemAddress := aParams[i][2]
            } else {
                return false
            }
            NumPut(0x68, injectData, validParams * 5, "UChar")
            NumPut(dwMemAddress, injectData, validParams * 5 + 1, "UInt")
            validParams += 1
        }
        i -= 1
    }
    
    offset := dwFunc - ( pInjectFunc + validParams * 5 + 5 )
    NumPut(0xE8, injectData, validParams * 5, "UChar")
    NumPut(offset, injectData, validParams * 5 + 1, "Int")
    
    if(bCleanupStack) {
        NumPut(0xC483, injectData, validParams * 5 + 5, "UShort")
        NumPut(validParams*4, injectData, validParams * 5 + 7, "UChar")
        
        NumPut(0xC3, injectData, validParams * 5 + 8, "UChar")
    } else {
        NumPut(0xC3, injectData, validParams * 5 + 5, "UChar")
    }
    
    writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
    if(ErrorLevel)
        return false
    
    hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
    if(ErrorLevel)
        return false
    
    waitForSingleObject(hThread, 0xFFFFFFFF)
    
    closeProcess(hThread)
    
    return true
}

virtualAllocEx(hProcess, dwSize, flAllocationType, flProtect) {
    if(!hProcess) {
        ErrorLevel := ERROR_INVALID_HANDLE
        return 0
    }
    
    dwRet := DllCall(    "VirtualAllocEx"
                        , "UInt", hProcess
                        , "UInt", 0
                        , "UInt", dwSize
                        , "UInt", flAllocationType
                        , "UInt", flProtect
                        , "UInt")
    if(dwRet == 0) {
        ErrorLEvel := ERROR_ALLOC_MEMORY
        return 0
    }
    
    ErrorLevel := ERROR_OK
    return dwRet
}

createRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, lpThreadId) {
    if(!hProcess) {
        ErrorLevel := ERROR_INVALID_HANDLE
        return 0
    }
    
    dwRet := DllCall(    "CreateRemoteThread"
                        , "UInt", hProcess
                        , "UInt", lpThreadAttributes
                        , "UInt", dwStackSize
                        , "UInt", lpStartAddress
                        , "UInt", lpParameter
                        , "UInt", dwCreationFlags
                        , "UInt", lpThreadId
                        , "UInt")
    if(dwRet == 0) {
        ErrorLEvel := ERROR_ALLOC_MEMORY
        return 0
    }
    
    ErrorLevel := ERROR_OK
    return dwRet
}

Все это приводит к удалению всех скриптов, содержащих данный участок кода. Как не прибегая к удалению/выведению из работоспособности данного кода устранить проблему?
P.S. Для проверки использовал сайт virustotal

2 (изменено: stealzy, 2017-02-25 13:27:08)

Re: SAMP: ESET Nod32 принимает код за вредоносный

Любопытный код, неясно для каких целей вы его используете?
Возможно это можно сделать другим путем.
По теме вопроса - удалить антивирус, конечно. Уже лет пять без антивируса сам и года три человек, которому один раз настроил и забыл — ни разу ничего не ловили.

Win7x64, AutoHotkey_L v1.1.24

3

Re: SAMP: ESET Nod32 принимает код за вредоносный

stealzy, данный код - часть SAMP.ahk, используется в качестве инклуда для gta sa-mp

4 (изменено: stealzy, 2017-02-25 13:31:26)

Re: SAMP: ESET Nod32 принимает код за вредоносный

Ну, тогда вы ошиблись веткой форума — вам в Games.
И вообще, проблемы антивирусов - это проблемы антивирусов,
почему вы на нашем форуме пишете, а не eset-овском, не понимаю.

Win7x64, AutoHotkey_L v1.1.24

5

Re: SAMP: ESET Nod32 принимает код за вредоносный

Код, по всей видимости, используется для внедрения dll в чужой процесс, так что реакция антивируса не удивительна.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

6

Re: SAMP: ESET Nod32 принимает код за вредоносный

Интересно, при чём тут скомпилированность скрипта. Код ведь всё равно в виде текста.

7

Re: SAMP: ESET Nod32 принимает код за вредоносный

У меня drWeb аналогично на подобный код срабатывает только в скомпилированном скрипте.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

8 (изменено: stealzy, 2017-02-25 14:22:57)

Re: SAMP: ESET Nod32 принимает код за вредоносный

YMP, teadrinker антивирус при сканировании "запускает" исп.файл в своей вирт.машине.
Окружающие файлы в вирт.машину скорее всего не попадают (если мы говорим про одноименный с интерпретатором файл в той же директории).
Очевидно, что интерпретатор ahk при запуске всего лишь открывает справку.
К тому же, его сигнатуры(хеш) уже есть в БД а-ля VirusTotal.

Win7x64, AutoHotkey_L v1.1.24

9

Re: SAMP: ESET Nod32 принимает код за вредоносный

Для проверки использовал сайт virustotal

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

10

Re: SAMP: ESET Nod32 принимает код за вредоносный

Тема перенесена по принадлежности. Заголовок отредактирован.