Khi gặp phải một tệp thực thi đáng ngờ trên Windows, ít công cụ nào có thể mang lại hiệu quả nhanh chóng như việc trích xuất chuỗi văn bản của tệp thực thi đó. Tiện ích strings (và tiện ích tương tự sysinternals strings.exe) cho phép bạn hiển thị các bit có thể đọc được ẩn trong các tệp nhị phân., từ tin nhắn và tuyến đường đến các miền, API hoặc bản kê khai tiết lộ hành vi, nguồn gốc và manh mối che giấu.
Bài viết này tổng hợp các phần chính của phân tích tĩnh, pháp y và ẩn mã từ nhiều nguồn khác nhau để giúp bạn áp dụng Strings một cách thông minh vào Windows. Bạn sẽ thấy các luồng thực tế, thủ thuật lọc, những việc cần làm khi phần mềm độc hại làm tối nghĩa chuỗi, cách tận dụng PowerShell và certutil, cũng như các tín hiệu trong siêu dữ liệu mà bạn không nên bỏ qua.Mọi thứ đều được giải thích một cách thân thiện mà không làm mất đi tính chặt chẽ về mặt kỹ thuật.
Strings là gì và tại sao lại sử dụng chúng (Windows và Linux)?
Ý tưởng rất đơn giản: trong một tệp nhị phân có các chuỗi byte, với mã hóa nhất định (ASCII, UTF-8, UTF-16), biểu diễn văn bản có thể đọc được. Chuỗi lặp qua tệp và hiển thị các chuỗi "đủ dài" để hữu íchTrên Windows, bạn có thể sử dụng strings.exe từ Sysinternals; trên Linux và các phiên bản phái sinh, lệnh strings có sẵn trên hầu hết mọi bản phân phối.
Nó cung cấp cho bạn những gì chỉ trong vài giây? Tin nhắn nội bộ, đường dẫn, tên thư viện và hàm, điểm cuối, bản kê khai và dấu vết chữ ký. Cũng có rất nhiều nhiễu, vì vậy bạn sẽ học cách giảm nhiễu bằng bộ lọc và thông số.
Sử dụng cơ bản và các thủ thuật cần thiết
Trên Linux hoặc WSL, cách sử dụng trực tiếp nhất là: strings archivo.bin. Nếu bạn làm việc trong WSL, hãy học cách Tạo tập lệnh Bash trong WSL Tăng tốc độ lặp lại. Để tập trung vào các chuỗi dài hơn và tránh rác, bạn có thể áp dụng độ dài tối thiểu.
strings -n 10 ejemplo.bin
Nếu bạn nghi ngờ mã hóa khác nhau, chỉ định loại với -e. Ví dụ, đối với UTF-16 (Big endian trong chuỗi GNU được biểu thị bằng 'S'):
strings -e S archivo.bin
Khi tập tin quá lớn và bạn chỉ muốn xem qua, kết hợp với các công cụ đầu ra một phần:
strings archivo_grande.bin | head -n 100
Để biết vị trí bù trừ nơi mỗi chuỗi xuất hiện, thêm các địa chỉ với -t (lục giác với x):
strings -t x archivo.bin
Trên Windows, với Sysinternals strings.exe, mô hình cũng tương tự. Chạy strings.exe trên tệp nhị phân của bạn và chuyển hướng/lọc bằng findstr hoặc PowerShell để thu hẹp kết quả. Mặc dù các tùy chọn khác nhau so với chuỗi GNU, nhưng quy trình lọc thì tương đương.

Quy trình phân tích tĩnh nhanh trên Windows với Strings
Trước hết, điều quan trọng là phải xác định chúng ta đang nhìn vào cái gì. Xác định loại tệp (PE, kiến trúc, v.v.) và xác thực tính toàn vẹn bằng hàm bămvà nếu bạn làm việc trên Windows hãy kiểm tra Cách xác định các tệp độc hại trong C:\Windows. Trên Linux, file Ví dụ, nó sẽ cho bạn biết đó là PE32. Trên Windows, nhiều tiện ích khác nhau (và thậm chí cả trình soạn thảo hex) sẽ hiển thị thông tin này.
Khi đã xác định được đó là tệp thực thi PE, nó sẽ đưa ra các chuỗi lệnh. Bạn sẽ mong đợi thấy các đoạn mã phổ biến như thông báo tiêu đề DOS "Chương trình này không thể chạy ở chế độ DOS" (hoặc các chuỗi thoát tương đương), tên phần (.text, .rdata, .rsrc) và nhập vào DLL hệ thống (kernel32.dll, user32.dll, v.v.).
Hãy xem xét hai nhóm manh mối lớn: (1) tham chiếu đến thư viện/API, cho bạn biết về các khả năng (tệp, mạng, sổ đăng ký, chống gỡ lỗi…), và (2) chữ ký in và giấy chứng nhận, chẳng hạn như tên cơ quan (VeriSign, Microsoft) và URL OCSP/CRL. Sự xuất hiện của chuỗi chứng chỉ không nhất thiết có nghĩa là chữ ký hợp lệ; bạn sẽ xác nhận điều này sau.
Giảm tiếng ồn và tăng tín hiệu
Chuỗi có thể giảm hàng trăm hoặc hàng nghìn dòng. Lọc theo từ khóa có liên quan (tên miền, tuyến đường đáng ngờ, API mạng, v.v.). Nếu bạn cần tìm hiểu sâu hơn về nhật ký, hãy tham khảo Hướng dẫn Regedit này. Trên Windows:
strings.exe sospechoso.exe | findstr /i /r "http https wininet socket registry"
Trong PowerShell, Select-String cho phép bạn sử dụng các biểu thức chính quy và tô sáng:
strings.exe .\sospechoso.exe | Select-String -Pattern "(?i)http|https|wininet|socket|registry"
Nếu bạn đang sử dụng Linux/WSL, hãy áp dụng lệnh trên (-n cho chiều dài tối thiểu, -t cho các bù trừ, -e để mã hóa) và kết hợp với grep/head để lặp lại nhanh hơn.
Khi phần mềm độc hại làm lu mờ: FLOSS và các manh mối khác
Nếu không có chuỗi "thích hợp" nào (thông điệp, đường dẫn, khóa, v.v.) xuất hiện, tệp nhị phân có thể được đóng gói hoặc làm tối nghĩa. Các công cụ như FLOSS cố gắng khám phá và giải mã các chuỗi được tạo trong thời gian chạy., phát hiện các mẫu như XOR, mã hóa cơ bản hoặc các trình đóng gói phổ biến (ví dụ: UPX).
Nếu FLOSS không tìm thấy gì ngoài chuỗi ký tự, đừng tuyệt vọng: Sự vắng mặt của văn bản hiển thị đã là một dấu hiệu. Nó bổ sung cho điều này bằng phân tích phần và entropy (entropy cao cho thấy có nén/mã hóa), một tính năng bạn sẽ thấy trong các tiện ích dành riêng cho PE. Mô hình này phổ biến trong các phần mềm tống tiền hiện đại và các loại Trojan khác.
Siêu dữ liệu, chữ ký và những gì chúng tiết lộ
Ngoài các chuỗi, Kiểm tra siêu dữ liệu có thể cung cấp cho bạn nhiều bối cảnh.: trình biên dịch, dấu thời gian, phiên bản và quan trọng nhất là chữ ký số. Các công cụ như PEStudio và ExifTool trình bày siêu dữ liệu một cách có tổ chức và thường hiển thị thông tin chứng chỉ nhúng.
Trong Windows, với PowerShell, bạn có thể kiểm tra chữ ký của một tệp thực thi bằng Get-AuthenticodeSignature. Nếu chữ ký không hợp lệ, hết hạn hoặc bị thu hồi, hệ thống sẽ không coi nó là đáng tin cậy. Sự xuất hiện của những cái tên như "Microsoft" hoặc "VeriSign" trong các chuỗi không đảm bảo bất cứ điều gì; hãy kiểm tra tính hợp lệ, chuỗi và việc thu hồi.
Certutil: Con dao đa năng của bạn dành cho chứng chỉ Windows
Windows mang lại certutil.exe, được sử dụng để dump cấu trúc, xác minh chữ ký, tạo băm và xử lý các kho lưu trữ, CRL, v.v. Bạn không cần phải ghi nhớ toàn bộ hướng dẫn sử dụng của nó để phân tích Chuỗi và các lệnh để chẩn đoán trong Windows bổ sung cho hộp công cụ của bạn, nhưng các chức năng phụ sau đây giúp ích rất nhiều:
- Kiểm tra và mã hóa:
certutil -dumpđể đổ thông tin;-asnđể phân tích trong ASN.1;-decode/-encodey-decodehex/-encodehexpara Cơ sở64 và hex. Hữu ích khi tìm các khối được mã hóa trong các chuỗi. - Băm:
certutil -hashfile InFile. Xác minh tính toàn vẹn và kiểm tra chéo các mẫu trong VT (nếu quy trình của bạn cho phép). - xác minh:
certutil -verify CertFileđể kiểm tra chuỗi tin cậy, CRL và chính sách;-URLy-URLcacheđể chẩn đoán sự phục hồi của AIA/CDP. - Nhà kho:
-store,-addstore,-delstore,-verifystoregiúp bạn liệt kê, thêm, xóa và xác minh trong kho máy/người dùng.
Sẽ không có hại gì nếu thêm certutil vào hộp công cụ của bạn. Khi bạn thấy chuỗi chứng chỉ, CRL hoặc OCSP trong tệp nhị phân: điều này sẽ cho phép bạn kiểm tra tính hợp lệ và đường dẫn xuất bản.
PowerShell để xem và chạm vào byte (bao gồm cả ADS)
PowerShell mang lại nhiều tính linh hoạt cho phân tích tĩnh. với Get-Content Bạn có thể đọc các tập tin dưới dạng văn bản hoặc byte, kiểm soát mã hóa, phân định các dòng hoặc nhập luồng dữ liệu thay thế NTFS (ADS), trong đó thông tin đôi khi bị ẩn.
- Đọc mọi thứ thô:
Get-Content -Path .\archivo -Rawtrả về nội dung dưới dạng một chuỗi duy nhất. Hữu ích cho tìm kiếm toàn cục. - Như byte:
Get-Content -Path .\archivo -AsByteStream -Rawmang trở lại], lý tưởng cho việc kiểm tra nhị phân hoặc băm tùy ý. - Dòng chảy thay thế (QUẢNG CÁO):
Get-Item .\fichero -Stream *liệt kê các luồng; để đọc một luồng:Get-Content -Path .\fichero -Stream 'NewStream'. ADS là nơi ẩn náu cổ điển trong NTFS. - Đọc một phần:
-TotalCounty-Tailgiúp lấy mẫu mà không cần tải toàn bộ tệp.
Để xác định vị trí các chuỗi cụ thể từ PowerShell, Select-String với regex và đường ống trên đầu ra của strings.exe hoặc trên nội dung thô cung cấp cho bạn rất nhiều độ chính xác.
Thuật ẩn chữ: Khi nào chuỗi ký tự có ích và khi nào thì không
Chuỗi tỏa sáng trong các tệp nhị phân có thể thực thi, nhưng Thông tin có thể được ẩn trong nhiều loại tệp hoặc thậm chí trong văn bản thuần túy.Biết các kỹ thuật stego phổ biến sẽ giúp bạn tránh rơi vào bẫy.
Văn bản
Thông tin có thể được ẩn trong khoảng trắng và tab thừa ở cuối dòng (khoảng cách = 0, tab = 1), bằng ký tự vô hình (ký tự nối có độ rộng bằng 0/không nối) hoặc bằng ký tự tượng hình Unicode. Manh mối điển hình: "độ dài" của văn bản không khớp với những gì hiển thị.
- Kiểm tra trong đầu bếp điện tử và trình soạn thảo nâng cao để đếm ký tự/dòng so với số ký tự hiển thị.
- Các công cụ như StegSnow tự động hóa khoảng trắng/tab ở cuối dòng.
Bài nghe
Trong WAV/MP3/WMA, tin nhắn có thể tồn tại trong quang phổ, kênh độc lập, Siêu dữ liệu ID3hoặc được mã hóa là “modem”. Nghe bằng tai nghe và kênh riêng biệt; nếu nghe có vẻ quá ngẫu nhiên, thì đó có thể là dữ liệu.
- Công cụ: Máy hiển thị âm thanh, Bạo dạn, SoX (tạo ra quang phổ), Steghide, đầu bếp điện tử.
Hình ảnh
Trong PNG/JPG, mọi thứ đều được sử dụng: tin nhắn trên kênh R/G/B/A, LSB để lưu trữ các tệp nhị phân và EXIF để ẩn văn bản. Stegsolve, Stegonline và CyberChef giúp bạn áp dụng bộ lọc và xem xét kênh.và nếu bạn đang tìm kiếm các kỹ thuật OCR, bạn có thể xem cách Trích xuất văn bản từ hình ảnh trong Windows 11.
- Đối với loại Steghide stego, Stegseek Phương pháp này hiệu quả nếu bạn biết mẫu mật khẩu.
các định dạng khác nhau
Họ cũng dính hoàn thành các tập tin ở cuối những người khác hoặc các khối nhị phân được chèn vào giữa dữ liệu hợp lệ. lối đi bộ là bạn của bạn, nhưng hãy cẩn thận với các kết quả dương tính giả (rất phổ biến với PNG và tệp nhị phân lớn). Chuỗi GNU vẫn hữu ích trong việc phát hiện đường dẫn, tiêu đề hoặc đoạn văn bản. nhúng.
Nghiên cứu điển hình: từ tín hiệu số không đến tín hiệu ổn định
Hãy tưởng tượng bạn nhận được một mẫu Windows đáng ngờ. Đầu tiên, hãy tính toán hàm băm trên tất cả các máy mà bạn sẽ làm việc. để đảm bảo rằng bạn phân tích cùng một tệp trong mỗi môi trường.
Nếu môi trường cho phép, hãy xác định loại tệp (PE32/PE32+, kiến trúc). Xác nhận đó là PE32 và mong đợi nhìn thấy chuỗi tiêu đề DOS huyền thoại. cùng với tên phần. Nó trả về các chuỗi và phân tách chúng thành hai tập hợp kết quả: tham chiếu API/thư viện và dấu vân tay chứng chỉ/chữ ký.
Trong một cuộc điều tra thực tế với phần mềm tống tiền từ gia đình Ryuk, Chúng tôi đã làm việc với một mẫu có hàm băm SHA‑256 là:
7faeb64c50cd15d036ca259a047d6c62ed491fff3729433fefba0b02c059d5ed
Trích xuất chuỗi cho thấy các tiêu đề dự kiến, API hệ thống và dấu vết chứng chỉ (VeriSign, Microsoft, URL OCSP/CRL), nhưng một số chuỗi "kinh doanh" phần mềm độc hại (tin nhắn riêng, tuyến đường nội bộ). Điều này gợi ý việc đóng gói hoặc làm tối nghĩa. Chạy Xỉa không cung cấp thêm chuỗi trong trường hợp đó, củng cố giả thuyết.
Đối với phần chữ ký, khi xem xét siêu dữ liệu và Get-AuthenticodeChữ ký, Không tìm thấy chữ ký hiện tại hợp lệ. Có thể xảy ra trường hợp tệp nhị phân chứa thông tin chứng chỉ nhưng đã hết hạn hoặc bị thu hồi (hoặc đơn giản là bị giả mạo). Ở đây, certutil -verify y -cửa hàng giúp phân biệt chuỗi và trạng thái.
Bài học đạo đức: với năm phút phân tích tĩnh (chuỗi + siêu dữ liệu + chữ ký) Bây giờ bạn có thể phân loại, xây dựng giả thuyết và quyết định những gì cần theo dõi trong phân tích động: tệp, mạng, sổ đăng ký, chống gỡ lỗi, v.v.
Nếu bạn là một nhà phát triển và không muốn Strings "hát"
Mục tiêu của bạn có thể ngược lại: ngăn không cho bên thứ ba xem chuỗi nhúng của bạn (nhật ký có tên thủ tục, thuật toán, v.v.). Có một số chiến thuật, tất cả đều có phí.
- Băm/biến đổi trong biên dịch thông qua siêu lập trình hoặc ký tự người dùng. Ưu điểm: các chuỗi không xuất hiện ở dạng văn bản thuần túy. Nhược điểm: nó phức tạp và có thể làm giảm thời gian biên dịch, đặc biệt nếu bạn sử dụng chuỗi công cụ cũ hơn (ví dụ: hỗ trợ C++14 hạn chế trong VS2013).
- Mảng Char/hex thay vì chuỗi ký tự. Nếu bạn làm đúng, bạn tránh được sự phát hiện tầm thường của strings/strings.exe. Nhưng chúng vẫn tiếp tục xuất hiện khi mở tệp thực thi bằng trình soạn thảo và một lần nữa, bạn tăng độ phức tạp (macro, bảo trì).
- Bước sau khi biên dịch để mã hóa/“vá” nhị phân và giải mã khi chạy. Nó có hiệu quả nếu bạn bảo vệ các khóa và tuyến đường, nhưng ảnh hưởng đến tính toàn vẹn của tệp thực thi và bạn có thể kích hoạt các kết quả dương tính giả trong AV.
Vì không có kiến trúc máy khách-máy chủ để yêu cầu chuỗi từ xa nên mọi thứ vẫn ở trạng thái cục bộ. Sự che giấu đơn giản (XOR/rot, các khóa có nguồn gốc từ thời gian chạy) là đủ để bỏ qua các chuỗi cơ bản, nhưng hãy nhớ rằng các công cụ như FLOSS cố gắng đảo ngược các chuyển đổi đã biết. Kỹ thuật càng chung chung thì việc phát hiện và tự động trích xuất càng dễ dàng.
Mẹo làm việc và các lệnh hữu ích
Để tăng tốc độ lặp lại của bạn, lọc theo ngữ cảnh (mạng, mật mã, sổ đăng ký, quy trình) thay vì "đọc tất cả". Trên Windows, nó kết nối với findstr và trong PowerShell với Select-String.
strings.exe muestra.exe | findstr /i "http https winhttp wininet socket connect POST GET"
Trên Linux, hãy chuyển đổi mã hóa và độ lệch nếu bạn nghi ngờ UTF-16: kiểm tra cả hai biến thể ASCII và UnicodeMột số phím tắt hữu ích:
# 1) Solo cadenas largas, con offset en hex
strings -n 12 -t x muestra.bin | head -n 200
# 2) Intento en UTF-16 BE (según implementación)
strings -e S -n 8 muestra.bin | grep -i "http\|ocsp\|crl"
Khi bạn định vị tên thư viện và tên hàm, tham chiếu chéo nó với logic mà bạn mong đợi sẽ thấy. Nó có thao tác với tệp không? Nó có ghi nhật ký tệp không? Nó có chạm vào Bảng tạm không? Các lệnh nhập cung cấp cho bạn bản đồ các khả năng hiển thị (hãy cẩn thận: API cũng được phân giải động để ẩn dấu vết).
Bắt đầu nhanh: Siêu dữ liệu PKI, Chữ ký và URL
Khi đối mặt với các chuỗi đề cập đến AIA/CDP hoặc OID, Sử dụng Certutil để xác minh mối quan hệ tin cậy và kiểm tra xem CRL/OCSP có giải quyết được không. Một số lệnh hữu ích để sử dụng hàng ngày:
certutil -hashfile fichero.exe SHA256- Băm nhanh để đảm bảo tính toàn vẹn.certutil -dump fichero.exe- Cấu trúc nhúng/chữ ký bị xóa.certutil -verify certificado.cer- Xác thực chuỗi và thu hồi (con vịt-urlfetchnếu có).certutil -store my- Danh sách chứng chỉ kho người dùng/máy (-user/-enterprise(tùy trường hợp).certutil -URLcache *- Kiểm tra/xóa bộ nhớ đệm từ URL (CRL/OCSP).
Ghi Sự hiện diện của các chuỗi có tên lạ (VeriSign, Microsoft) không hợp lệ hóa tệp nhị phân.. Luôn kiểm tra tính hợp lệ và trạng thái hiện tại.
Vượt ra ngoài chuỗi: Sắp xếp để ưu tiên
Phân tích tĩnh có một số lớp: phân tích tập tin mà không cần thực thi nó, phân tích động (chạy trong môi trường được kiểm soát) và phân tích mã (tĩnh/động). Strings thuộc loại đầu tiên và lý tưởng cho một phân loại sớm cho bạn biết phải đi đâu. Để giám sát các quy trình, hãy sử dụng Trình khám phá quy trình y VirusTotal.
Nếu chuỗi của bạn hiển thị API mã hóa, xóa bóng, kết nối mạng với HTTP/SMB và khóa các đối tượng, nghĩ đến ransomware/Trojan có khả năng di chuyển ngangNếu bạn chỉ thấy nhiễu và entropy cao, hãy ưu tiên giải nén, xóa bộ nhớ hoặc theo dõi API trong hộp cát.
Ví dụ hữu ích về PowerShell Get-Content
Mặc dù nó không phải là sự thay thế cho dây đàn, Get-Content là ký tự đại diện để xem các tập tin từ bảng điều khiển:
# Leer las primeras 5 líneas
Get-Content -Path .\LineNumbers.txt -TotalCount 5
# Última línea en un log en vivo
Get-Content -Path .\app.log -Wait -Tail 1
# Leer como bytes de golpe
$bytes = Get-Content -Path .\muestra.exe -AsByteStream -Raw
$bytes.Length
Đối với ADS trên NTFS, kiểm tra và trích xuất các luồng ẩn với -Stream, như bạn đã thấy trước đây. Đây là một cách điển hình của kỹ thuật ẩn tin trong Windows không xuất hiện trong danh sách tệp "bình thường".
Với tất cả những điều trên, bạn có một lộ trình rõ ràng: xem lại loại tệp và hàm băm, trích xuất chuỗi (ASCII và Unicode), lọc theo các manh mối quan trọng, sử dụng FLOSS nếu có dấu hiệu bị che giấu, kiểm tra siêu dữ liệu và chữ ký bằng PowerShell/certutil và nếu phù hợp, mở rộng sang stego và ADS. Ngay cả khi bạn không tìm thấy "vàng" trong chuỗi, sự trống rỗng đó cũng dẫn bạn đến các kỹ thuật che giấu, đóng gói hoặc chống phân tích.và giúp bạn tập trung vào phân tích động và mã. Chia sẻ hướng dẫn này và nhiều người dùng hơn sẽ biết cách sử dụng Strings trong Windows..