
Ako ste ikada otvorili izvršnu datoteku i pomislili da je besmislena, niste sami; međutim, skriveni među tim morem bajtova su Čovjeku čitljivi tekstualni nizovi koji otkrivaju putanje, DLL-ove, greške i forenzičke tragoveOtkrivanje tih podataka uz pomoć pravih alata u Windowsu omogućava vam da shvatite o čemu se radi u binarnoj datoteci bez rastavljanja ili otklanjanja grešaka.
Na ovoj turi ćete naučiti kako koristiti strings.exe (Sysinternals), PowerShell (Select-String, Get-Content) a također i GNU strings naredbu iz WSL-a, plus FLOSS i uslužne programe poput PEStudio-a, ExifTool ili certutil. Vidjet ćete kako lokalizirati tekst u ASCII i Unicode/UTF-16LE formatu, kako sakupljati stringove generirane tokom izvođenja, kako detektirati ugrađeni XML, kako provjeriti alternativne NTFS tokove i oslanjaju se na metapodatke, potpise i heševe da biste kontekstualizirali ono što pronađete. Oslanjajte se na ExifTool za opće metapodatke i vodič za uklanjanje metapodataka iz Office dokumenata kada trebate očistiti osjetljive informacije.
Šta su stringovi u PE binarnom fajlu i zašto su važni?
Lanac nije ništa više od niz bajtova interpretiran s kodiranjem (ASCII, UTF-8, UTF-16/Unicode). Na Windowsu, PE izvršne datoteke često sadrže uvezene nazive funkcija, poruke, putanje, XML manifeste, OCSP/CRL URL-ove i DOS stub upozorenja poput "Ovaj program se ne može pokrenuti u DOS režimu." Ovaj tekst je jasan znak. zavisnosti, funkcionalnosti, pa čak i signali protiv debagovanja (npr. IsDebuggerPresent, LoadLibrary, GetProcAddress).
Kada čitate lance, odvojite žito od kukolja. Zanima vas... domene, putanje, DLL imena, ključevi registra, opcije komandne linije i sve tragove koji ukazuju na ponašanje. Vidjeti reference na VeriSign/Microsoft ne garantuje važeći potpis, ali je trag za provjeru autentičnosti pomoću sistemskih alata.
Osnove na Windowsu: Sysinternals strings.exe i FLOSS
Najdirektniji način za početak rada na Windowsu je strings.exe (iz Sysinternals-a). Skenira datoteku i ispisuje sve čitljive tekstualne nizove koje otkrije, što je idealno za početnu provjeru. Osnovni slučaj upotrebe bi bio:
strings.exe binario.exe > cadenas.txt
U izlazu ćete vidjeti sve: XML manifeste, uvezene DLL-ove, poruke o greškama, interne rute i tekstovi interfejsaAko sumnjate da je binarni fajl zapakovan ili obfusiran, dopunite ga sa FLOSS (FLARE/FireEye), koji pokušava preuzeti stringove koji su konstruirani za vrijeme izvođenja, a koje strings.exe nije statički detektovao.
Oslanjajte se na statičke preglednike kao što su PEStudio (indikatori, uvoz, resursi, firme, entropija) i u ExifTool za opće metapodatke. Unakrsno referenciranje rezultata smanjuje lažno pozitivne rezultate i pomaže vam odrediti prioritete za sljedeće istraživanje bez trošenja sati.
PowerShell za pretraživanje i filtriranje teksta: Detaljno objašnjenje Select-String-a
PowerShell dolazi s izvornim "grep"-om: Select-StringRadi na linijama i koristi regularne izraze za pronalaženje uzoraka u datotekama ili u izlazu drugih naredbi. Podrazumevano, prikazuje datoteku, broj linije i sadržaj u kojem se pojavljuje podudaranje, i može Vrati više podudaranja po liniji, prilagodi podudaranja velikim i malim slovima ili vrati samo logičke vrijednosti.
Ključni koncepti za korištenje s datotekama: -Put za odabir ruta (prihvata džoker znakove), -Uzorak za tekst ili regularni izraz koji treba pretražiti, -SvaPodudaranja da pronađe sve pojave u svakoj liniji, -Osjetljivo na velika i mala slova ako vam je potrebna osjetljivost na velika i mala slova i -Encoding definirati očekivano kodiranje (UTF-8, Unicode/UTF-16, OEM, itd.).
Takođe je korisno -Kontekst za prikaz linija prije/poslije, -Uključi/-Isključi filtrirati po obrascima imena, -Ne podudara se da obrnete pretragu, -Lista da vrati samo prvo podudaranje po datoteci, -Tiho za logički izlaz i -Sirovina tako da izlaz bude samo odgovarajući tekst umjesto bogatih objekata.
Neke praktični recepti, koji pokrivaju tipične slučajeve s kodiranjem i više datoteka:
# 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
Dvije važne nijanse prilikom kanaliziranja objekata: sa -UlazniObjekat cijela kolekcija se tretira kao jedan kombinovani niz znakova, dok ako cjevovodni lanci obrađuju se element po element. Osim toga, objekti Podaci o fajlu čitaju se kao putanja (sadržaj datoteke), a ne kao njen ToString(); a ako želite formatiranu tekstualnu reprezentaciju složenih objekata, Vanjski niz je vaš prijatelj prije Select-String-a.
Čitanje binarnih datoteka kao bajtova u PowerShellu i razumijevanje NTFS ADS-a
Ponekad nije dovoljno tražiti, potrebno je učitava binarnu datoteku kao bajtove za rad na niskom nivouPowerShell ovo olakšava pomoću Get-Content i parametra -AsByteStream (najbolje u kombinaciji s -Raw) kako bi se dobio ] na kojem se filtrira, mjeri ili dijeli:
$bytes = Get-Content -Path .\binario.exe -AsByteStream -Raw
$bytes.Length
Ako je osumnjičeni ogromna tekstualna datoteka, birajte između čitanje red po red ili sirovo čitanje sa -Raw. A kada vas zanima samo kraj datoteke koja raste (logovi), koristite -Rep ili -UkupanBroj kako bi se ograničio ulazno-izlazni proces i ubrzala trijaža.
U NTFS-u, ne zaboravite Alternativni tokovi podataka (ADS): podaci koji putuju u paralelnim tokovima povezanim s datotekom. Možete ih navesti i čitati na sljedeći način:
# 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'
Kada putanja sadrži posebne znakove, koristite -LiteralPath kako bi se izbjegle interpretacije džoker znakovaFiltriranje pomoću -Include/-Exclude ili -Filter vam štedi pisanje nepotrebnih petlji i omogućava vam da obraditi cijele serije dosljedno.
WSL/GNU stringovi: odličan saveznik za brzo skrining
Ako radite sa WSL-om ili Linuxom, naredba strings To je klasika. Da biste dobili brz pregled korisnih stringova, kombinujte minimalnu dužinu, ofset i kodiranja, a zatim filtriraj sa grep-om:
# 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
Ovi trikovi su zlatni za pronaći URL-ovi, ekstenzije, konfiguracijski obrasci, nazivi resursa i druge indikatore. Ako je binarni fajl jako zamaskiran, vidjet ćete malo stringova; tada ćete morati preći na alate koji rekonstruišu tekst tokom izvođenja ili dinamičku analizu.
Pronađite i izdvojite XML ugrađen u izvršne datoteke
Mnogi EXE-ovi nose XML fragmenti kao manifesti ili konfiguracije u čistom obliku (ASCII/Unicode). Da biste ih pronašli iz PowerShella, potražite oznake početka dokumenta ili funkcije i, ako je primjenjivo, analizirajte blok kao 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 *
}
Kada je blok kodiran, vidjet ćete Base64 ili heksadecimalne oznake koje okružuju. Sa certutil Veoma je praktično dešifrirati:
# Base64 a binario
certutil -decode in.txt out.bin
# Hex a binario
certutil -decodehex in.hex out.bin
Ako trebate potvrditi potpis ili pregledati lanac certifikata, Get-AuthenticodeSignature u PowerShellu i certutil -asn/-dump Oni vam daju kontekst koji sami stringovi ne prikazuju. Tako možete shvatiti da li je taj XML manifest, politika ili konfiguracija koju binarni fajl koristi.
Potpisi i metapodaci: šta vam certifikati govore
Nizovi znakova često uključuju CA imena (VeriSign, Thawte), OCSP/CRL putanje ili identifikatore. Ovo vas podstiče da provjerite da li je binarni fajl je digitalno potpisan i ako je verifikacija važećaMožete se osloniti na specijalizirane alate kao što su sigcheck za analizu potpisa i reputacije. U Windowsu provjerite svojstva datoteke ili pokrenite:
# 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
Postojanje referenci na certifikate ne podrazumijeva povjerenje: postoje certifikati istekao ili opozvan što će nastaviti ostavljati trag resursa. Ova neskladnost, zajedno sa sumnjivim lancima, još je jedan pokazatelj koji treba uzeti u obzir prilikom trijaže.
Kada stringovi nisu dovoljni: pakovanje, obfuskacija i entropija
Ako je izlaz loš, izvršna datoteka može biti zapakirana (UPX, varijante) ili sa komprimirani/šifrirani podaciPogledajte entropiju PE sekcija (visoka = kompresija/enkripcija) i pokušajte sa FLOSS-om za dinamičke stringove. PEStudio Omogućava jednostavan pregled entropije, uvoza, resursa i zastavica u nekoliko klikova.
UPX se lako detektuje i raspakuje, ali postoje kućne obfuskacije zasnovane na XOR-u i dešifriranju tokom izvođenja. U tim slučajevima, stringovi će se pojaviti u memorija tokom izvršavanja, ne u statičkom binarnom fajlu, pa razmislite o kačenju, API praćenju ili pokretanju u sandboxu ako trebate ići dalje.
Ušteda vremena u toku rada statičke trijaže
Narudžba koja rijetko ne uspije: 1) Identificirajte tip i arhitekturu (zaglavlja, "datoteka", xxd). 2) Izračunaj heševe (MD5/SHA-1/SHA-256) za inventar i IOC-ove. 3) Izdvojite stringove sa strings.exe i GNU stringovi, filtrirajte po dužini i potražite uzorke. 4) Isprobajte sa FLOSS ako sumnjate na generiranje tokom izvršavanja. 5) Pogledajte metapodaci i potpis sa PEStudio/ExifTool/PowerShell. 6) Koristite certutil za dekodiranje blobova i ispis ASN.1. 7) Provjeri NTFS oglasi u slučaju da postoje alternativni podaci. 8) Znakovi zamagljivanje i entropija odlučiti hoće li se ići dinamično.
Ako analizirate zlonamjerni softver ili želite više PE konteksta, alati poput PEV/PEframe pružaju: tradicionalne hashove, ssdeep (fuzzy hashiranje), imphash (baziran na IAT-u), packeri, mutex-i i kriptografske funkcije. Pored toga, uslužni programi kao što su oni love ribu (entropija, vremenski pečati) ili pepak za firme za pakovanje koje vam mogu pomoći brzo sortiraj.
Programsko čitanje i pisanje binarnih datoteka: C++, Python i ASP.NET
Pored struganja stringova, korisno je znati kako rukovati binarnim kodom niskog nivoa. U C++-u, klasa fstream u iOS::binarnom modu omogućava direktno čitanje/pisanje i pozicioniranje sa seekg/seekp (u bajtovima). Budite oprezni pri korištenju samostalnih objekata (npr. nizova znakova u strukturama) i sa poravnanje/endian način rada ako ćete premještati datoteke između platformi ili kompajlera.
// 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));
U Pythonu, da biste izdvojili strukturirane brojeve iz binarnog broja, razmislite o struct.unpack nakon otvaranja sa 'rb'. Ako tražite tekstualne obrasce, možete čita sve kao bajtove i traži razgraničene sekvence (npr. između praznih markera) ili pretvorite blok u niz znakova s ispravnim kodiranjem i filtrirajte ga pomoću regularnog izraza.
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')
Ako razvijate na webu koristeći .NET i trebate vratiti binarnu datoteku pregledniku, ne zaboravite postaviti Odgovarajući ContentType i zapisivanje datoteke u HTTP streamTipičan obrazac u ASP.NET-u (VB) je korištenje Response.ContentType = "application/pdf" i Response.WriteFile sa fizičkom putanjom, završavajući sa Response.End za spriječiti miješanje drugog izlaza.
Select-String: Parametri i trikovi koji čine razliku
Iako je jednostavan za korištenje, Select-String ima manje poznate opcije koje vrijedi savladati. -Kultura (na PS 7+) omogućava vam prilagođavanje poređenja uzimajući u obzir kulturu ili forsiranje "Ordinalnog" za brza binarna poređenja, što se kombinuje sa -SimpleMatch izbjegava interpretaciju regularnih izraza i ubrzava doslovne pretrage.
Podrazumevano kodiranje u modernom PowerShell-u je UTF-8 bez BOM-a, ali možete odrediti -Encoding eksplicitno: ASCII, OEM, Unicode (UTF-16 LE), UTF8/UTF8BOM/UTF8NoBOM, UTF32, pa čak i numeričke kodne stranice (npr. -Encoding 1252). Ovo je ključno pri analizi Unicode string dumpova ili datoteke s nedostajućim BOM-om.
Ako vam je potreban samo prvi rezultat po datoteci za kreiranje liste rezultata, preuzmite iz -ListaDa biste isključili ono što se podudara (npr. redove koji NE sadrže "Get" ili "Set"), koristite -Ne podudara se s više uzoraka. A kada želite samo tekst koji odgovara stilu grep/findstr, -Sirovina pojednostavljuje izlaz.
# 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
Zapamtite da je normalni izlaz objekat Informacije o utakmici sa korisnim svojstvima (Putanja, Broj linije, Linija, Podudaranja). Možete ulančati do Pridruži se članu da ih pregledate, a zatim ih formatirate kako vam odgovara pomoću Select-Object, Export-CSV ili Format-Lista ovisno o vašem cilju.
Slučajevi iz stvarnog života: Unicode, ofseti i korisni obrasci
Mnogi binarni Windowsi spremaju tekst u UTF-16LEAko vam strings.exe da osnovni dump, razmislite o ponovnom parsiranju s fokusom na Unicode i traženju korisnih sekvenci: "http", "\\\\" za putanje, ".exe", "api" ili XML oznake. Zatim filtrirajte pomoću Select-String forsiranja. -Unicode kodiranje kako ne bi propustili utakmice.
# Volcado con GNU strings (WSL) en UTF-16LE y luego filtrado
strings -e S binario.exe | grep -E '(http|\\\\|\.exe|<\?xml)'
Ako želite znati gdje svaki lanac živi Unutar datoteke za korelaciju sa PE sekcijama, koristite "strings -tx" i uporedite pomake sa PE preglednikom. To vam može pomoći da odlučite da li se tekst nalazi u .rdata, .text ili u resursima, što mijenja tumačenje nalaza.
Sigurnost i sandbox: minimalne mjere opreza
Prilikom rada s potencijalno zlonamjernim uzorcima, postavite minimalnu politiku: koristite virtualne mašine, nemojte pokretati binarni fajl na glavnom hostu, provjerite integritet pomoću hashova i uporedite u reputacijskim servisima ako slučaj to dozvoljava, a u slučajevima sumnjivih dokumenata provjerite kako Identifikacija zlonamjernog PDF-a u WindowsuAko odlučite da ga pokrenete, učinite to u izolovanom sandboxu i sa praćenje mreže/datoteka/logova za hvatanje stringova koji se pojavljuju samo za vrijeme izvršavanja.
Kao dio vaše discipline, sačuvajte rezultate (hash-eve, relevantne stringove, metapodatke, potpis) i označite svaki artefakt s datumom i kontekstom. Ovaj redoslijed će vam omogućiti da se vratite i reproducirate analizu, kao i da je uporedite porodice i varijante sa fuzzy heširanjem (ssdeep) i imphash-om.
Koristeći ovaj pristup i uslužne programe koje smo vidjeli, moći ćete za nekoliko minuta izdvojiti sav vrijedan tekst koji Windows binarni fajl ostavlja izloženim: od ugrađenih Unicode stringova do skrivenog XML-a, uključujući putanje, krajnje tačke i potpise. Kako se naviknete na kombinovanje strings.exe, Select-String, FLOSS, certutil, PEStudio/ExifTool i WSL/GNU stringovima, dobit ćete brzinu i tačnost, smanjiti šum i imati solidnu osnovu za odlučivanje o tome da li da pređete na dinamičku analizu, poništavanje ili zatvaranje istrage.