Blog/content/posts/2024/linux/strings.md

108 lines
2.5 KiB
Markdown
Raw Normal View History

2024-08-17 22:58:41 +03:00
---
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
```
Много всего, да, но обе строки из программы присутсвуют.
**Вывод:** Утилита очень полезная! Применение?... много.
Я вот сегодня вытащил из бинарника пароль администратора от устройства,
к которому осуществлялось подключение и на котором была очень ценная информация.
(🥲 шучу).