---
title: "🎹 Команда strings"
date: 2024-08-17T22:45:47+03:00
draft: false
tags: [linux, tips]
---

## ℹ️ strings == строки

## Пример

Накидаю простую программу на Си, которая инициализирует массив символов `ololo_str`
со значением `It's unique text`,
а также выводит в консоль `GrindCore \m/`.

Листинг `strings.c`

```c
#include <stdio.h>

int main(int argc, char const *argv[]) {
  char * ololo_str = "It's unique text";

  puts("GrindCore \\m/");

  return 0;
}
```

Сборка и запуск

```sh
tcc -o string string.c # Компиляция
./string               # Запуск
```

Выхлоп программы:

```text
GrindCore \m/
```


## О `strings`

Двоичные файлы, такие как программные файлы, могут содержать строки читаемого человеком текста.
Но как мы их видим? Если использовать `cat` или `less`, то, скорее всего,
зависнет окно терминала. Программы, предназначенные для работы с текстовыми файлами,
не могу обрабатывать исполняемые файлы, содержащие непечатаемые символы.

_Спизжено [отсюда](https://wiki.merionet.ru/articles/kak-ispolzovat-komandu-strings-v-linux)._


## Пример работы

Давай натравим `strings` на исполняемый файл `string`?

Выполняю команду:

```sh
strings ./string
```

и вижу следующий результат:

```text
/lib64/ld-linux-x86-64.so.2
__libc_start_main
puts
main
__gmon_start__
libc.so.6
GLIBC_2.34
GLIBC_2.2.5
libc.so.6
PTE1
It's unique text
GrindCore \m/
.text
.data
.bss
.rodata.cst4
.eh_frame
.init
.fini
.preinit_array
.init_array
.fini_array
.interp
.dynsym
.dynstr
.hash
.dynamic
.got
.rela.got
.plt
.gnu.version
.gnu.version_r
.shstrtab
```

Много всего, да, но обе строки из программы присутсвуют.

**Вывод:** Утилита очень полезная! Применение?... много.  
Я вот сегодня вытащил из бинарника пароль администратора от устройства,
к которому осуществлялось подключение и на котором была очень ценная информация.  
(🥲 шучу).
