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