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