Сейчас на форуме: (+5 невидимых) |
eXeL@B —› Дневники и блоги —› Отладка программ под Linux |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 04 февраля 2017 20:21 · Поправил: Модератор · Личное сообщение · #1 0. Здравствуйте дорогие друзья,мне захотелось рассказать про отладку программ под Linux. Для начала я вам расскажу, что для этого нам потребуется. компилятор GCC,он присутствует практически во всех дистрибутивах. Поэтому его установку я объяснять не буду. Открываем терминал пишем. 1. mkdir ctest // Первая команда нам создаст каталог. 2. cd ctest // вторая перейдет в этот каталог. 3. nano ctest.c //а третья создаст файл ctest.c / откроет в текстовом редакторе nano. 4. Теперь нам необходимо ввести : Code:
5. сохранить наш код в данном файле, для этого нажмем Ctrl+X, на что нам редактор сообщит, сохранить или нет изменения в нашем файле, нажмем на клавиатуре Y или напишем Да. 6.Oткомпилировать нашу программу. gcc -o ctest ctest.c 7. ввести: s~ objdump -d ctest //теперь смотрим дамп. 8f23_04.02.2017_EXELAB.rU.tgz - 01.png |
|
Создано: 04 февраля 2017 20:33 · Личное сообщение · #2 |
|
Создано: 04 февраля 2017 20:43 · Поправил: dosprog · Личное сообщение · #3 |
|
Создано: 05 февраля 2017 02:34 · Личное сообщение · #4 |
|
Создано: 06 февраля 2017 02:46 · Личное сообщение · #5 |
|
Создано: 21 февраля 2017 19:28 · Поправил: gloom · Личное сообщение · #6 Если у кого есть опыт реальной отладки под linux (не крякмисов), то прошу откликнуться. Во-первых пытаюсь отладить службу, многопоточную. Во-вторых IDA очень нестабильно ведет себя. Прошу поделиться информацией на этот счет, т.к. опыта такого рода нет и информация в интернете скудна. Какими инструментами лучше всего пользоваться в таком случае? Действую таким образом: 1. Смотрю PID процесса netstat -lp, либо ps aux. 2. gdbserver аттачусь к процессу. 3. На виндовой машине открываю idaq64, гружу в него ELF файл этой службы и настраиваю отладку с удаленной машиной. Пока искал информацию в интернете по своей проблеме, наткнулся на то, что линукс отладчик IDA хреновый. И может в этом причина? Да и еще в самом gdb есть такая настройка, как set follow-fork-mode child. Как я понял в gdbserver такого нет или я ошибаюсь? Заранее спасибо за любую ценную информацию. ----- once you have tried it, you will never want anything else |
|
Создано: 21 февраля 2017 20:25 · Личное сообщение · #7 gloom пишет: Во-вторых IDA очень нестабильно ведет себя. Не помню уже точно, но когда я искал в чём дело, проблема где-то около того, что двиг для отладки под linux, который используется в иде, при N выполняющихся потоков и ещё каких-то условиях подвергается спаму сигналов SIG_USER. Проблему можно разрешить только если нормальной парой gdb-gdbserver и необязательно самых новых версий ----- IZ.RU |
|
Создано: 22 февраля 2017 21:35 · Поправил: whoami · Личное сообщение · #8 @gloom Если связка IDA-GDB ведет себя не стабильно, можно еще попробовать отладить с помощью linux_server из пакета IDA: просто запустить ее на Линуксе, потом из Винды подключиться так: Debugger > Select Remote Linux Debugger. Ну и на вскидку, если вдруг не знаете, в Линуксе есть классный трасировщик системных вызовов strace (который использует штатный механизм отладки ptrace) и трасировщик библиотечных вызовов ltrace, оба хороши и очень могут помочь. Добавлено спустя 0 минут Ну а если забыть про IDA, то есть еще и | Сообщение посчитали полезным: gloom |
|
Создано: 22 февраля 2017 22:35 · Личное сообщение · #9 |
|
Создано: 22 февраля 2017 22:43 · Личное сообщение · #10 |
|
Создано: 23 февраля 2017 02:33 · Поправил: Abraham · Личное сообщение · #11 |
|
Создано: 23 февраля 2017 04:04 · Личное сообщение · #12 Abraham пишет: что для этого нам потребуется. компилятор GCC,он присутствует практически во всех дистрибутивах. Но однако Abraham пишет: 1. mkdir ctest // Первая команда нам создаст каталог. 2. cd ctest // вторая перейдет в этот каталог. 3. nano ctest.c //а третья создаст файл ctest.c / откроет в текстовом редакторе nano. Т.е. по вашему gcc поставить проще чем создать директорию и установить nano (сюрприз, он не во всех дистрах по умолчанию ) ? Более прикольно выглядело бы так. 3. vi ctest.c 4. А теперь ищите как из него выйти БУГАГА |
|
Создано: 23 февраля 2017 12:55 · Личное сообщение · #13 |
|
Создано: 23 февраля 2017 14:28 · Поправил: Abraham · Личное сообщение · #14 |
|
Создано: 03 марта 2017 04:22 · Поправил: Abraham · Личное сообщение · #15 У вас есть программа,если нет .... то это не беда, можно создать ее. Как , я написал выше. Теперь у нас есть с скомпилирована программа.Сейчас мы создадим файл , в нем будет наша программа , в виде ассемблерного кода. $ gcc -S prog.c $ cat prog.s мы видим ( Теперь протестируйте сами. Как и ожидалось, GCC компилятор создает исполняемый файл программы, который называется prog, и присваивает ему надлежащее разрешения должны быть выполнены (обратите внимание, что этот формат не создает промежуточный файл объекта). Когда программа запускается, она производит ожидаемый выход на консоли. Один очень полезный параметр командной строки является параметром -S. Это создает промежуточный ассемблере файл, созданный компилятором, прежде чем ассемблер монтирует его. Вот пример снаружи поставил используя параметр -S.) Prog файл показывает, как компилятор создал инструкции на языке ассемблера для реализации C программа исходный код. Это полезно при попытке оптимизировать приложения C, чтобы определить, каким образом компилятор реализует различные функции языка C в коде команды. я тип нудный не читайте, тестируйте. 01. $ gcc -S prog.c 02. $ cat prog.s |
|
Создано: 03 марта 2017 04:54 · Личное сообщение · #16 |
|
Создано: 03 марта 2017 05:19 · Поправил: Abraham · Личное сообщение · #17 dosprog Я создал простую демонстрационную программу. Основная программа имеет два контура. один, который вызывает function1 () 100 раз, и один, который вызывает function2 () 50000 раз. Каждая из функций, просто выполняет простые петли, хотя function2 () также вызывает function1 () каждый раз, когда она вызывается. |
|
Создано: 03 марта 2017 06:03 · Личное сообщение · #18 Abraham пишет: Доброй ночи!Здравствуйте друзья.Кто то с девушкой спит,а я с компьютером. Ну раз тут шутки за 600, то я сплю с Vovan666.Он поинтереснее женщины будет. Abraham пишет: Один очень полезный параметр командной строки является параметром -S. Это создает промежуточный ассемблере файл, созданный компилятором, прежде чем ассемблер монтирует его. Вот пример снаружи поставил используя параметр -S.) Prog файл показывает, как компилятор создал инструкции на языке ассемблера для реализации C программа исходный код. Facepalm.Это гугл транслейт.Лучше бы на инлише этот бот писал.Коднуть реггер и постер - дело пары строк кода. PS. /me ушел монтировать ассемблер. ----- TEST YOUR MIGHT |
|
Создано: 13 марта 2017 13:09 · Поправил: Abraham · Личное сообщение · #19 01. Приветствую вас друзья! Продолжаю говорить, об этичном ассемблере,под лицензия GNU. Без всякого закрыто говна, которое может через открытые порты вшивать малварь .)) Вас ждет, очередная фишка . Ладно, давайте вместе смаканем и глянем. Начнем с того, что посмотрим машинный код. objdump -D pro | grep -A5 main.: Программа objdump выводит слишком много строк, поэтому в командной строке ее вывод направлен на вход grep с параметром, задающим вывести только 5 строк. можно задать 1000, в чем проблема?! 02. Тот же код можно вывести в синтаксисе Intel, указав для objdump дополнительный параметр командной строки -M intel и получив следующий результат. objdump -M intel -D pro | grep -A5 main.: это наша программа =>( pro ) Я надеюсь вы уже скомпилировали мою программу?Нет.....? Так за дело ! Code:
|
|
Создано: 13 марта 2017 22:28 · Личное сообщение · #20 Abraham Перенесено в раздел форума Дневники и блоги ----- EnJoy! | Сообщение посчитали полезным: Abraham |
|
Создано: 15 марта 2017 20:09 · Поправил: Abraham · Личное сообщение · #21 Jupiter ok.) 00. GDB. Отладчик позволяет пошагово выполнять скомпилированную программу, исследовать память программы и просматривать регистры процессора. Ниже показано, как с помощью GDB выяснить состояние регистров процессора непосредственно перед началом работы программы. На функции main() установлена точка останова (breakpoint), поэтому выполнение останавливается непосредственно перед началом нашего кода. Затем GDB запускает программу, останавливается в точке останова и получает команду показать все регистры процессора и их текущее состояние. Code:
|
|
Создано: 15 марта 2017 22:15 · Личное сообщение · #22 |
|
Создано: 16 марта 2017 10:32 · Личное сообщение · #23 Abraham А скрин данного треда форума для чего? Для демонстрации браузера Tor? Abraham пишет: Вдруг, форум exelab.ru будет захвачен правоохранительными органами, ведь для них это жирная добыча Так форум же открытый. Логи банов есть. А всего остального - нет. Даже если допустить, что всё уже захвачено, то тут нет ничего такого, чего товарищ майор не может получить обычными средствами. ----- EnJoy! |
|
Создано: 17 марта 2017 07:37 · Личное сообщение · #24 Abraham пишет: И где то здесь, теряется мой секретный ключ.Поможете найти ? Это упакованный в PSK стандарте или как он там.. RSA ключ.. еслиб погуглил сам формат бы нашел RSA_PubKey:= '*********************************************************************************'+ '*********************************************************************************'+ '*********************************************************************************'+ '*********************************************************************************'+ ''****************************************************************************'+mw=='; sRes:=DecodeBase64(RSA_PubKey); mLog.Lines.Add(DumpStr(sRes)); expLength:=DecodeLongInt(sRes,12); modLength:=DecodeLongInt(sRes,16+expLength); mLog.Lines.Add('expLength='+IntToHex(expLength,8)); mLog.Lines.Add('modLength='+IntToHex(modLength,8)); sTmp:=''; for i:=1 to Length(sRes) do begin sTmp:=sTmp+' '+IntToHex(ord(sRes[i]),2); end; ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 17 марта 2017 22:21 · Личное сообщение · #25 |
|
Создано: 20 марта 2017 05:05 · Поправил: Abraham · Личное сообщение · #26 Code:
Друзья, чтобы вы не штудировали много литературы ,и не вбивать одну и туже команду. Синтаксисом Intel, нужно настроить на работу наш инструмент. Внутри GDB синтаксис дизассемблирования Intel можно задать командой. Code:
|
|
Создано: 20 марта 2017 07:16 · Личное сообщение · #27 VodoleY пишет: вышли мне тоже стойкой хорошей травы.. графика тут причем? VodoleY, на траву не стоит расчитывать: Abraham пишет: Не бере в голову , я отдыхаю, пивасик накатваю... приятная музыка, под пивасик..... самое то.... Я тоже не понял про графику )) У меня тоже музыка(из подписи). А пивасика нет... Без него мучаюсь с юникорном. Но идея хорошая про вышли мне! Присоединяюсь - мне тоже пива!!! ----- IZ.RU |
|
Создано: 04 апреля 2017 11:07 · Поправил: Abraham · Личное сообщение · #28 Приветствую вас друзья ! Займемся отладкой нашей программы. Сначала выводится исходный код и результат дизассемблирования функции main(). Затем на начало main() устанавливается точка останова и запускается программа. Точка останова сообщает отладчику, что дойдя до нее, он должен приостановить выполнение программы. Поскольку точка останова установлена на начало функции main(), программа доходит до нее и останавливается перед выполнением любых команд из main(). Отображается значение RIP (указателя текущей команды). Обратите внимание. RIP содержит адрес памяти, по которому расположена команда из дизассемблированного кода функции main(). Компилятор генерирует их, чтобы организовать память для локальных переменных функции main(). Частично причина, по которой C требует объявлять переменные, заключается в том, чтобы помочь составлению этого участка кода. Отладчику известно, что эта часть кода генерируется автоматически, и он достаточно сообразителен, чтобы проскочить ее. Команда x отладчика позволяет просмотреть разными способами содержимое по определенному адресу памяти. Команда принимает два аргумента. адрес памяти и формат отображения содержимого. Формат отображения также представляет собой односимвольное сокращение, которому может предшествовать число, указывающее количество отображаемых элементов. Вот обозначения некоторых стандартных форматов. o Восьмеричный (octal). x Шестнадцатеричный (hexadecimal). u Десятичный без знака (unsigned decimal). t Двоичный (binary). Эти форматы можно указывать в команде examine для изучения заданных адресов памяти. В следующем примере используется текущий адрес из регистра RIP. В GDB часто используются сокращенные команды, и даже info register rip можно сократить до i r rip. Сейчас разрежем нашу программу скальпелем. Будем выковыривать , смаковать, обсасывать, по байтам . Наглядно намного понятнее, чем я мечу бисер. Смотрим. Куда это я веду! ? Если админы не будут против, можем исследовать, как происходит переполнение буфера. (Если крекер захочет записать 30 байт данных в буфер, котором выделено только 20 байт памяти наверняка будет крах программы .Это называется переполнение буфера. Поскольку лишние байты переполняют буфер и разместит за концом отведенной памяти,разрушив , что находилось дальше. Если будет изменен важный участок данных ,это будет конец программы. )Ну чтоооо,,,,, глянем как это происходит. Пример уязвимого кода ,который принимает один аргумент и пытается поместить его значение,каким бы оно ни было,в буфер длиной 250000 байт. Прога не чего не делает , кроме засирания памяти. Чтобы сделать ее причиной уязвимости, расскажу попозже.а сейчас, смотрите . Code:
|
|
Создано: 05 апреля 2017 10:55 · Поправил: Abraham · Личное сообщение · #29 Есть функция под именем overlow_function(),которая принимает указатель на строку с именем str и и копирует находятся по этому адресу памяти данные в локальную переменную buffer, которой выделено 100 байт памяти. Главная функция программы выделяет буфер размером 1000 байт с именем big_string и с помощью цикла for заполняет буфер символами Y . Затем она вызывает overlow_function(), передав в качестве аргумента указатель на этот 1000-байтовый буфер.Это не должно пройти бесследно,потому что overlow_function() попытаемся втиснуть 1000 байт данных в буфер, котророму выделено всего 100 байт памяти. Оставшиеся 900 байт данных просто покроют все,что находится в памяти за буфером.Прога аварийно уснет в результате переполнения. Code:
дальше, "нехороший человек" пишет на ассемблере / заканчивает программу,которую можно засадить в буфер. Есть ограничения , код должен быть законченной программой, не должно быть лишнего , должен иметь вид обычных данных, помещаемых в буфер. Будем исследовать дальше ,как это происходит. Про Windows я вообще не говорю ,это ходячий троян. Надеюсь, люди здесь порядочные, и не будут использовать в корыстных целях. Черт побери, мы здесь крекеры и исследуем программы. Это двигатель всего. Пришла весна,время размножаться. Делаем эту программу уязвимой,изменим владельца на root установим бит suid для скомпилированного двоичного файла.pr01 представляет собой suid-программу с правами root ,уязвимую к переполнению буфера, нам нужен код , чтобы сгенерировать буфер,на вход уязвимость программы. Буфер должен содержать код и переписывать адреса возврата в стеке таким образом,чтобы этот код оказался выполненным.Заранее узнать фактический адрес кода,что может быть непросто в динамическом изменяемом стеке. Сложность вызывает поместить значение этого адреса на место тех четырех байт, в которых хранится адрес возврата в стека.Даже если известен правильный адрес,но не будет затерт нужный участок памяти,прога аварийно завершится. Принемаеме стандартных приема. Забиваем эту сучку, NOPАМИ. Если адрес возврата переписать любую из адресов,входящих в NOP-цепочку,то rip соскользнет вниз по цепочке до кода, который выполняется , нам это и надо. прога pr01 Code:
|
|
Создано: 08 апреля 2017 10:58 · Поправил: Abraham · Личное сообщение · #30 Я недавно тестировал свой сайт на прочность. Если у тебя есть свой сайт?! Давайте проверим его на прочность,как?! Апач нам поможет,будем проверять стоит ли на сайте DDoS защита. Введение. Мы будем проверять сервер на устойчивость. Открыть командную строку в Linux. Установка апач. Code:
Рассмотрим попозже следующую программу (подробнее). Code:
|
. 1 . 2 . >> |
eXeL@B —› Дневники и блоги —› Отладка программ под Linux |