Blog/content/posts/2024/linux/strings.md
2024-08-17 22:58:41 +03:00

108 lines
2.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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