Гайд Делаем Antistealer с AHK и Windows Firewall Control

index

Известный
Автор темы
127
83
На создание данного скрипта меня натолкнула эта тема.
Вкратце, там выделен тезис о том, что Rapogliff (а, вероятно, и не только он) обходит AS от Darkpixel'я и цепляется к левым сайтам. Все эти действия, естественно, проходят от процесса gta_sa.exe.
Взлом жопы предлагал кинуть в hosts некоторые домены, к которым цепляется Rapogliff, мы же немного улучшим этот способ, динамически создавая для процесса gta_sa.exe вайтлист только из тех IP'шников, к которым он подключается для игры.

Windows Firewall Control. Неплохая оболочка для стандартного виндоского брандмауэра, позволяющая быстро настроить вайт и блек листы программ (посредством правил брандмауэра), которым можно обращаться в сеть. Но речь сейчас не о ней (все гуглится), а об одном из режимов ее работы, когда доступ в сеть имеют только программы из вайтлиста.
Всплывающее окно при попытке подключения программы, которой нет в вайт/блеклисте.
upload_2019-6-13_16-8-46.png

Главное окно
upload_2019-6-13_16-10-8.png


Исходные данные: gta_sa.exe не должно быть в блек или вайтлисте.
Описание работы: только для internal стиллеров, с external и сам WFC справится. Среди всех процесов gta_sa.exe смотрим ip сервера samp, к которому он подключается (аргумент -h командной строки) и добавляем в вайтлист правило с gta_sa.exe и соответствующим ip адресом. При закрытии процесса gta соответствующее правило удаляется.
Особенности: скрипт должен быть запущен с правами администратора. Скрипты/плагины gta'шки не смогут удалить/модифицировать правила файрволла, т.к. на это требуются привелегии администратора => они не смогут подключиться никуда кроме ip-адресов игровых серверов samp, на которые вы в данный момент зашли.
Да, можно было бы создавать правила не через powershell, а через COM объекты и брать путь к gta_sa.exe из запущенного exe'шника, а не из реестра, но так как реализовано - хоть и медленнее, но проще и вероятность ошибки в данных моментах довольно мала.

AutoHotKey:
#SingleInstance force
#Persistent
SetBatchLines -1
global prevIPs := []
global mainrulename := "ahk_antistealer_autocreated_rule"
OnExit("ExitFunc") ; Удалит все созданные за время работы правила
SetTimer, mainloop, 1000
return

mainloop()
{
    currentIPs := []
    for proc in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
        if ( proc.name == "gta_sa.exe" && RegExMatch(proc.commandline, "-h (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", ip) )
            currentIPs.push(ip1)
 
    for k, v in getObjDifference(currentIPs, prevIPs)
    {
        if ( v.action == "del" )
            deleteFirewallRule("'" mainrulename " " v.value "'")
        else if ( v.action == "add" )
            addFirewallRule("'" mainrulename " " v.value "'", v.value, sampGetGamePath() "\gta_sa.exe")
    }
 
    prevIPs := currentIPs.clone()
}

ExitFunc(ExitReason, ExitCode)
{
    SetTimer, mainloop, Off
    for k, v in prevIPs
        deleteFirewallRule("'" mainrulename " " v "'")
    return 0
}

sampGetGamePath()
{
    RegRead, exePath, HKEY_CURRENT_USER\Software\SAMP, gta_sa_exe
    if ( !exePath )
    {
        ; throw Exception("Not found path to gta_sa.exe.")
        return ""
    }
    if ( RegExMatch(exePath, "(.+)\\gta_sa.exe", folderPath) )
        return folderPath1
    else
    {
        ; throw Exception("Unknown error")
        return ""
    }
}

getObjDifference(current, prev)
{
    result := []
    for k, v in current
        if ( !isInObj(prev, v) )
            result.push({"action":"add", "value":v})
    for k, v in prev
        if ( !isInObj(current, v) )
            result.push({"action":"del", "value":v})
    return result
}

isInObj(ByRef obj, needle)
{
    if ( !IsObject(obj) )
        return false
    for k, v in obj
        if ( v == needle )
            return true
    return false
}

deleteFirewallRule(rulename)
{
    psScript := "Remove-NetFirewallRule -DisplayName " rulename
    runPowershellCmd(psScript)
}

addFirewallRule(rulename, ip := "", programPath := "", action := "Allow", Direction := "Outbound")
{
    psScript := "New-NetFirewallRule -DisplayName " rulename (programPath ? " -Program '" programPath "'" : "") " -Action " action " -Direction " Direction (ip ? " -RemoteAddress " ip : "")
    runPowershellCmd(psScript)
}

runPowershellCmd(cmd)
{
    Run PowerShell.exe -Command & {%cmd%},, hide
}
 
Последнее редактирование:

Smer4

Известный
424
51
Internal - есть .exe, стиллер на ahk(который скомпилирован) работает. Или я чего-то не понимаю?
 

index

Известный
Автор темы
127
83
Internal - есть .exe, стиллер на ahk(который скомпилирован) работает. Или я чего-то не понимаю?
Internal исполняется в целевом процессе. Пример: .sf/.dll/.asi. External исполняется в своем процессе, читай .exe.
Данный скрипт манипулирует правилами Firewall'a таким образом, что процессы GTA могут обращаться только к игровым серверам => internal стиллеры не смогут подключиться к своим хостингам. Так же не будут работать привязки и обновления.
.exe стиллер так же не будет иметь никакого эффекта, т.к. ему не даст обратиться в сеть WFC. Разве, что сам пользователь добавит его в вайтлист программ, которым разрешен доступ в интернет.
 

Smer4

Известный
424
51
не будет иметь никакого эффектане будет иметь никакого эффекта
John_Gauvara:[176.32.36.43:7777]":2***0901, на хост пришел лог без проблем мб потому что ахк не привязан к процессу гта, хз.
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    972 байт · Просмотры: 190

index

Известный
Автор темы
127
83
John_Gauvara:[176.32.36.43:7777]":2***0901, на хост пришел лог без проблем мб потому что ахк не привязан к процессу гта, хз.
Требуется установить Windows Firewall Control (отдельная программа, если кто не понял). Его в средний режим работы. В таком случае при попытке подключения от любого .exe мы видим такое всплывающее окно
31867
Без WFC этот скрипт не имеет смысла.
 
  • Нравится
Реакции: Smer4