Специалисты компании SentinelLABS в ходе ретроспективного анализа выявили ранее неизвестный вредоносный фреймворк для цифрового саботажа, основные компоненты которого были скомпилированы ещё в 2005 году. Операция получила условное обозначение fast16. Эта находка заставляет пересмотреть историю развития кибероружия: комплекс предназначался для скрытого вмешательства в работу высокоточного инженерного и научного программного обеспечения, используемого в атомной, оборонной и аэрокосмической отраслях. По сути, fast16 как минимум на пять лет опережает знаменитый Stuxnet и является первой документированной операцией подобного рода.
Описание
Фреймворк состоит из двух ключевых модулей: носителя svcmgmt.exe и драйвера ядра fast16.sys. Внешне svcmgmt.exe напоминает обычную служебную утилиту для Windows 2000 или XP, однако внутри него скрывается полноценный интерпретатор языка Lua 5.0, а также зашифрованные байт-коды и дополнительные полезные нагрузки. При первом запуске программа устанавливает себя как службу SvcMgmt, затем расшифровывает и выполняет Lua-сценарии, которые управляют распространением и активацией саботажного модуля. Использование встроенной виртуальной машины Lua для модульности и расширяемости стало характерной чертой многих продвинутых фреймворков следующих поколений - Flame, Project Sauron и других, но fast16 применил этот подход на три года раньше.
Драйвер fast16.sys, собранный в июле 2005 года, представляет собой загрузочный компонент файловой системы. Он загружается на самых ранних этапах старта системы, ещё до инициализации большинства служб, и внедряется в стек обработки запросов ввода-вывода поверх каждого активного тома (NTFS, FAT и сетевых дисков). Основная задача драйвера - перехватывать чтение исполняемых файлов с диска и модифицировать их код в оперативной памяти. При этом модификация происходит только для тех файлов, которые удовлетворяют двум условиям: расширение .EXE и наличие после заголовков PE-секции строки, начинающейся с "Intel". Это означает, что злоумышленники нацеливались на программы, скомпилированные с помощью Intel C/C++ компилятора.
Исследователи из SentinelLABS в своём отчёте детально разобрали механизм патчинга. Драйвер содержит набор из 101 правила для поиска и замены фрагментов машинного кода. Большинство правил отвечают за перехват управления, но одно из них выделяется: это крупный блок инструкций для блока операций с плавающей запятой, который выполняет независимые математические вычисления. Скопировав этот код, специалисты выяснили, что он предназначен для искажения численных результатов: он изменяет значения в трёх внутренних массивах, передаваемых в функцию. Таким образом, fast16 не просто шпионит или крадёт данные, а целенаправленно портит результаты расчётов, внося в них контролируемые, но незаметные ошибки.
Подтвердить эту гипотезу удалось с помощью поиска по коллекциям ПО середины 2000-х. Драйверные сигнатуры совпали с несколькими пакетами инженерного моделирования. Среди потенциальных целей - LS-DYNA 970 (программа для расчёта динамики ударов, взрывов и краш-тестов, используемая в автомобильной и оборонной промышленности), китайский архитектурно-строительный комплекс PKPM и португальская гидродинамическая платформа MOHID. LS-DYNA, по открытым данным, применялась в иранской ядерной программе для моделирования взрывчатых веществ. Если злоумышленники атаковали установки с таким ПО, они могли незаметно подрывать достоверность научных исследований или инженерных проектов, что потенциально вело к катастрофическим последствиям.
Архитектура fast16 предусматривала не только единичный саботаж, но и масштабное распространение. Модуль-носитель способен работать как "кластерная бомба", запуская так называемые "wormlets" - небольшие червеобразные компоненты. Один из найденных wormlet’ов использует стандартные механизмы Windows (службы, файловые ресурсы) для копирования себя на другие компьютеры в сети и запуска их через слабые или стандартные пароли администратора. Это позволяло развернуть вредоносный драйвер на всех машинах, участвующих в расчётах, чтобы исключить возможность проверки результатов на независимом чистом компьютере.
Примечательной особенностью fast16 является его долгая скрытность. Исполняемый файл svcmgmt.exe загружался на VirusTotal почти десять лет назад, но до сих пор практически не детектируется антивирусами - только один движок распознаёт его как вредоносный, да и то с низкой уверенностью. В 2017 году название "fast16" всплыло в утечке ShadowBrokers, где фигурировал список драйверов, используемых АНБ для разрешения конфликтов между разными операциями. Рядом с fast16 стояла пометка "* Nothing to see here - carry on *". Найденная в svcmgmt.exe строка пути к PDB-файлу прямо связывает этот драйвер с утечкой, подтверждая его принадлежность к инструментарию государственного уровня.
Дополнительным указанием на происхождение служат артефакты в коде: строки вида @(#)par.h $Revision: 1.3 $, характерные для системы управления версиями SCCS - наследия Unix-среды 1970-1980-х годов. Разработчики fast16 явно работали в инфраструктуре, далёкой от стандартного Windows-программирования, что типично для засекреченных государственных проектов.
Обнаружение fast16 кардинально меняет представление о хронологии развития средств киберсаботажа. До сих пор Stuxnet считался первой целенаправленной атакой на физические объекты, однако fast16 доказывает, что подобные возможности были полностью отработаны и развёрнуты как минимум за пять лет до него. Сочетание скриптового движка для гибкости, узконаправленного таргетинга по компилятору, драйверного патчинга в памяти и механизма самораспространения представляет собой архитектуру, которую позже копировали многие более известные семьи вредоносного ПО. Fast16 оставался невидимым почти два десятилетия и теперь служит "недостающим звеном" в эволюции от ранних шпионских программ к полноценным диверсионным операциям.
Индикаторы компрометации
MD5
- 075b4aa105e728f2b659723e3f36c72c
- 0ff6abe0252d4f37a196a1231fae5f26
- 1d2f32c57ae2f2013f513d342925e972
- 2717b58246237b35d44ef2e49712d3a2
- 2740a703859cbd8b43425d4a2cacb5ec
- 410eddfc19de44249897986ecc8ac449
- 49a8934ccd34e2aaae6ea1e6a6313ffe
- af4461a149bfd2ba566f2abefe7dcde4
- cb66a4d52a30bfcd980fe50e7e3f73f0
- cf859f164870d113608a843e4a9600ab
- daea40562458fc7ae1adb812137d3d05
- dbe51eabebf9d4ef9581ef99844a2944
- e0c10106626711f287ff91c0d6314407
- ebff5b7d4c5becb8715009df596c5a91
- f4dbbb78979c1ee8a1523c77065e18a5
SHA1
- 145ef372c3e9c352eaaa53bb0893749163e49892
- 1ce1111702b765f5c4d09315ff1f0d914f7e5c70
- 2fa28ef1c6744bdc2021abd4048eefc777dccf22
- 3ce5b358c2ddd116ac9582efbb38354809999cb5
- 586edef41c3b3fba87bf0f0346c7e402f86fc11e
- 650fc6b3e4f62ecdc1ec5728f36bb46ba0f74d05
- 675cb83cec5f25ebbe8d9f90dea3d836fcb1c234
- 829f8be65dfe159d2b0dc7ee7a61a017acb54b7b
- 92e9dcaf7249110047ef121b7586c81d4b8cb4e5
- 952ed694b60c34ba12df9d392269eae3a4f11be4
- 9e089a733fb2740c0e408b2a25d8f5a451584cf6
- ca665b59bc590292f94c23e04fa458f90d7b20c9
- d475ace24b9aedebf431efc68f9db32d5ae761bd
- de584703c78a60a56028f9834086facd1401b355
- e6018cd482c012de8b69c64dc3165337bc121b86
SHA256
- 06361562cc53d759fb5a4c2b7aac348e4d23fe59be3b2871b14678365283ca47
- 07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529
- 09ca719e06a526f70aadf34fb66b136ed20f923776e6b33a33a9059ef674da22
- 37414d9ca87a132ec5081f3e7590d04498237746f9a7479c6b443accee17a062
- 5966513a12a5601b262c4ee4d3e32091feb05b666951d06431c30a8cece83010
- 66fe485f29a6405265756aaf7f822b9ceb56e108afabd414ee222ee9657dd7e2
- 7e00030a35504de5c0d16020aa40cbaf5d36561e0716feb8f73235579a7b0909
- 8b018452fdd64c346af4d97da420681e2e0b55b8c9ce2b8de75e330993b759a0
- 8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9
- 9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525
- aeaa389453f04a9e79ff6c8b7b66db7b65d4aaffc6cac0bd7957257a30468e33
- bd04715c5c43c862c38a4ad6c2167ad082a352881e04a35117af9bbfad8e5613
- c11a210cb98095422d0d33cbd4e9ecc86b95024f956ede812e17c97e79591cfa
- da2b170994031477091be89c8835ff9db1a5304f3f2f25344654f44d0430ced1
- e775049d1ecf68dee870f1a5c36b2f3542d1182782eb497b8ccfd2309c400b3a
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | import "pe" rule apt_fast16_carrier { meta: author = "SentinelLABS/vk" date = "2025-04-07" description = "Catches fast16 carrier, its Lua payload, and plaintext variants" hash = "9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525" strings: $lua_magic = { 1B 4C 75 61 } //Lua bytecode magic //Decrypted strings $s1 = "build_wormlet_table" $s2 = "unpropagate" $s3 = "worm_install_failure_action" $s4 = "implant_install_failure_action" $s5 = "scm_wormlet_propagate_system" $s6 = "scm_wormlet_install" $s7 = "scm_wormlet_init" $s8 = "scm_copy_payload" $s9 = "get_logged_on_user" $s10 = "logged_on_program" $s11 = "phase_1_prop_delay" $s12 = "connotify_pipename" $s13 = "cndll_internal_name" $s14 = "connotify_provider_key" $s15 = "check_implant_reg_values" $s16 = "set_implant_reg_values" $s17 = "install_implant" $s18 = "implant_installed" $s19 = "implant_internal_name" $s20 = "implant_files" $s21 = "implant_owner" $s22 = "install_worm" $s23 = "start_worm" $s24 = "implant_install_failure_action" $s25 = "worm_install_failure_action" $s26 = "ok_to_propagate" $s27 = "no_firewall_check" $s28 = "scm_wormlet" $s29 = "implant_install_failure_action" $s30 = "worm_install_failure_action" //Encrypted strings $e1 = { 98 18 A1 94 24 E3 A2 4C 61 C8 AE 04 DC 4E 03 CD 0D 9D F0 } $e2 = { E8 76 53 6D D4 B9 6E 28 6C 5D C2 } $e3 = { 7D B7 14 73 F0 C0 4D 53 BB F7 0A 4A 3A 63 05 92 EC 0A 11 BC 22 59 99 05 72 05 19 } $e4 = { 88 5F 1B E4 45 56 75 4B A5 3D 19 0B 3F 30 5A 85 E2 BD D0 E7 1C 13 D0 1D BD D8 CF A1 88 DB } $e5 = { 88 1E 54 4E 00 C1 EF 79 AA AD 9F 50 27 B5 B8 4C 32 06 D2 7B 32 E3 AF D6 DC D2 BB 83 } $e6 = { 39 F9 BC E9 27 70 C4 3E 04 2A 7D E1 68 67 B7 ED D4 41 6A } $e7 = { 13 FC 24 20 1F 20 74 1B E5 5F 59 56 D7 61 3E BD } $e8 = { EF 94 49 63 33 41 62 F2 26 A6 48 DE 6D 7B A4 CF } $e9 = { 36 5F 5E E5 C1 1A 17 6A 4E B9 94 52 1B DC C6 60 CA C7 } $e10 = { B3 9C A3 F1 12 CC 52 74 34 5F 87 43 32 21 36 7B 2A } $rk1 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Symantec\\InstalledApps" $rk2 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Sygate Technologies, Inc.\\Sygate Personal Firewall" $rk3 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\TrendMicro\\PFW" $rk4 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Zone Labs\\TrueVector" $rk5 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\F-Secure" $rk6 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Network Ice\\BlackIce" $rk7 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\McAfee.com\\Personal Firewall" $rk8 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\ComputerAssociates\\eTrust EZ Armor" $rk9 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\RedCannon\\Fireball" $rk10 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Kerio\\Personal Firewall 4" $rk11 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\KasperskyLab\\InstalledProducts\\Kaspersky Anti-Hacker" $rk12 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Tiny Software\\Tiny Firewall" $rk13 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Look n Stop 2.05p2" $rk14 = "HKEY_CURRENT_USER\\SOFTWARE\\Soft4Ever" $rk15 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Norman Data Defense Systems" $rk16 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Agnitum\\Outpost Firewall" $rk17 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Panda Software\\Firewall" $rk18 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\InfoTeCS\\TermiNET" $c1 = { 86 3A D6 02 } // A crypto constant $c2 = { 01 E1 F5 05 } // A crypto constant $code1 = { 8B 00 // mov eax, [eax] 2D 2F 34 21 33 // sub eax, 3321342Fh } // Code to deobfuscate real storage container length $stor1 = { CC 00 00 00 05 00 00 00 66 69 6C 65 00 CD 00 00 00 } //Storage record with file string condition: ( uint16(0)==0x5a4d and filesize < 10MB and ( ( 3 of ($s*) ) or ( 12 of ($rk*) ) or ( any of ($e*) ) or ( all of ($c*) and @c2-@c1 < 0x100 ) or ( $code1 ) or ( $stor1 )) ) or ( $lua_magic and 7 of ($s*) ) } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | rule apt_fast16_driver { meta: author = "SentinelLABS/vk" last_modified = "2026-04-15" description = "Catches fast16 driver or related project files" hash = "07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529" strings: $a1 = "@(#)foo.c : " $a2 = "@(#)par.h : " $a3 = "@(#)pae.h : " $a4 = "@(#)fao.h : " $a5 = "@(#)uis.h : " $a6 = "@(#)ree.h : " $a7 = "@(#)fir.h : " $a8 = "@(#)fir.c : " $a9 = "@(#)par.h : " $a10 = "@(#)pae.h : " $a11 = "@(#)fao.h : " $a12 = "@(#)uis.h : " $a13 = "@(#)ree.h : " $a14 = "@(#)fir.h : " $a15 = "@(#)myy.h : " $a16 = "@(#)fic.h : " $a17 = "@(#)ree.h : " $a18 = "@(#)ree.c : " $dev1 = "\\Device\\fast16" $dev2 = "\\??\\fast16" $pdb1 = "C:\\buildy\\" $pdb2 = "driver\\fd\\i386\\fast16.pdb" $devtype = { 68 7C A5 00 00 } // push 0A57Ch ; DeviceType $api1 = {50 C6 45 D4 16 C6 45 D5 2B C6 45 D6 12 C6 45 D7 3F C6 45 D8 3F C6 45 D9 3C C6 45 DA 30 C6 45 DB 32 C6 45 DC 27 C6 45 DD 36 C6 45 DE 03 C6 45 DF 3C C6 45 E0 3C C6 45 E1 3F C6 45 E2 53 } // push xored "ExAllocatePool" $api2 = {C6 45 A8 16 C6 45 A9 2B C6 45 AA 12 C6 45 AB 3F C6 45 AC 3F C6 45 AD 3C C6 45 AE 30 C6 45 AF 32 C6 45 B0 27 C6 45 B1 36 C6 45 B2 03 C6 45 B3 3C C6 45 B4 3C C6 45 B5 3F C6 45 B6 04 C6 45 B7 3A C6 45 B8 27 C6 45 B9 3B C6 45 BA 07 C6 45 BB 32 C6 45 BC 34 C6 45 BD 53} // push xored "ExAllocatePoolWithTag" $api3 = {C6 45 E4 16 C6 45 E5 2B C6 45 E6 15 C6 45 E7 21 C6 45 E8 36 C6 45 E9 36 C6 45 EA 03 C6 45 EB 3C C6 45 EC 3C C6 45 ED 3F C6 45 EE 53} // push xored "ExFreePool" $api4 = {C6 45 C0 16 C6 45 C1 2B C6 45 C2 15 C6 45 C3 21 C6 45 C4 36 C6 45 C5 36 C6 45 C6 03 C6 45 C7 3C C6 45 C8 3C C6 45 C9 3F C6 45 CA 04 C6 45 CB 3A C6 45 CC 27 C6 45 CD 3B C6 45 CE 07 C6 45 CF 32 C6 45 D0 34 C6 45 D1 53} // push xored "ExFreePoolWithTag" condition: filesize < 10MB and ( uint16(0)==0x5a4d and ( ( 2 of ($pdb*) ) or ( $pdb1 and 1 of ($a*) ) or ( #devtype == 3 and pe.machine == pe.MACHINE_I386 and pe.subsystem == pe.SUBSYSTEM_NATIVE) or any of ($api*) or 2 of ($dev*))) or ( 6 of ($a*)) } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | rule clean_fast16_patchtarget { meta: author = "SentinelLABS/vk" last_modified = "2026-04-15" description = "Detects fast16 patch target software (most probably clean)" hash = "8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9" strings: $el0 = { 48 89 84 24 9C 00 00 00 4B 0F 8F 79 FF FF FF 00 } $el10 = { D8 E1 D9 5D FC D9 04 00 } $el12 = { 55 8B EC 83 EC 14 53 56 57 8B 3D ?? ?? ?? ?? 8B 0D 00 } $el13 = { 89 4D C8 8B FB 8B C8 00 } $el14 = { 8B 4C 24 0C 8B 01 83 F8 63 00 } $el16 = { 39 2D ?? ?? ?? ?? 0F 84 F4 00 00 00 8B 35 ?? ?? ?? ?? 2B 35 } $el2 = { 7C 02 89 C6 89 35 ?? ?? ?? ?? 89 B4 24 D0 } $el23 = { 83 3D ?? ?? ?? ?? 00 0F 84 70 BD FF FF 00 } $el25 = { BE 07 00 00 00 BF 04 00 00 00 BB 02 00 00 00 00 } $el26 = { 8B 4D 10 C1 E2 04 8B 19 83 EA 30 8B CB 49 } $el28 = { 8D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? 83 C4 38 EB 0E 83 EC 04 00 } $el3 = { 0F 8F A5 00 00 00 A1 ?? ?? ?? ?? 83 F8 14 7D 0D } $el30 = { 8B 5D B0 0F 85 ?? ?? ?? ?? 8D 34 9D ?? ?? ?? ?? 8D 14 9D 00 0F 8E 1B 03 00 00 D9 05 } $el31 = { 8B 45 44 6B 00 04 D9 05 ?? ?? ?? ?? D8 B0 } $el32 = { E9 7E 04 00 00 8B 74 24 1C 8B 54 24 14 85 } $el33 = { 83 39 63 0F 85 21 03 00 00 8B EE 85 F6 0F } $el34 = { 85 DB 8B 55 D4 75 2C 89 35 00 } $el36 = { 75 18 8D 35 ?? ?? ?? ?? 56 8D 3D 00 } $el37 = { 8D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? EB 0E 83 EC 04 56 57 53 E8 95 00 } $el39 = { D8 34 85 ?? ?? ?? ?? 8B 44 ?? ?? 8B CA 00 } $el4 = { 8B 5D 0C 8B 55 08 8B 36 8B 00 } $el40 = { 8D 04 BD ?? ?? ?? ?? 03 DF 00 } $el41 = { 8B EE 85 F6 0F 8E ?? ?? ?? ?? 8D 1C BD 00 } $el42 = { D9 04 9D ?? ?? ?? ?? 83 ED 04 05 10 00 00 00 D8 0D 00 } $el43 = { 75 2C 89 35 ?? ?? ?? ?? 89 05 ?? ?? ?? ?? 89 15 } $el45 = { 89 55 F4 8B F9 8B D3 03 FB C1 E2 02 89 35 } $el46 = { 40 23 72 65 63 24 65 69 69 6E 20 2E 30 24 D9 5D 00 D9 03 D8 0D ?? ?? ?? ?? D8 0D 00 } $el49 = { DF E0 F6 C4 41 A1 ?? ?? ?? ?? 74 5A } $el51 = { FF 35 ?? ?? ?? ?? E8 ?? ?? ?? ?? 9D D9 E0 D9 1D ?? ?? ?? ?? 8B 4C } $el53 = { 6A 46 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? 6A 03 } $el56 = { D8 05 ?? ?? ?? ?? D9 55 00 9C } $el59 = { C2 08 00 A1 ?? ?? ?? ?? 8B 0C 85 ?? ?? ?? ?? 89 0E 00 } $el6 = { 83 EC 04 53 E8 ?? ?? ?? ?? EB 09 83 EC 04 53 00 } $el61 = { D8 1D ?? ?? ?? ?? DF E0 F6 C4 41 B8 00 00 00 00 75 05 B8 01 00 00 00 85 C0 74 11 6A 29 00 } $el63 = { 2B DA 89 3C 03 83 3D 00 } $el68 = { D9 5D C0 8B 4D C0 D9 45 E0 89 0E 00 } $el70 = { 8B 05 ?? ?? ?? ?? 8B 0D ?? ?? ?? ?? 0F 85 7E 00 00 00 0F AF 15 00 } $el73 = { B9 01 00 00 00 C1 E7 02 8B BF ?? ?? ?? ?? 8B D7 85 FF 8B 55 30 8B 45 30 D8 C9 8B 75 2C 00 9A 8B 00 00 00 1B 00 90 0F 94 C3 0B D8 33 D2 83 3D 00 } $el75 = { 2B FB 8B DE C1 E3 02 89 7D A0 03 5D A0 8B 03 F7 F7 DB 0C 02 89 35 } $el80 = { 0F 0F 94 C0 23 C3 33 D2 } $el81 = { 8B 55 30 8B 75 2C D8 C9 8B 45 30 00 } $el83 = { DD 05 ?? ?? ?? ?? 8B 05 ?? ?? ?? ?? 8B 15 ?? ?? ?? ?? 0F AF 05 ?? ?? ?? ?? 8B 1D ?? ?? ?? ?? 0F AF 15 } $el89 = { 68 28 00 00 00 57 E8 ?? ?? ?? ?? 8B 1D ?? ?? ?? ?? 8B 35 ?? ?? ?? ?? 0F AF 1D ?? ?? ?? ?? 8B 3D ?? ?? ?? ?? 8B 05 } $el94 = { 8B 75 38 8B 4D 34 D8 C9 8B 00 } $el96 = { 8B 55 88 8B 5D B0 83 7D 84 01 } $el97 = { 55 8B EC 83 EC 2C 33 D2 53 56 57 8B } $el99 = { 55 8B EC 83 EC 2C B9 46 00 00 00 53 56 57 8B 00 } condition: filesize < 20MB and uint16(0) == 0x5A4D and 2 of them } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | rule apt_fast16_patch { meta: author = "SentinelLABS/vk" last_modified = "2026-04-15" description = "Detects the fast16 patch code. May be present in statically patched files or memory dumps." hash = "0ff6abe0252d4f37a196a1231fae5f26" strings: $p1 = { 55 88 50 53 52 51 8D 64 24 94 DD 34 24 51 E8 ?? ?? ?? ?? 59 81 E9 14 00 00 00 8B 99 50 0F 00 00 83 FB 28 76 04 6A 31 } $p2 = { 59 81 E9 EE 00 00 00 6A 02 BB B4 05 00 00 01 CB C6 03 EB 43 C6 03 15 8B 44 24 78 83 C0 07 89 81 EC 07 00 00 E9 BF 02 00 00 } $p3 = { 50 53 52 51 E8 ?? ?? ?? ?? 59 81 E9 78 01 00 00 D9 99 C4 0F 00 00 8D 64 24 94 DD 34 24 FF B1 C4 0F 00 00 6A 02 EB 2D } condition: any of them } |