Русский / Russian English / Английский

Сейчас на форуме: Gideon Vi
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Основной форум —› Реверсинг под Linux
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
Посл.ответ Сообщение


Ранг: 668.3 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 18 февраля 2014 21:54 · Поправил: 8 июля 2016 13:41 ARCHANGEL New!
Цитата · Личное сообщение · #1

Уважаемые форумчане. Знаю, что данный ресурс создавался для обсуждения тем, связанных с ОС Windows. Но ведь есть уже разделы по андроиду, по flash, по дотнету. Эти все темы не совсем связаны с Windows, точнее сказать, весьма далеки от исследования нативных приложений под винду, поэтому мне кажется логичным обсуждение ос семейства Linux.

Так исторически сложилось, что мне приходится тратить некоторое время на изучение этой темы, а изучать-то и нечего. Есть литература по администрированию Linux, но вот хорошей добротной (и свежей) инфы по линуксу практически нет.

Есть мысли разделить найденный материал на несколько категорий, т.к. благодаря людям с форума и гуглу появилась хоть какая-то инфа.

Настройка рабочей среды
Подраздел охватывает темы, прямо или косвенно связанные с установкой, настройкой и подготовкой к работе ОС Linux.
--> Настройка сети в VirtualBox <--
--> Установка VirtualBox Guest Additions в Kali<--
--> Linux. Карманный справочник. Скотт Граннеман <--
--> Инструменты кросскомпиляции для ARM <--
--> Компилятор GNU GCC<--
--> Команды Linux <--
--> Удалённая отладка с помощью gdbserver и Ida Pro <--
--> Обзор инструментария для исследований (не первой свежести обзор) <--
--> Удаленная отладка в Linux при помощи связки GDB-gdbserver <--

Введение в устройство ОС
Подраздел в общем и целом, без низкоуровневых деталей и кода, описывает устройство ОС. Поверхносто, но нужно для общего представления.
--> Анатомия ядра Linux<--
--> Исследование ядра Linux'а<--
--> Anatomy of Linux dynamic libraries <--
--> Обзор Linux <--
--> Динамическое связывание библиотек в Windows и Linux <--
--> Linkers and Loaders Guide <--

Программирование
Подраздел посвящён системному программированию под Linux.
--> Ядро Linux в комментариях<--
--> Pro Linux Embedded System <--
--> Linux Device Drivers, Third Edition <--
--> Знакомство с межпроцессным взаимодействием на Linux <--
--> Ещё одна книга по модулям ядра <--
--> Netlink Library <--
--> Kernel API Reference <--
--> Литература по программированию модулей ядра <--

Статьи по реверсингу

2002-2004 год:
--> Reverse Engineering Linux x86 Binaries <--
--> Reverse Engineering Linux ELF Binaries on the x86 <--
--> Reverse Engineering using the Linux Operating System.<--

Другие статьи:
--> Отладка двоичных файлов под gdb <--
--> Особенности национальной отладки в UNIX <--
--> Погружение в технику и философию gdb (окончание) <--
--> Детальный анализ бэкдора Linux/Ebury <--
--> 8 gdb tricks you should know <--

Разное

Касперски --> Искусство дизассемблирования<--
--> Linux System Call Table for x86_64 <--
--> System call tables x86 (BoRoV настоятельно рекомендует) <--
--> Отладка с помощью GDB <--
--> Команды GDB<--
--> Что делать, если отлаживаемый процесс форкается <--
--> Про способы внедрения кода в чужое адресное пространство <--
--> Обзор защит программного обеспечения под Linux <--
--> How to build your own kernel on Ubuntu <--
--> EDB - оллиподобный отладчик для х86/x64 <--
--> По многочисленным просьбам трудящихся - Таблица syscall'ов под ARM <--

| Сообщение посчитали полезным: VodoleY, OnLyOnE, Carpe DiEm, hors, ELF_7719116, =TS=, verdizela, Tony_Stark, mak, anonymous, synthetic, rd111


Ранг: 2.4 (гость)
Статус: Участник

Создано: 21 апреля 2014 01:58 New!
Цитата · Личное сообщение · #2

Я использую убогий Eclipse CDT, наверняка есть что-то еще но я к ниму привык.


Ранг: 668.3 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 21 апреля 2014 14:45 New!
Цитата · Личное сообщение · #3

SPLESH
Да, я его пробовал - для реверсинга абсолютно непригодный

Ранг: 71.6 (постоянный)
Статус: Участник

Создано: 5 мая 2014 20:04 New!
Цитата · Личное сообщение · #4

ARCHANGEL
К большому сожалению, вообще более-менее рабочих фронтендов к gdb нет. Могу только посоветовать использовать TUI (gdb --tui)

Ранг: 1.0 (гость)
Статус: Участник

Создано: 6 мая 2014 08:35 New!
Цитата · Личное сообщение · #5

ValdikSS
Если уж вспомнили про TUI, то можно и DDD попробовать.

Ранг: 0.1 (гость)
Статус: Участник

Создано: 7 мая 2014 16:10 · Поправил: tux1-1 New!
Цитата · Личное сообщение · #6

ARCHANGEL пишет:
В общем, возник вопрос. Есть ли какой-то годный фронт энд для gdb с поддержкой питона?


GDB поддерживает python из коробки (если собирать с поддержкой python`a естественно). Т.е. достаточно найти просто удобный фронтенд для RE с возможностью использования командной строки GDB, но я таковых не видел. Есть только навороченные gdbinit файлы:
--> Link <--


Ранг: 668.3 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 7 мая 2014 16:35 New!
Цитата · Личное сообщение · #7

tux1-1
Это интересно. Где можно почитать про сборку именно с поддержкой питона? Я наивно полагал, что вариант сборки gdb может быть только один ( в плане поддержки скриптов).

Ранг: 0.1 (гость)
Статус: Участник

Создано: 7 мая 2014 18:34 · Поправил: tux1-1 New!
Цитата · Личное сообщение · #8

ARCHANGEL
ARCHANGEL пишет:
Где можно почитать про сборку именно с поддержкой питона?

Я нигде более-менее полного туториала не встречал. Все собирается стандартно
./configure
make

GDB сбилдится автоматически с поддержкой python, если в систем установлен пакет python-dev (для python2) или python3-dev (для python 3). Можно сбилдить принудительно, указав путь к python'у с помощью опции --with-python=/path/to/python
Ну и у ./configure есть help
./configure --help

GDB 7.7, который в репозиториях Ubuntu 14.04, поддерживает python3 из коробки. Проверить это очень просто: запустить GDB и выполнить py print("hello"), если выполнилось, то python присутствует. Документация по API --> Link <--.
Запустить скрипт можно командой source script.py из gdb.

PS: С Android NDK поставляется древняя версия без поддержки python.
PPS: Voltron не заработает без поддержки python.


Ранг: 668.3 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 8 мая 2014 15:53 · Поправил: ARCHANGEL New!
Цитата · Личное сообщение · #9

Что-то, однако, кросскомпиляция с поддержкой питона не идёт:
checking for python... /usr/bin/python
checking for python2.7... no
configure: error: python is missing or unusable

и гугление не помогает.


Ранг: 1021.7 (!!!!)
Статус: Участник

Создано: 8 мая 2014 16:05 New!
Цитата · Личное сообщение · #10

отчет в config.log
а что и как делается в configure.in

говорил же тебе, изучи как это в целом работает
а обычное запускание configure это не то


Ранг: 668.3 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 8 мая 2014 23:07 New!
Цитата · Личное сообщение · #11

reversecode
В целом для меня всё в линуксе работает следующим образом. Есть некий configure, но не всегда. Либо он создаёт makefile, либо этот файл уже есть. И если повезёт, то оно соберётся по настройкам makefile'a. Если нет, то придётся доставлять кучу пакетов, прописывать кучу параметров, причём на каждой версии линукса, на каждом дистрибутиве это всё может выглядеть по-разному. И нет никакой системы, как в общем собрать софт.


Ранг: 1021.7 (!!!!)
Статус: Участник

Создано: 8 мая 2014 23:17 · Поправил: reversecode New!
Цитата · Личное сообщение · #12

если есть configure то должен быть и configure.in .ac, это общий шаблон всегда должен быть
когда есть confingure.in но нет configure, значит нужно запустить automake или boostrap
которые создадут configure
а уже configure создаст makefile-ы

созданный configure очень закрученный shell
иногда сложно понять как работает, поэтому проще логику работы смотреть в шаблон configure.in

свою работу, проверки итд configure пишет в файл config.log
по нём можно точнее понять что где как проверялось и почему не прошло, если мало инфы то смотреть в configure.in


когда нет configure и есть makefile, это простые системы сборки, чаще стандартные или самописные

еще есть cmake скрипты итд, но это уже др тема

| Сообщение посчитали полезным: ARCHANGEL


Ранг: 510.4 (!)
Статус: Модератор

Создано: 9 мая 2014 01:20 New!
Цитата · Личное сообщение · #13

http://www.tldp.org/LDP/abs/html/
все и даже больше

Ранг: 37.9 (посетитель)
Статус: Участник

Создано: 9 мая 2014 20:17 New!
Цитата · Личное сообщение · #14

Carpe DiEm пишет:
Вчера прочитал новость об уж доступном переводе второго издания :
" Linux. Системное программирование"
www.piter.com/product/linux-sistemnoe-programmirovanie-2-e-izd
первая была ещё в 08 году и давно не актуальна .

Из-за странной ценовой политики стоимость печатной и электронной 464 рубля


кто желает получить себе эту книгу к тому же в два раза дешевле - пишите контакты для связи в личку, жаба задавила за пдф почти 500 рублей платить, может будет ещё один желающий?

Ранг: 0.9 (гость)
Статус: Участник

Создано: 8 июня 2014 06:51 New!
Цитата · Личное сообщение · #15

Не подскажете, есть ли IDA 6.* под Linux, у которой работает сохранение и экспорт файлов?
Все, что я смог найти - это версию 6.3, в которой данный функционал вырезан.


Ранг: 668.3 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 10 июня 2014 10:40 New!
Цитата · Личное сообщение · #16

fm8f
Видимо, найти не получится. Только запуск виндовой иды под wine.

Ранг: 0.9 (гость)
Статус: Участник

Создано: 14 июня 2014 10:11 New!
Цитата · Личное сообщение · #17

ARCHANGEL
Спасибо. А это поможет от захвата экрана и клавиатуры?
Т.е. исследуемая программа (игра в fullscreen) вызывает функции _XLockDisplay, а потом еще и _XGrabKeyboard.
Или такое даже под Windows делают с помощью 2х компов и удаленной отладки?


Ранг: 668.3 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 14 июня 2014 19:50 New!
Цитата · Личное сообщение · #18

fm8f
Мне кажется - тогда нет смысла искать иду под линукс. gdbserver + Ida под windows, и всё будет.

Ранг: 0.9 (гость)
Статус: Участник

Создано: 15 июня 2014 15:29 New!
Цитата · Личное сообщение · #19

ARCHANGEL
Связку gdbserver + Ida попробовал в первый раз.
Сначала опробовал мануал на тестовом компе с host: Win7 x64, guest: Ubuntu 14.04 x86. Сработало сразу, подробный мануал. Мне даже не пришлось 1-ый пункт выполнять, т.к. на тестовом компе юзер принадлежит к группе администраторов.

Без виртуалки и мануалов запустилась Ida 6.1 под Wine (а потом и Ida 6.5 fixed demo под Wine) + gdbserver:
1. В терминале: gdbserver localhost:23946 main
2. В Ida под Wine: debuggers >> attatch >> Remote GDB
3. Готово:

$ gdbserver localhost:23946 main
Process main created; pid = 5298
Listening on port 23946
Remote debugging from host 127.0.0.1
Hello1
Hello2
Hello3

Child exited with status 0
readchar: Got EOF
Remote side has terminated connection. GDBserver will reopen the connection.
Listening on port 23946


Есть только пара вопросов:
1. Чтобы заново начать отлаживать программу мне приходится:
а) Закрыть терминал / убить gdbserver и снова вбивать gdbserver localhost:23946 main
б) А потом в Ida: Debugger - Attach to process...
Можно ли сказать gdbserver-у, чтобы он перезапускал процесс по достижении EOF?

2. Появление строк "Hello*" происходит только при достижении EOF (или окончании отладки), т.е. в момент отладки я не вижу этих сообщений.
Можно ли во время отладки при использовании Remote GDB увидеть в Ida строки выводимые с помощью printf-ов?


Ранг: 668.3 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 15 июня 2014 19:42 New!
Цитата · Личное сообщение · #20

fm8f

Можно ли сказать gdbserver-у, чтобы он перезапускал процесс по достижении EOF?

По поводу закрытыя терминала и убийства gdbserver, то можно делать не так. У меня такая же проблема, но я открываю другое окно терминала, и в нём выполняю:


kill -9 `pidof gdbserver`; gdbserver :5000 debugee


Более удобные способы мне неизвестны.

Можно ли во время отладки при использовании Remote GDB увидеть в Ida строки выводимые с помощью printf-ов?


В иде - нет, а вот в консоли (терминале), в которой крутится gdbserver у меня сообщения появляются во время отладки.

| Сообщение посчитали полезным: fm8f


Ранг: 0.9 (гость)
Статус: Участник

Создано: 13 июля 2014 16:02 New!
Цитата · Личное сообщение · #21

ARCHANGEL, спасибо!
Но у меня еще есть вопросы. Нашел библиотеку (so-файл во вложении), а он чем-то запакован или как-то изменен.
При этом IDA на него ругается: SHT table size or offset is invalid. Continue?
но обрабатывает и я вижу интересующие функции, а вот при использовании ltrace она вообще все портит:
ltrace ./mygame
posix_memalign(0xff9817f0, 16, 8, 1) = 0
fread(0xa042b78, 1, 2310, 0xa042a10) = 2310
fclose(0xa042a10) = 0
Couldn't find .dynsym or .dynstr in "./libsteam_api.so"


Не подскажешь, как ее можно распаковать или исправить?

reversecode пишет:
grep myprog /proc/$1/maps | sed -n 's/^\([0-9a-f]*\)-\([0-9a-f]*\) .*$/\1 \2/p' | while read start stop; do gdb --batch --pid $1 -ex "dump memory $1-$start-$stop.dump 0x$start 0x$stop"; done

reversecode, не совсем понимаю первую команду. Подразумевается, что это bash-скрипт, который на вход получает PID процесса, запущенного программой myprog? Можно ли этим способом сдампить so-файл?

{ Атач доступен только для участников форума } - libsteam_api.so


Ранг: 1021.7 (!!!!)
Статус: Участник

Создано: 13 июля 2014 16:20 New!
Цитата · Личное сообщение · #22

она сама себя запакована, там в ентри поинте пакер
ну так под идой запускаешь прогу и после отработки библиотеки адресса куда она загружена она будет распакована
она в памяти уже распакованая лежит

Добавлено спустя 1 минуту
да баш скрипт дампит адреса памяти. поскольку в них уже все загружено и паспаковано
либы тоже можно дампить

| Сообщение посчитали полезным: fm8f


Ранг: 0.9 (гость)
Статус: Участник

Создано: 13 июля 2014 23:11 · Поправил: fm8f New!
Цитата · Личное сообщение · #23

reversecode, спасибо за помощь!
Написал тестовую программу main, который использует тестовую libctest.so.
bin$ grep libctest.so /proc/1914/maps
f7736000-f7737000 r-xp 00000000 08:02 266549 /path/to/libctest.so
f7737000-f7738000 r--p 00000000 08:02 266549 /path/to/libctest.so
f7738000-f7739000 rw-p 00001000 08:02 266549 /path/to/libctest.so

Закинул твой скрипт в файл dump.sh и выполнил:
bin$ sudo ./dump.sh 1914
0xf773b425 in __kernel_vsyscall ()
0xf773b425 in __kernel_vsyscall ()
0xf773b425 in __kernel_vsyscall ()

На выходе получил 3 файла:
bin$ file 1914-f773*
1914-f7736000-f7737000.dump: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
1914-f7737000-f7738000.dump: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
1914-f7738000-f7739000.dump: data

Но ни один из них не является полным so-файлом. По крайней мере, если выкинуть оригинальный libctest.so и попытаться взять любой из дампов, то прога не заработает. Вываливается с ошибкой "Ошибка шины (сделан дамп памяти)". Их нужно как-то объединить?
Во вложении исходники простейшей программы main и тестовой библиотеки libctest.so на С++, собранные бинарники и сдампленные файлы.

{ Атач доступен только для участников форума } - libctest.tar.xz


Ранг: 1021.7 (!!!!)
Статус: Участник

Создано: 13 июля 2014 23:20 New!
Цитата · Личное сообщение · #24

а вы когда дамперами под винду пользуетесь они тоже готовые работающие екзе клепают?))
ясное дело что тупо сдампив секции - работающий ельф не получить
мне для анализа и разбора алгоритмов хватает

Ранг: 0.9 (гость)
Статус: Участник

Создано: 13 июля 2014 23:42 · Поправил: fm8f New!
Цитата · Личное сообщение · #25

Я программист без опыта реверса и взлома. Основной системой давно стоит Linux и под Windows я ничего не дампил.
Тогда вопрос меняется, можно ли libsteam_api.so как-то распаковать и получить работающий ельф? Есть ли подобный функционал в IDA или плагинах к нему?
Или может быть есть средства, с помощью которых можно отследить вызовы процедур из запакованного libsteam_api.so? Я бы для этого использовал ltrace, но он ругается: Couldn't find .dynsym or .dynstr in "./libsteam_api.so"


Ранг: 134.9 (ветеран)
Статус: Участник
Qt Developer

Создано: 14 июля 2014 12:16 New!
Цитата · Личное сообщение · #26

fm8f пишет:
Тогда вопрос меняется, можно ли libsteam_api.so как-то распаковать и получить работающий ельф?


Можно. Распакованный файл: --> Link <--

| Сообщение посчитали полезным: fm8f


Ранг: 0.9 (гость)
Статус: Участник

Создано: 14 июля 2014 20:02 · Поправил: fm8f New!
Цитата · Личное сообщение · #27

hors, большое спасибо!
Можешь рассказать, как ты это сделал? Мне не важно под Windows ты это сделал или под Linux.
Хочу побольше узнать, чтобы по 10 раз потом не просить.

Дай человеку рыбу, и он будет сыт один день, научи его ловить рыбу, и он будет сыт всегда.

Ранг: 112.9 (ветеран)
Статус: Участник

Создано: 23 июля 2014 22:56 New!
Цитата · Личное сообщение · #28

Есть образ фрибсд с зашифрованным разделом. Нужно отладить его расшифровку. В ядре я вроде бы нашел нужные адреса. Но вопрос как остановится на нужном адресе или на точке входа в kernel.

Я попробовал отладку через ida + bochs. После mbr управление теряется, не удается нормально поставить точку останова.

Кто-нибудь сталкивался с подобной задачей?


Ранг: 1021.7 (!!!!)
Статус: Участник

Создано: 23 июля 2014 23:05 New!
Цитата · Личное сообщение · #29

при работе с бошем есть два варианта,
первый бош работает как емулятор cpu и привелегированые инструкции как и многое другое может не выполнятся или выполнятся не так как надо

и другой вариант, когда ида цепляется как отладчик, тогда можно хоть всю ось отлаживать,

что бы уточнить, если запустить без точек останова из под иды, работает ли образ ос полноценно?

как вариант конечно может баг и имел место но уже давно исправили

Ранг: 112.9 (ветеран)
Статус: Участник

Создано: 23 июля 2014 23:12 · Поправил: vden New!
Цитата · Личное сообщение · #30

Я кидаю bxrc файл в иду, она сама создает проект. И по нему я отлаживаюсь. Т.е. думаю что работает как полноценный отладчик. По крайней мере под идой запускается также как и без нее (точки останова игнорируются, возможно какие-то проблемы с переходом в защищенный режим). При отладке биоса точки останова срабатывают.

ida старая 6.1 + bochs 2.3.7


очень похоже на вот это

https://www.hex-rays.com/products/ida/support/idadoc/1333.shtml

Disk image operation mode:

- Data/Software breakpoints are not always triggered: During a debugging session, when a breakpoint is created while the protected mode/paging is enabled, the page table information is used to translate addresses and correctly create the breakpoint. When debugging session is started again, IDA cannot access translation tables to re-create the same breakpoint, thus the breakpoint will be created without any translation information (it will be treated as physical addresses) This is why those breakpoints are not triggered. As a workaround, we suggest disabling those breakpoints and re-enable them when paging is enabled. This problem can also arise when the "use virtual breakpoints" option is enabled.

Тогда вопрос отловить переход в защищенный режим.

reversecode пишет:
демка IDA 6.6 с офсайта поддерживает вроде бош
попробуй с ней

Спасибо, попробую.

6.6 действительно стабильнее. Не теряет управление при F7/F8.
С точками останова пока не разобрался.


Ранг: 1021.7 (!!!!)
Статус: Участник

Создано: 23 июля 2014 23:15 · Поправил: reversecode New!
Цитата · Личное сообщение · #31

демка IDA 6.6 с офсайта поддерживает вроде бош
попробуй с ней

| Сообщение посчитали полезным: vden

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
 eXeL@B —› Основной форум —› Реверсинг под Linux

Видеокурс ВЗЛОМ