
Ако сте икада отворили извршну датотеку и помислили да је бесмислица, нисте сами; међутим, скривени међу тим морем бајтова су Људима читљиви текстуални низови који откривају путање, DLL-ове, грешке и форензичке траговеЊихово откривање помоћу правих алата у оперативном систему Windows вам омогућава да разумете о чему се ради у бинарној датотеци без растављања или дебаговања.
На овој тури ћете научити како да користите strings.exe (Sysinternals), PowerShell (Select-String, Get-Content) а такође и GNU strings команду из WSL-а, плус FLOSS и услужне програме попут PEStudio-а, ЕкифТоол или certutil. Видећете како да локализујете текст у ASCII и Unicode/UTF-16LE, извучете стрингове генерисане током извршавања, детектујете уграђени XML, проверите алтернативне токове NTFS-а и ослањају се на метаподатке, потписе и хешеве да контекстуализујете оно што пронађете. Ослоните се на ExifTool за опште метаподатке и водич за уклоните метаподатке из Office докумената када треба да очистите осетљиве информације.
Шта су стрингови у PE бинарном фајлу и зашто су важни?
Ланац није ништа више него низ бајтова интерпретиран помоћу кодирања (ASCII, UTF-8, UTF-16/Unicode). На Windows-у, PE извршне датотеке често садрже увезена имена функција, поруке, путање, XML манифесте, OCSP/CRL URL-ове и DOS stub упозорења као што је „Овај програм се не може покренути у DOS режиму“. Овај текст је најважнији. зависности, функционалност, па чак и сигнали против дебаговања (нпр. IsDebuggerPresent, LoadLibrary, GetProcAddress).
Када читате ланце, одвојите жито од кукоља. Заинтересовани сте домени, путање, имена DLL-ова, кључеви регистра, опције командне линије и све трагове који указују на понашање. Видети референце на VeriSign/Microsoft не гарантује важећи потпис, али је траг за проверу аутентичности помоћу системских алата.
Основе на Windows-у: Sysinternals strings.exe и FLOSS
Најдиректнији начин за почетак рада на Windows-у је strings.exe (од Sysinternals-а). Скенира датотеку и приказује све читљиве текстуалне низове које открије, што је савршено за почетну проверу. Основни случај употребе би био:
strings.exe binario.exe > cadenas.txt
У излазу ћете видети све: XML манифесте, увезене DLL датотеке, поруке о грешкама, интерне руте и текстови интерфејсаАко сумњате да је бинарни фајл упакован или замагљен, допуните га са ФЛОСС (FLARE/FireEye), који покушава да преузме стрингове који су конструисани током извршавања програма, а које strings.exe није статички детектовао.
Ослањајте се на статичке прегледаче као што су ПЕСтудио (индикатори, увоз, ресурси, фирме, ентропија) и у ЕкифТоол за опште метаподатке. Унакрсно референцирање резултата смањује лажно позитивне резултате и помаже вам дати приоритет ономе што треба следеће истражити без трошења сати.
PowerShell за претрагу и филтрирање текста: Select-String детаљно
PowerShell долази са изворним „grep“-ом: Селецт-СтрингРади на линијама и користи регуларне изразе за проналажење образаца у датотекама или у излазу других команди. Подразумевано приказује датотеку, број линије и садржај где се подударање појављује и може Врати више подударања по реду, подеси подударање тако да разликује велика и мала слова или врати само логичке вредности.
Кључни концепти за употребу са датотекама: -Пут за избор рута (прихвата џокере), -Шаблон за текст или регуларни израз који треба претраживати, -СваПодударања да пронађе сва појављивања у свакој линији, -Осетљиво на велика и мала слова ако је потребна осетљивост на велика и мала слова и -Енцодинг да дефинише очекивано кодирање (UTF-8, Unicode/UTF-16, OEM, итд.).
Такође је корисно -Контекст да се прикажу редови пре/после, -Укључи/-Искључи да филтрирате по обрасцима имена, -Не подудара се да обрнете претрагу, -Листа да врати само прво подударање по датотеци, -Тихо за логички излаз и -Сировина тако да је излаз само одговарајући текст уместо обогаћених објеката.
Неки практични рецепти, који покривају типичне случајеве са кодирањем и више датотека:
# Buscar "Microsoft" distinguiendo mayúsculas/minúsculas en todos los .txt del directorio actual
Select-String -Path .\*.txt -Pattern 'Microsoft' -CaseSensitive
# Encontrar TODAS las apariciones (no solo la primera por línea)
Select-String -Path .\log.txt -Pattern 'ERROR' -AllMatches
# Mostrar 2 líneas antes y 3 después de una coincidencia
Select-String -Path .\registro.txt -Pattern 'FATAL' -Context 2,3
# Solo decir si existe el patrón (True/False)
Select-String -Path .\*.conf -Pattern '^Port\s+22$' -Quiet
# Forzar lectura como UTF-16 (Unicode LE), típico en cadenas de binarios Windows
Select-String -Path .\dump_strings.txt -Pattern '<\?xml' -Encoding Unicode
Две важне нијансе приликом каналисања објеката: са -ИнпутОбјецт цела колекција се третира као један комбиновани стринг, док ако цевоводни ланци се обрађују елемент по елемент. Поред тога, објекти Филеинфо читају се као путања (садржај датотеке), а не као њен ToString(); а ако желите форматирану текстуалну репрезентацију сложених објеката, Спољни низ је ваш пријатељ пре Select-String-а.
Читање бинарних датотека као бајтова у PowerShell-у и разумевање NTFS ADS-а
Понекад није довољно само тражити, потребно је учитава бинарни фајл као бајтове да би радио на ниском нивоуPowerShell ово олакшава помоћу Get-Content и параметра -AsByteStream (најбоље у комбинацији са -Raw) да би се добила вредност ] на којој се филтрира, мери или сече:
$bytes = Get-Content -Path .\binario.exe -AsByteStream -Raw
$bytes.Length
Ако је осумњичени огромни текстуални фајл, изаберите између ред по ред или сирово читање са -Raw. А када вас занима само крај датотеке која расте (логови), користите -Реп или -Укупан број да се ограничи унос података и убрза тријажа.
У NTFS-у, не заборавите Алтернативни токови података (ADS): подаци који путују у паралелним токовима повезаним са датотеком. Можете их навести и читати овако:
# Ver streams disponibles
Get-Item -Path .\sospechoso.txt -Stream *
# Leer el stream primario y uno alternativo
Get-Content -Path .\sospechoso.txt -Stream ':$DATA'
Get-Content -Path .\sospechoso.txt -Stream 'Oculto'
Када путања садржи специјалне знакове, користите -LiteralPath да би се избегле интерпретације џокер знаковаФилтрирање помоћу -Include/-Exclude или -Filter вам штеди писање непотребних петљи и омогућава вам да обрадити целе серије доследно.
WSL/GNU стрингови: одличан савезник за брзо скрининг
Ако радите са WSL-ом или Linux-ом, команда струне То је класик. Да бисте добили брз преглед корисних стрингова, комбинујте минималну дужину, помаке и кодирања, а затим филтер са grep-ом:
# Básico
strings ejemplo.bin
# Ignorar morralla: cadenas de 10 o más
strings -n 10 ejemplo.bin
# Mostrar desplazamiento (hex) de cada cadena
strings -t x ejemplo.bin
# Forzar codificación UTF-16LE (Windows)
strings -e S ejemplo.bin
# Encadenar con head para una vista rápida
strings archivo1.bin archivo2.bin | head -n 100
Ови трикови су златна вредност за проналажење URL-ови, екстензије, обрасци конфигурације, имена ресурса и друге индикаторе. Ако је бинарни фајл јако замагљен, видећете мало низова знакова; онда ћете морати да пређете на алате који реконструишу текст током извршавања или динамичку анализу.
Пронађите и издвојите XML уграђен у извршне датотеке
Многи EXE-ови носе XML фрагменти као манифести или конфигурације у јасном облику (ASCII/Unicode). Да бисте их пронашли из PowerShell-а, потражите ознаке за почетак документа или функције и, ако је применљиво, анализирајте блок као XML:
# 1) Volcar posibles cadenas (UTF-16) a un archivo intermedio si hace falta
strings.exe binario.exe > dump_strings.txt
# 2) Buscar el inicio de XML (en Unicode, usa -Encoding Unicode)
$xmlLines = Select-String -Path .\dump_strings.txt -Pattern '<\?xml' -Encoding Unicode
# 3) O leer directamente el EXE como texto Unicode y capturar el bloque
$text = Get-Content -Path .\binario.exe -Encoding Unicode -Raw
$match = ::Match($text, '<\?xml*?</+>')
if ($match.Success) {
$xml = $match.Value
$xml.DocumentElement | Format-List -Property *
}
Када је блок кодиран, видећете Base64 или хексадецималне ознаке око њих. Са цертутил Веома је згодно декодирати:
# Base64 a binario
certutil -decode in.txt out.bin
# Hex a binario
certutil -decodehex in.hex out.bin
Ако треба да потврдите потпис или прегледате ланац сертификата, Get-AuthenticodeSignature у PowerShell-у и certutil -asn/-dump Они вам дају контекст који сами стрингови не приказују. Тако можете схватити да ли је тај XML манифест, политика или конфигурација коју бинарни фајл користи.
Потписи и метаподаци: шта вам сертификати говоре
Стрингови често укључују имена CA (VeriSign, Thawte), OCSP/CRL путање или идентификаторе. Ово вас подстиче да проверите да ли је бинарни је дигитално потписан и ако је верификација валиднаМожете се ослонити на специјализоване алате као што су сигцхецк за анализу потписа и репутације. У оперативном систему Windows проверите својства датотеке или покрените:
# Firma del ejecutable
Get-AuthenticodeSignature .\binario.exe | Format-List
# Volcado ASN.1 de un DER/P7
certutil -asn firma.der
# Hash rápido para inventario/IOC
certutil -hashfile .\binario.exe SHA256
Постојање референци на сертификате не подразумева поверење: постоје сертификати истекао или поништен што ће наставити да оставља траг ресурса. Ова неслагања, заједно са сумњивим ланцима, још је један показатељ који треба узети у обзир приликом тријаже.
Када стрингови нису довољни: паковање, замагљивање и ентропија
Ако је излаз лош, извршна датотека може бити упакована (UPX, варијанте) или са компримовани/шифровани подациПогледајте ентропију PE секција (висока = компресија/енкрипција) и испробајте FLOSS за динамичке стрингове. ПЕСтудио олакшава преглед ентропије, увоза, ресурса и заставица у само неколико кликова.
UPX се лако детектује и распакује, али постоје кућне обфускације засноване на XOR-у и дешифровању током извршавања. У тим случајевима, стрингови ће се појавити у меморија током извршавања, не у статичком бинарном фајлу, па размислите о качењу, API праћењу или покретању у sandbox-у ако треба да идете даље.
Статички тријажни ток рада који штеди време
Наруџбина која ретко не успе: 1) Идентификујте тип и архитектуру (заглавља, „датотека“, xxd). 2) Израчунај хеше (MD5/SHA-1/SHA-256) за инвентар и IOC-ове. 3) Издвојите стрингове помоћу strings.exe и GNU strings, филтрирајте по дужини и потражите шаре. 4) Пробајте са ФЛОСС ако сумњате на генерисање током извршавања. 5) Погледајте метаподаци и потпис помоћу PEStudio/ExifTool/PowerShell. 6) Користите цертутил да декодира блобове и испише ASN.1. 7) Провери NTFS огласи у случају да постоје алтернативни подаци. 8) Знаци замагљивање и ентропија да одлучи да ли да пређе на динамичан начин.
Ако анализирате злонамерни софтвер или желите више контекста за PE, алати попут ПЕВ/ПЕФРАЈМ обезбедите: традиционалне хешеве, ssdeep (fuzzy хеширање), imphash (базиран на IAT-у), пакери, мутекси и криптографске функције. Поред тога, услужни програми као што су они пецају (ентропија, временске ознаке) или пепак да вам фирме за паковање помогну брзо сортирај.
Програмско читање и писање бинарних датотека: C++, Python и ASP.NET
Поред стругања стрингова, корисно је знати како се обрађује бинарни код ниског нивоа. У C++-у, класа fstream у iOS::binary режиму омогућава директно читање/писање и позиционирање помоћу seekg/seekp (у бајтовима). Будите опрезни када користите самосталне објекте (нпр. низове карактера у структурама) и са поравнање/ендијански редослед ако ћете премештати датотеке између платформи или компајлера.
// Guardar un registro binario
struct Persona { char nombre; int edad; char telefono; };
Persona p{ "Baltasar", 33, "988387028" };
std::ofstream f("datos.bin", std::ios::binary);
if (f.is_open()) f.write(reinterpret_cast<const char*>(&p), sizeof(Persona));
У Пајтону, да бисте издвојили структуриране бројеве из бинарног броја, размислите о структура.распакивање након отварања са „rb“. Ако желите да пронађете текстуалне обрасце, можете чита све као бајтове и тражи разграничене секвенце (нпр. између чистих маркера) или конвертовати блок у стринг са исправним кодирањем и филтрирати помоћу регуларног израза.
with open('archivo.bin', 'rb') as f:
data = f.read()
# Buscar secuencia UTF-16LE de '<?xml'
needle = '<?xml'.encode('utf-16le')
pos = data.find(needle)
if pos != -1:
# Extrae una ventana y decodifica con cuidado
snippet = data.decode('utf-16le', errors='ignore')
Ако развијате на вебу помоћу .NET-а и потребно је да вратите бинарну датотеку прегледачу, не заборавите да подесите Одговарајући ContentType и упишите датотеку у HTTP токТипичан образац у ASP.NET-у (VB) је коришћење Response.ContentType = "application/pdf" и Response.WriteFile са физичком путањом, завршавајући се са Response.End на спречити мешање другог излаза.
Select-String: Параметри и трикови који праве разлику
Иако је једноставан за коришћење, Select-String има мање познате опције које вреди савладати. -Култура (на PS 7+) вам омогућава да подесите поређења узимајући у обзир културу или да присилите „Ординални“ за брза бинарна поређења, што у комбинацији са -SimpleMatch избегава интерпретацију регуларних израза и убрзава дословне претраге.
Подразумевано кодирање у модерном PowerShell-у је UTF-8 без BOM-а, али можете одредити -Енцодинг експлицитно: ASCII, OEM, Unicode (UTF-16 LE), UTF8/UTF8BOM/UTF8NoBOM, UTF32, па чак и нумеричке кодне странице (нпр. -Encoding 1252). Ово је кључно при анализи Unicode низова или датотеке са недостајућим BOM-ом.
Ако вам је потребан само први подудар по датотеци да бисте направили листу резултата, преузмите из -ЛистаДа бисте искључили оно што се подудара (нпр. редове који НЕ садрже „Get“ или „Set“), користите -Не подудара се са више образаца. А када желите само текст који одговара стилу grep/findstr, -Сировина поједностављује излаз.
# Excluir líneas que contengan Get o Set
Select-String -Path .\Command.txt -Pattern 'Get','Set' -NotMatch
# Mostrar solo el fragmento que coincide (modo "crudo")
Select-String -Path .\*.log -Pattern '0x+' -Raw
Запамтите да је нормалан излаз објекат Информације о утакмици са корисним својствима (Путања, Број линије, Линија, Подударања). Можете повезати до Пријави се да их прегледате, а затим форматирате како вам одговара помоћу Select-Object, Export-CSV или Формат-листа у зависности од вашег циља.
Случајеви из стварног живота: Уникод, офсети и корисни обрасци
Многи бинарни Windows-ови чувају текст у УТФ-16ЛЕАко вам strings.exe да основни дамп, размислите о поновном парсирању са фокусом на Unicode и тражењу корисних секвенци: „http“, „\\\\“ за путање, „.exe“, „api“ или XML ознаке. Затим филтрирајте помоћу Select-String форсирања. -Јуникод кодирање како не би пропустили утакмице.
# Volcado con GNU strings (WSL) en UTF-16LE y luego filtrado
strings -e S binario.exe | grep -E '(http|\\\\|\.exe|<\?xml)'
Ако желите знати где сваки ланац живи Унутар датотеке да бисте је корелирали са PE одељцима, користите „strings -tx“ и упоредите помаке са PE прегледачем. То вам може помоћи да одлучите да ли се текст налази у .rdata, .text или у ресурсима, што мења тумачење налаза.
Безбедност и песковник: минималне мере предострожности
Када радите са потенцијално злонамерним узорцима, поставите минималну политику: користите виртуелне машине, не покрећите бинарни фајл на главном хосту, проверите интегритет помоћу хешева и упоредите у сервисима за проверу репутације ако случај то дозвољава, а у случајевима сумњивих докумената проверите како Идентификујте злонамерни ПДФ у оперативном систему WindowsАко одлучите да га покренете, урадите то у изолованом „пешчанику“ и са праћење мреже/датотека/дневника да би се снимили низови који се појављују само током извршавања програма.
Као део ваше дисциплине, сачувајте резултате (хешеве, релевантне стрингове, метаподатке, потпис) и означите сваки артефакт са датумом и контекстом. Овај редослед ће вам омогућити да се вратите и репродукујете анализу, као и да упоредите породице и варијанте са fuzzy хеширањем (ssdeep) и imphash-ом.
Користећи овај приступ и услужне програме које смо видели, моћи ћете за неколико минута да извучете сав вредан текст који бинарни Windows фајл оставља изложеним: од уграђених Unicode низова до скривеног XML-а, укључујући путање, крајње тачке и потписе. Како се навикнете на комбиновање strings.exe, Select-String, FLOSS, certutil, PEStudio/ExifTool и WSL/GNU стринговима, добићете на брзини и тачности, смањити шум и имати солидну основу за одлучивање да ли да ескалирате на динамичку анализу, обрнете или затворите истрагу.