Минимальный sleep.exe

Тема в разделе "WASM.BEGINNERS", создана пользователем sandrey, 4 май 2011.

  1. sandrey

    sandrey New Member

    Публикаций:
    0
    Регистрация:
    4 май 2011
    Сообщения:
    1
    Вот есть в Windows Resource Kits утилита sleep.exe, которая приостанавливает выполнение в bat-файле на n мс, где n передается в качестве параметра. Весит эта утилита 5 Кб.

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

    Никто не встречал?
    Или может кто может написать такое (преобразовать параметр в число и вызвать Sleep(DWORD n) из WinAPI?
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    аж целых 5 Кб? что же далоть то теперь =)
     
  3. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    sandrey
    sleep.com для ДОС, ага. В самом деле можно в несколько байт сделать - чего там, регистры заполнить, и вызвать прерывание. И использовать ТОЛЬКО в чистом ДОС, и только в бат-файлах.

    А вот в винде, с бат-файлами... есть 3 способа:
    1) запомни в переменную текущее время. Крути цикл, пока текущее время не будет отличаться от сохраненного на нужный интервал. Получить текущее время - переменная %TIME%

    2) использовать WSH/VBScript/JScript - там есть задержка на нужный интервал. Скрипт можно вызывать из бат-файла, или весь батник переписать на скрипт

    3) использовать sleep.exe весом в 5кб и не выпендриваться ;)

    Хочешь чего-то другого? Напиши свой Sleep.exe - с блекджеком и шлюхами! Размер будет от 1К (скорее в районе 2.5К), или для такой простой задачи тебе придется пару недель изучать во всех тонкостях PE-формат - оно тебе надо?
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.882
    FatMoon
    а не 97 байт? (минимальный размер PE) :)
     
  5. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Mikl___
    ну я же сказал - для такой простой задачи придется изучать PE-формат :))) чтоб было меньше, а тем более 97 байт

    Просто вопрос можно толковать по разному:

    а) как можно сделать задержку выполнения бат-файла?
    б) как написать очень маленький sleep.exe, чтоб использовать его в бат-файле.

    Вариант а) имеет смысл - и допускает ответ (ну мало ли, срочно надо, чтоб везде работало, без дополнительных установок чего-либо). Вариант б) смысла не имеет, и может быть собственным исследованием, никого ни к чему не обязывающим. Зачем нам ломать человеку удовольствие от исследования (и тратить свое время на не имеющую практической ценности задачу)?
     
  6. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Mikl___, по любому как минимум 512 байт.
     
  7. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Igor1024
    Не-не, там можно с заголовком пошаманить: убрать stub, MZ-заголовок до 8-11 байт ужать, вдвинуть секции одна в другую, вдвинуть заголовок в секцию, хранить данные в заголовке вместо секции data, обрезать лишнее в конце - короче, 97 байт реально для 1 вызова АПИ. Даже вроде 81 видел как абсолютный рекорд. Другое дело, что тут надо будет взять командную строку, преобразовать параметр в число, вызвать Sleep - по любому больше 97 байт будет )

    А главное, для такого надо изучить MZ-PE до деталей - похвально, и где-то и пригодится... но для данной задачи практически как микросхемы в домашних условиях делать: пара недель чтения спецификации, попыток впихнуть одно в другое, попыток использовать ординалы вместо имен, обнаружение, что это не работает на всех системах... а потом заканчиваешь и думаешь: а зачем я это делал, если результат трюков работает все равно только в ХР, и не работает в Висте и семере? А в старых добрых 9х вообще "не является исполняемым файлом" :lol: так что флаг в руки - но уж никак не "может кто может написать такое", такое только самостоятельно
     
  8. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Я имел в виду размер на диске. sandrey, судя по всему, именно про него и говорил. А так, если возьмём идеальную файловую систему, можно и 97 :)
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.882
    Igor1024
    Даже вывод окна можно уложить в 185 байт, а уж sleep и подавно, просто 97 байт -- это минимальный размер заголовка меньше можно, но система такой файл уже не запустит. А остальное, как сказал FatMoon "а зачем я это делал?"

    FatMoon а про 81 байт поищите ссылочку? Просто уж очень интересно...
     
  10. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    а не тут ли где-то и видел? там последовательное улучшение было 108 - 97 (на всех ХР) - 81 (для ХР сп2 только). Где-то года полтора назад...
     
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.882
    FatMoon
    При сжатии MZ-заголовка до 4 байт -- минимальный PE-заголовок заканчивается на поле SubSystem (+5Ch от "PE") без него или с нулевым значением в этом поле, что соответствует IMAGE_SUBSYSTEM_UNKNOWN - неизвестная подсистема, файл не загружается. Это и определяет минимальную длину 4+5Ch+1=61h А ссылка не на это? Но там 97 байт и давность уже 3 года...
     
  12. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    Mikl___
    Оно багу в ядре использует, точнее не полноценные верификации в загрузчике.
     
  13. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.882
    gaeprust
    Можно ссылку на PE-EXE меньше 97 байт и ссылку на пример реализации, о которой вы написали... pleez!
     
  14. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    Mikl___
    Я говорил что может быть меньше ?
    Может и может, но хз. На какомто сайте было описание создания маленького экзе, было давно и я не помню какие размеры. Вот там некоторые поля хидера, при которых ядро всё есчо может запускать экзе были определены чисто брутом, а не RCE. Потом я смотрел эти проверки, там их множество, тоже и для вашего 97-байтного модуля. Но это давно было что там и как я уже не помню. Кстате именно отсюда была взята идея модификации смещений для загрузки по произвольным адресам. Вдобавок на ранних версиях оси там была уязвимость, позволяющая писать в ап ядра только сформировав особое значение смещений в пе.