strings
This commit is contained in:
parent
1ae2c4c40b
commit
545848e0d0
107
content/posts/2024/linux/strings.md
Normal file
107
content/posts/2024/linux/strings.md
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
---
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
|
Много всего, да, но обе строки из программы присутсвуют.
|
||||||
|
|
||||||
|
**Вывод:** Утилита очень полезная! Применение?... много.
|
||||||
|
Я вот сегодня вытащил из бинарника пароль администратора от устройства,
|
||||||
|
к которому осуществлялось подключение и на котором была очень ценная информация.
|
||||||
|
(🥲 шучу).
|
Loading…
Reference in New Issue
Block a user