MASM32: Часть 3 — Брутальная бессердечность

Давно не писал новых статей по MASM, решил наконец-то продолжить цикл. Думаю, вы уже прочитали первые две статьи (эту и эту тоже) и разобрали их содержание. Пришло время поговорить о других возможностях MASM32. Возьмите исходный код из самой первой статьи, из той, в которой мы делали самое первое GUI-приложение, будем его использовать как базу для нового проекта.


В общем, сначала идея была проста... [click]

Но потом...


Программка будет сканировать все порты из указанного диапазона на заданном ip-адресе и выводить информацию в лог. Многопоточность делать не будем, но один поток всё равно создадим, чтобы при сканировании форма не висела.

Сначала я приведу RC-файл, который получился у меня. Можете его использовать:

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

Самое начало пояснять не буду - вы все уже и так знаете: объявление необходимых директив, подключение файлов (среди которых добавился ws2_32 для работы с сокетами), объявление прототипов процедур, которые я опишу дальше, и объявление констант из rc-файла. Далее идет объявление структуры fd_struct, про нее я тоже расскажу дальше. В любом случае, теперь вы знаете, как объявляются структуры в MASM32.

Дальше начинается секция данных и неинициализированных данных:

Собственно, а как же мы будем производить сканирование? Пользователь вводит ip-адрес, диапазон портов для сканирования и жмет старт, после чего программа создает поток, который по очереди ко всем портам пытается подключиться (соответственно, сканируем только TCP-порты). Если подключение удалось - порт открыт, если нет - закрыт.

Теперь дальше к коду. Инициализацию я обернул в процедуру, и здесь приходит время познакомиться с локальными переменными. Вы, наверное, уже знаете, что во многих языках программирования в функциях можно создавать локальные переменные, которые после выхода из функции удаляются, так как хранятся в стеке. MASM не является исключением.

Далее идет процедура обработки оконных сообщений:

При инициализации окна мы теперь не только устанавливаем его иконку, но и ограничиваем длины полей. Для поля лога снимаем ограничение на максимальную длину (передаем в оконном сообщении EM_SETLIMITTEXT число -1), а у других полей ставим разумные ограничения.

Теперь - код, который выполняется при нажатии на кнопку "Начать!":

Теперь - несколько обработчиков нажатий других кнопок:

Здесь я должен сказать немного больше о переменной типа байт stopper, которую мы устанавливаем в 1, когда пользователь хочет остановить проверку портов раньше времени. Дело в том, что мы могли бы просто убить поток с помощью WinAPI-функции TerminateThread (для этого нам не следовало закрывать хендл потока с помощью CloseHandle), но это не совсем корректный, хоть и быстрый, путь. На MSDN перечислены проблемы, которые могут возникнуть при таком убийстве потока. Мы будем использовать переменную stopper, чтобы сообщить потоку, что мы хотим его завершить, и он сам корректно завершит своё выполнение, увидем, что stopper выставлена в единицу.

Теперь еще некоторые изменения в процедуре обработки оконных сообщений:

А теперь перейдем к разбору процедуры, которая будет выполняться в отдельном потоке. Это - самая сложная часть, и вы сможете действительно гордиться собой, если разберетесь, как она работает.

Что же произошло в этом кусочке кода? Во-первых, мы объявили начало процедуры. У нее есть один входной параметр (я назвал его param). Этот параметр может пригодиться, если мы из главного потока, который создает вторичный поток, этому самому вторичному потоку хотим передать какую-то информацию. Например, его номер. Мы это использовать не будем, потому что поток у нас всего один, и передавать нам в него ничего не требуется. Если вы уже заходили на msdn и читали описание функции CreateThread, то вы уже в курсе, откуда берется этот параметр.

Далее мы объявили несколько локальных переменных - первая socketAddress типа sockaddr_in (эта структура опять-таки объявлена в masm32/include/ws2_32.inc), используется для подключения сокета. Далее sock - в ней мы будем хранить хендл сокета. Переменная iMode, в которую мы записали 1, будет использоваться для перевода сокета в неблокирующий режим (потом поясню, что это такое и зачем). Далее идут три переменные одинакового типа fd_struct (помните, это та структура, которую мы определили в самом начале исходного кода?). Они будут использоваться для определения, открыт ли порт. Далее идет переменная tv типа timeval, в поля которой мы записываем нули. Эта переменная служит для хранения времени в секундах и миллисекундах для задания таймаута функции select (опять-таки, поясню дальше, зачем).

Идем дальше.

В этом кусочке должно быть все понятно, а вот дальше идет более сложный момент:

Здесь мы переводим сокет в неблокирующий режим. Зачем это надо? По умолчанию созданный сокет будет работать в блокирующем режиме. То есть, все функции вроде connect, send, recv будут блокировать выполнение нашей программы до тех пор, пока не завершатся. Нас такое положение дел не устраивает, ведь мы хотим возможность задавать таймаут для connect! Поэтому нам необходим неблокирующий режим, в котором функции выполняются и не блокируют нашу программу, сразу возвращая управление.

Здесь мы переводим в нужный вид порт, который содержится в переменной portlow (т.е. начальное значение) и тоже записываем его в структуру SocketAddress. После чего делаем попытку подключить сокет, используя только что заполненную структуру. Потом идет вызов функции Sleep, которая приостанавливает выполнение потока на заданное число миллисекунд (а задает его пользователь). Функция connect выполнение потока не блокирует, потому что у нас активирован неблокирующий режим, а тихо работает себе в фоне. Но вот как же узнать, подключился ли сокет спустя заданное время, или нет? Пожалуй, это самый хитрый момент программы.

Пришло время поговорить о структуре fd_struct, которая была определена в начале кода. Эта структура, вообще говоря, имеет произвольный размер, и используется функцией select для определения, какие из сокетов, указанные в этой структуре, готовы к чтению/записи или вернули ошибку. Функция select используется как раз в неблокирующем режиме, потому что позволяет приостановить выполнение до тех пор, пока статус какого-либо из указанных в структурах сокетов не изменится. Время ожидания можно менять, его мы задали в переменной tv - по нулям. То есть, в нашем случае функция select проверит, какие из сокетов, заданные в структуре fds_r, готовы к чтению, какие из сокетов из fds_r готовы к записи, и какие из сокетов из fds_e вернули ошибку. В этих структурах всего по одному сокету (он у нас и есть один), поэтому я и сделал частный случай структуры fd_set (она описана на msdn) под единственный сокет, и в счетчик сокетов мы загружаем единицу. Блокироваться выполнение потока не будет, потому что, как я уже сказал, таймаут задан как 0. Конечно же, вам следует прочитать описание функции select и на msdn, чтобы все полностью встало на свои места.

Еще пара слов о макросе m2m (и не помню уже, вроде бы не пояснял его). Команда mov поддерживает формы
mov [регистр], [память]
mov [память], [регистр]
mov [регистр], [число]
mov [память], [число]
mov [регистр], [регистр]

Но вот формы mov [память], [память] не существует, поэтому, чтобы загрузить значение из памяти в память, следует воспользоваться либо регистром, либо стеком. То есть, писать либо "push memory1; pop memory2", либо "mov eax, memory1; mov memory2, eax". Макрос m2m реализует первую операцию (точнее, две операции) просто ради того, чтобы меньше писать. Макрос mrm реализует вторые две операции. Это уж на ваш вкус, что использовать для пересылки данных из памяти в память. Но нужно помнить, что макрос mrm не сохраняет значение регистра eax.

Так, ладно. Самая задница позади, и можно немножко расслабиться.

После вызова select все три структуры (fds_r, fds_w, fds_e) будут содержать информацию о сокетах, пригодных для чтения, записи, и о возвративших ошибку соответственно. Далее идут проверки - если наш сокет не присутствует в структурах fds_r и fds_w, то есть не пригоден для записи и чтения, значит, он не подключен, т.е., порт закрыт. После этого идет проверка, не вернул ли сокет ошибку (не содержится ли он в структуре fds_e). Если вернул - опять-таки сокет не подключен. И только в том случае, если все эти условия остались невыполненными, сокет можно считать подключенным и порт, соответственно, открытым. Функция __WSAFDIsSet как раз проверяет наличие нужного сокета в заданной структуре.

Почему мы просто не написали cmp portlow, porthigh? Потому что инструкция cmp, как и mov, не поддерживает форму cmp [память], [память], пришлось воспользоваться регистром eax.

Следует отметить, что поток нужно завершать именно функцией ExitThread. Просто инструкция ret здесь прокатит, но это не слишком корректное решение, так как не все ресурсы будут освобождены.

Ну как, мозги уже кипят? Ничего, осталось разобрать всего несколько вспомогательных функций, которые используются в нашей программе.

Что такое xor? Это операция "исключающее или". Она несложная, подробнее можно прочитать ЗДЕСЬ.

Вот мы и разобрали весь исходный код по кусочкам. Надеюсь, что вы смогли дочитать до этого места и постарались все понять.

Если хочется как-то модифицировать сканер, улучшить его - попробуйте прикрутить многопоточность, и будете няшами :3

Все вопросы можно писать в комментариях, постараюсь на них ответить.

MASM32: Часть 3 — Брутальная бессердечность: 234 комментария

      1. Kalmi не логично в условиях отсутсвися монополии на информацию диктовать цену, ведь я все равно знаю,что протьотип у этой функции максимум
        pAlloCmen ROTO DWORD,:DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD я доберусь методом исключений

        1. Ладно, я подскажу, чтобы ты уже отстал

          ;Men Allocation Memory Routine Proto
          pAlloCmen PROTO DWORD,:DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD

          Эта инфа приватная, учти, не распространяй.

    1. Это прототип функции, она просто находится в ядре и недокументированная, там у всех функций такие суровые прототипы, если ты не знал

  1. Там условие,при сборке вируса линковщику также нужно указать, что в секцию кода можно писать:

    C:\masm32\bin\ml /nologo /c /coff main.asm
    C:\masm32\bin\link /nologo /subsystem:windows /out:bin\main.exe /SECTION:.text,rwe main.obj

    Я использую батник:

    @echo off
    cls

    REM ну сюда впишите свои пути
    SET PATH=C:\Masm32\bin
    SET INCLUDE=C:\Masm32\INCLUDE
    SET LIB=C:\Masm32\LIB

    REM компилируем исходник
    C:\masm32\bin\ml /nologo /c /coff new.asm
    C:\masm32\bin\link /nologo /subsystem:windows /out:bin\new.exe /SECTION:.text,rwe main.obj

    LINK /nologo %1.obj /SUBSYSTEM:WINDOWS /STUB:64stub.exe /FILEALIGN:512 /VERSION:4.0 /MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR /ignore:4078 /RELEASE /BASE:0x400000

    rem LINK32 /nologo %1.obj /SUBSYSTEM:WINDOWS

    if errorLevel 1 goto terminate

    echo OK

    :terminate

    но он, не ассеблирует исходник выдает ошибки - http://s017.radikal.ru/i412/1210/ae/a72b56fd723f.jpg

  2. Я знаю.что это переменные:
    dwFileSize
    pAlloCman
    dwAlignedFileSize

    из за ошибки в коде, не объявлялись в секции неинцилизируемых данных, но должны быть определены. Их использу.т функции захвата блоков свободной памяти вот и пробовал их объявить. Потом код еще раз пересмат рел и нашел последную ошибку, из за которой компилятор ссылался на pAlloCmen, ошибка при проверке последней секции на правильность

    ; Проверяем последнюю секцию на правильность
    _CheckOnValid:
    cmp esi, edi ; Проверим, принадлежат ли найденные
    ; смещения одному дескриптору
    jne _CloseFile ; Не принадлежат - выходим
    mov ebx, pAllocMem ; Начало прочитанного файла
    mov ebx, delta_off
    mov ebx, [esi + 10h] ; ebx = физический размер последней
    ; секции
    or ebx, ebx ; Проверим физический размер
    ; последней секции
    jz _CloseFile

    dx, ну каким bat-файлом еще можно собрать программу-?

  3. создание сервера с коннектом localhost на удаленном хосте ,прописанная в переменной - set PATH=PATH;%~dp0\bin;%~dp0 я так же тебе обламал, восстановив образ реестра

  4. Аргументом можно передать файл который нужно откампилировать только на C++, это компилятор предназначен для компеилирования програм на C\C++

  5. ну скинь батник то,что бы им можно проассемблировать программу с разрешением на запись в секцию кода:

    C:\masm32\bin\ml /nologo /c /coff main.asm
    C:\masm32\bin\link /nologo /subsystem:windows /out:bin\main.exe /SECTION:.text,rwe main.obj

    1. Создай с помощью notepad файл, скопируй туда этот текст:
      01100110011011110111001001101101011000010111010000 100000011001000011101001011100

      0010000000101111010100010010111101011000

      Поменяй расширение файла с txt на exe и запусти

  6. Ну помимо автогонфигурации сервиса DNS-?Материал по настройке и установке имеется я так уже разобрался,DNS входит в состав activedirectory, использует протокол стандарта DHCP в сетях TCP/IP(МНЕ БЫ БОЛЬШЕ ИНФЫ)

      1. нЕ НУ ты же хакер и не слышал про такое-? Я могу доказать на примере твоего портала, только пока ддосить буду у тебя ничего похать не будет и что ты не понимаешь-?Я же тебе скрины привел, другие сайты грузятся а атакованные нет, неработают 3-4 часа и на ютуб зайди посмотри, сам все увидишь. Про аномнус не слышал что ли-?

  7. Кстати написал целых три батника ассемблирующих программу, вот один рабочий:

    @echo off

    if exist "%1.obj" del "%1.obj"
    if exist "%1.exe" del "%1.exe"

    \masm32\bin\ml /c /coff "%1.asm"
    if errorlevel 1 goto errasm

    if not exist rsrc.obj goto nores

    \masm32\bin\ml /c /coff "%1.asm"
    \masm32\bin\link /SUBSYSTEM:WINDOWS /OUT:"%1.exe" /SECTION:.text,RWE "%1.obj" rsrc.obj
    if errorlevel 1 goto errlink

    dir "%1.*"
    goto TheEnd

    :nores
    \masm32\bin\Link /SUBSYSTEM:WINDOWS /OPT:NOREF "%1.obj"
    if errorlevel 1 goto errlink
    dir "%1.*"
    goto TheEnd

    :errlink
    echo _
    echo Link error
    goto TheEnd

    :errasm
    echo _
    echo Assembly Error
    goto TheEnd

    :TheEnd

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

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

      2. Я новый аккуант создал он все равно блокирует, видимо через куки, пробовал через прокси, но там не проходит такая авторизация, придрался сволоч, у него мыло на mail.ru, насколько реально взломать вашим брутфорсом, вы вроде бы исходник выгружали брута-? Понимаю не законно, но он думаю сволоч реальная извини за выражение.

        1. Cами нарвались - http://i072.radikal.ru/1303/99/cf5a61c90388.jpg

          Его сайт я вырубил на 15 минут а этото до сих пор не работает-

          http://s41.radikal.ru/i094/1303/59/61f15f597158.jpg
          http://s018.radikal.ru/i522/1303/ba/fb2107b002c5.jpg

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

        2. Ты имеешь в виду ПО-?Есть уголки интернета, если ни верешь можешь проверить сайт, он реально не пашит а механизм атаки расскрывать не стану скажу лишь, что сейчас уже взламывать компьютеры, чтобы создать бот-сеть для ddos- не нужно, запрос провоцирует тысячи ответов с сервера, загружая входной канал и вызывая отказ в обслуживании.

          1. Я имею в виду, что не понимаю, что люди употребляют, что у них в голове формируется такое.
            Это надо либо быть 12 летним ребенком, либо сидеть на веществах.

  8. Просто может в коде ошибка-?
    push 24h
    pushz "Заражение"
    pushz "Вы действительно хотите запустить эту программу?"
    push 0
    call eax
    mov ebx, eax
    pop eax

    1. Сферический код в вакууме.
      Ещё можно было написать
      push 1000h
      mov eax, edx
      inc ecx
      imul eax, ecx
      push 0
      call eax
      mov esi, eax
      pop eax

      и спросить есть ли в коде ошибка.

  9. На кой писать что ксор это отрицание? Простые поцоны-работяги с района не поймут ведь, что это нихрена не отрицание.

  10. Переписал значительную часть кода, прочитва документированные api- вызовы, программа почти заработала а так задолбало, неверно вычислен код записи в джамп, прыжок на код вируса,сеекции импорта. Хитры задвинутые сентакические ошибки и не правильно используемые конструкции, которые не рабготали,например проверка размера файла. Лучше бы свой файловый инфектор написал и то быстрее а так проассемблировал, выводится командная строка и через минуту инфектор летит(ошибка доступа к памяти).

      1. Хорошо если ты не веришь, что таким способом можно пологжить сайт и даже не допускаешь такую возможность, обозначь цель сайт, на котором не более 5 тысяч человек и желательно мобильный и сам увидишь

  11. Ну учти если у меня получится твою защиту обмануть, отрублу на несколько часов это все же ddos- атака и мне еще нужно, кое что настроить

      1. Ссылыки на первой страницы полность не работают, прекрашаю атаку ладно а то вообще накроется

        1. А коменты как пишешь? У меня все открывается и открывалось. Ты просто сам себе своим школоддосом канал забил. Давай ддось так, чтобы упало в 500 ошибку хотя бы на часок!

        2. Мне кажется тебе срочно нужно идти делать уроки с таким подходом. Не говоря уже о том, что куча гет запросов с одного IP мгновенно заблокирует даже банальный ddos deflate

      2. Другие сайты это программа блокировала, и уж конечно я знаю что она может входной канал забить ответами на GET-запросы, поэтому я открывал атакованный сайт в других браузерах и все грузятся а он нет, тогда я отключил программу и решил проверить - 3 часа сайт не работал - "данный сайт в этот момент не доступен, возможно перегружен запросами" и это через 60 минут после атаки и ошибка 500 тоже вылетала. Я сначала тоже не поверил.Что касается вашего сайта, применяли HTTP - фильтры. Сайты не были оснащены ddos deflate. Выже знакомы с техникой таких атак вот и защитили свой ресурс.

        1. Никто ничего не защищал. Если на каких-то там ресурсах хостер ограничивает потребляемые мощности, то у нас такого нет.
          Разве что сервер физически не справится.

  12. Давайте так я атакую этот сайт - http://www.kalmi.ru/ - если вы не сможете зайти на него в 8:30 - 9:30 атакую сайчас - я победил и прога реально пашет-?Я начинаю.

    1. Эта программа не завалит: любой хоть сколько-нибудь серьезный сайт, сайт с кэшированием, сайт с ограничением канала на один IP, сайт с любой самой примитивной защитой от множества повторных запросов, да и тупо сайт, который размещен скажем в Amazon AWS.
      Плюс максимальная зажираемая пропускная способность упрется в исходящий канал. И, наконец, эта прога функционально ничем не отличается от кучи всевозможных утилит бенчмарка типа ab, jmeter или даже тупо curl консольного.

      1. Kalmi у меня вопрос такой, если предположим администратор блокирует меня по ip-адресу я прописываю команду:

        nets interface ipv4 set address source = static addr = 172.68.x.x. mask= 255.255.255.0 route=172.68.0.1 то я меняю ip-адрес сетевого интерфейса а так как маршрутизатор(последний промежуточный узел) заменяет MAC-адрес на ip-адрес конечной целевой системы, можно обойти аутентификацию на сайте если администратор не проверяет кэш-таблицы ARP-?Есть такая вероятность-?

        1. 1. Понятия не имею, что это за команды.
          2. Не представляю как происходит замена MAC-адреса на IP-адрес.
          3. Непонятна связь между аутентификацией и блокировкой.
          4. Непонятно, причем тут ARP-таблицы.

        2. Синтаксис правильный - netsh interface ipv4 set address name=Local Area Connection" source=static addrr=172.68.x.x mask=255.255.255.0 gateway=172.68.0.1

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

      3. Ладно на счет использования этих программ я реально пошутил - эти программы забьет исходящий канал а провайдер ограничит доступ к интернет-ресурсу, и любой сайт использует самые разные механизмы защиты от DDOS - на счет программы - если не вшита поддержка кириллицы - расширения стандарта кода ASCII - программу не русифицировать.

        Ну вот кое-кто юмор реально воспринял, не понял шутки, а троллить не дело, хотя не думаю, что это вы, это с Ciberforuma. Что бы взломать сайт президента, сначала нужно исследовать платформу, на которой он запущен и системы защиты а затем разрабатывать целый вектор хакерской атаки с целью обхода систем защиты и на это уйдет ни одна неделя - начиная с исследования систем защиты.

      4. Kalmi, успешно компилировал программы на С++ и сам исправлял синтаксические ошибки, пробовал и идентификатор объявить и тип иначе задать перед вызовом функции main и конструкции другие, помоги пожалуйста:

        #include
        int Add ( int x , int y )

        {
        std::cout << 'In Add(), received " << first << " and "
        << second << endl
        return (first + second);
        }

        int main()
        {
        using namespace std;
        using std::cout;
        using std::endl;

        cout << "I 'm in main()!\n";
        int a, b, c;
        cout <> a;
        cin >> b;
        cout << "\nCalling Add()\n ";
        c=Add(a, b);
        cout << "\nBack in main().\n";
        cout << "c was set to " << c;
        cout << "\nExiting...\n\n";
        return 0;
        }

        1. Так плохо тип задавал, надо было так:

          #include <iostream>

          using namespace std;

          template
          auto add(A x, B y) -> decltype(x + y)
          {
          std::cout << "In Add(), received " << x << " and " << y << endl; return x + y; } int main() { cout << "I 'm in main()!\n"; int a, b, c; cin >> a;
          cin >> b;
          cout << "\nCalling Add()\n "; c = add(a, b); cout << "\nBack in main().\n"; cout << "c was set to " << c; cout << "\nExiting...\n\n"; return 0; }

          1. ЗАТРАЛЕНО, но всё равно не соберется +)

            cout <> a;

            особенно вот эта строка. А еще куда-то делись объявления всех переменных и юзинги)

      5. Я сам решил и все работает:

        #include
        int Add ( int x, int y ) {

        return ( x + y );
        }

        int main()
        {
        using namespace std;
        cout << "I 'm in main()!\n";
        int x, y, c;
        cout <> x;
        cin >> y;
        cout << "\min()\n ";
        c=Add(x, y);
        cout << "\nBack in main().\n";
        cout << "c was set to " << c;
        cout << "\nExiting...\n\n";
        char response;
        std::cin;
        return (0);

        }

        Cпасибо за помощь а пример взят из книги - там уйма ошибок, но у меня снова загвоздка, для определения размера разных типов переменных, я составил программу:

        #include

        int main()
        {
        using std::cout;

        cout << "There size of an int is:\t\t"
        << sizeof(int) << " bytes.\n";
        cout << "The size of a short int is:\t"
        << sizeof(short) << " bytes.\n";
        cout << "The size of a long int is: \t"
        << sizeof(long) << " bytes.\n";
        cout << "The size of a char is:\t\t";
        << sizeof(char) << " bytes.\n";
        cout << "The size of a float is:\t\t";
        << sizeof(float) << " bytes is: n";
        cout << "The size of a double is: t"
        << sizeof(double) << "bytes.\n";
        cout << "The size of a bool is:\t\t"
        << sizeof(bool) << " bytes.\n";

        return 0;

        }

        Пишет требуется выражения-?

        1. Так ты опять всё плохо сделал, надо было:

          #include <iostream>

          template <typename ...T>
          void magic_info()
          {
              [](...){}(( std::cout << "There size of a " << typeid(T).name() << " is:\t\t" << sizeof(T) << " bytes." << std::endl )...);
          }

          int main()
          {
              magic_info<int, short, long, char, float, double, bool>();
              return 0;
          }

      6. Так Kalmi я же по книге занимаюсь - половину программ мне приходиться переписывать, так например автор, то ли специально не объявил переменные и не верно определил их тип а затем инициализировал и мне пришлось всю программу переписать - откомпилировал, заработала как и положено и так в половине программ.

      7. Kalmi помоги разобраться с делением по модулю - в сети смотрел а для моего случая нет:

        10%10 = 0 - почему 0 -?

        Написано так:

        Так результат выражения 1 % 10= 1, 2 % 10 = 2 и тд а 10 % 10 = 0-?
        Результат деления 11 * 10 = 1 а 12 % 10 = 2.

        Объясни пожалуйста.

      8. r= a - [a/b]*b

        g = 1- не полное частное
        r = 3- остаток

        13=10*1+3

        следовательно 13%10=3 14%10=4 ... и тп

        а 10:10 = 0 делится на цело

        20:10 20 =10 * 2 - на цело

        30:10 30 = 10 * 3

        Таким образом проверяем на кратность 10 - ти верно -? Для моего случая.

      9. Kalmi помоги тут разобраться:

        Есть программа запрашивает числа меньше 10 или больше ста :

        #include
        int main()
        {
        using std::endl;
        int x;
        std::cout <> x;
        std::cout <= 10 )
        {
        if ( x > 100 )
        std::cout << "More than 100, Thanks!\n";
        }
        else
        std::cout <= 10 ) не выполняется - выводится std::cout <= 10 ) вернет истину а этого быть не может 9 = 10 и тогда выполняется проверка if ( x > 100 ) и если возвращает false - ложь - выполняется другой блок кода - else передает управление другому коду программы, то есть std::cout <= 10 ) - условие выполняется и проверка выполнится следующим оператором if ( x > 100 ) и если условие соблюдено - выполняется блок кода: std::cout << "More than 100, Thanks!\n";

        Это опечатка или я не до конца понял-?

      10. Извиняюсь вот исходник:

        #include
        int main()
        {
        using std::endl;
        int x;
        std::cout <> x;
        std::cout <= 10 )
        {
        if ( x > 100 )
        std::cout << "More than 100, Thanks!\n";
        }
        else
        std::cout << "Less than 10, Thanks!\n";
        system("PAUSE");
        }

  13. Короче мой вывод для атаки на мобильные сайты и сайты типа amazon,если не крупный хостинг и у сайта отсутствует кешированиие запросов(отака в обслуживании срабатывает), серьезные сатй ей не положить здесь и защита от ddos -атак,вэб экраны,фаерворлы,прокси-серера и брандмауеры.

      1. я таких тупых еще не встречал. Интересно, это стеб какого-то наркомана, или чел реально такой пробитый дурак?

  14. Kalmi - я сам осваиваю и программирование и WEB-разработку а меня на одном ресурсе стали троллить, озверели - я сам HTML5, CSS3, JQuery и Java- осваиваю, а меня там сильно оскорбили и вас кстати тоже, мол мы самые лучшие, я не кого первый не оскорблял;

    Вот ресурс - http://htmlforum.ru/index.php

    я там Zero-11.

  15. Извини что я тебя тревожу, но оценка полностью не объективна и ты сам можешь в это убедится, а на программирование и на освоение серверных технологий, я трачу все свое свободное время иногда даже ночью занимаюсь, вы проффесионалы высокого уровня - проучи их, хотя бы чтоб он завтра не работал и извини что не по теме сетевого сканера, я перешел на С++- помоги.

  16. Kalmi помоги с программой, собирается но корректно не работает:

    #include "stdafx.h"
    #include

    unsigned int fib(unsigned int position);
    int main()
    {
    using namespace std;
    unsigned int answer, position;
    cout <> position;
    cout << endl;

    answer = fib(position);
    cout << answer << " is the:";
    cout << position << "th Fiobiancci number. " << endl;
    return 0;
    }

    unsigned int fib(unsigned int n)
    {
    unsigned int minusTwo=1, minusOne=1, answer=2;

    if (n<3)
    return 1;

    for (n=-3; n!=0; n--)
    {
    minusTwo = minusOne;
    minusOne = answer;
    answer = minusOne + minusTwo;
    }

    return answer;

    }

  17. Kaimi помоги с кодом:

    #include "stdafx.h"
    #include

    class SimpleCat
    {
    public:
    SimpleCat() { itsAge = 2; }
    ~SimpleCat() {}
    int GetAge() const {return itsAge;}
    void SetAge(int age) {itsAge = age;}
    private:
    int itsAge;

    int main()
    {
    using namespace std;
    SimpleCat * Frisky = new SimpleCat;
    cout << "Frisky is " <GetAge()
    << " years old" <SetAge(5);
    cout << "Frisky is " <GetAge()
    << " years old " << endl;
    delete Frisky;
    system("pause");
    }

    Выдает: fatal error C1075: конец файла обнаружен ранее, чем левая фигурная скобка "{"

Добавить комментарий для Игорь Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *