Размышления об альтернативе VNC

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 2 Jun 2012.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Хоть убейте не могу понять, зачем в реализациях VNC сервера так много нагромождений?
    В частности под Windows.
    Почти все выходят порядка 500 КБ в сжатом виде. А так больше метра. Ведь по факту там нет ничего очень сложного и почти всё сможет уместиться в к десятки килобайт. Или я что-то путаю?
    Почитал что там очень много хитростей при реализации протокола. Но всё равно не вижу ничего сверхъестественного.

    Лично сам вижу реализацию такой (без поддержки передачи файлов и шифрования (хотя шифрование легко реализовать)):
    1) Создаем еще один рабочий desktop (1 апишка)
    2) Запускаем свою копию на этом декстопе (1 апишка)
    3) В запущенной копии запускаем Explorer (1 апишка)

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

    4) Допустим классическая схема сервера (5 апишек для ожидания клиента)
    5) Подготовка экрана к банальному грабингу (5 апишек). Допустим оверлей грабить не будем.
    6) Выделение памяти. (основной буфер, предыдущий, рабочий). (1 апишка)
    7) Запуск Таймера для грабинга (1 апишка)
    8) Запуск потока получения инфы от клиента (1 апишка)
    9) получение инфы от клиента (координаты мыши и ввод) - цикл чтения + установка координат мыши и эмуляция нажатия на клавишу (3-4 апишки)
    10) Непосредственно грабинг буфера по таймеру (допустим с частотой 10 fps хватилобы). (3-4 апишки)
    11) удаление не изменившихся данных (1 цикл простой)
    12) Разбиение изменений на прямоугольники (чуть сложнее но операции банальны)
    13) если данных больше чем определенное число, то упаковать их. Причем можно не париться, а взять какюнить небольшую либу (туже aplib) или чтонить простенькое не сильно большое (ну вот какраз 10кб максимум веса). К примеру кусок реализации zip упаковки выйдит какраз кил в 10-15 без сжатия.

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

    Итого реально 20-30 килобайт выйдит без сжатия UPX (а с ним и того меньше). ну так почему в данный момент нету такого рода софта с таким размером?

    P.S. Комменты в стиле: Зачем это? Сейчас и 500кб нормальный размер и прочие будут удаляться сразу!

    P.P.S как показала практика такое реализовать можно только на томже рабочем столе что и у пользователя, считать или послать данные другому столу винда не даст. Но всё равно это не меняет сути.
     
    #1 slesh, 2 Jun 2012
    Last edited: 3 Jun 2012
  2. dnd

    dnd Member

    Joined:
    28 Nov 2007
    Messages:
    23
    Likes Received:
    8
    Reputations:
    0
    Зачем это? =))) VNC хорош тем что это описаный протокол с большим количеством существующих клиентов (http://www.realvnc.com/docs/rfbproto.pdf дока).
    Все что ты описал конечно замечательно, но все надо делать с нуля...

    Можно взять готовую реализацию (libvncserver), выкинуть все ненужное ( разные алгоритмы сжатия, оставить raw и какой нибудь ZRLE), и получишь на выходе то что нужно.

    P.S. http://rootfox.com/hk/articles/0x48k-VisualSpy.htm реализация твоей задумки ;)
     
  3. SWAPPER

    SWAPPER Elder - Старейшина

    Joined:
    14 Dec 2006
    Messages:
    256
    Likes Received:
    42
    Reputations:
    24
    Идея минимизации хороша для некоторых специфических дел.
    Но, не забывай, что внц, если я не ошибаюсь, есть и много доп фич, которые требуют дополнительного объема кода. Как минимум, те же алгоритмы оптимизации качества передачи изображения в зависимости от ширины канала.