Я имел в виду только то, что теоретических проблем с подменой пакетов нет. Мы все исходные данные и алгоритмы можем узнать, а значит, можем и проделать те же действия, что и клиент, или заставить его сделать это.
Как тяжко это будет, как обойти античит — это уже отдельные проблемы.
А в данном случае, похоже, лезть глубоко и не надо совсем, как нам автор и показал :)
Ну клиент-то сам шифрует, значит и ключ у него есть? :)
Даже если реализован навороченный распределенный протокол генерации ключей, взаимная аутентификация, а сам алгоритм шифрования не RSA ни разу, а нечто жутко сложное и новомодное — мы уже видим весь код клиента и весь его контекст исполнения (регистры и память), значит мы — это клиент (с погрешностью по времени в считанные единицы тактов процессора даже на одном однопоточном ядре).
Не трогал клиенты ММОРПГ, но подбирать-то зачем?
На клиентской стороне шифруем — в памяти клиента и сырые данные лежат, как минимум, на момент передачи в процедуру шифрования перед отправкой пакета. Наверняка шифруется пакет целиком, а не каждая структура данных по отдельности.
Что в PowerShell, что в WSH, чтобы дернуть нативную DLL из VBscript действительно придется использовать свой или чужой костыль (одна радость — при вездесущем дотнете можно сгенерировать его прямо в том же скрипте :) ).
А «всё» — имелись в виду, конечно, доступные из WSH сотни и тысячи COM-интерфейсов.
Я думаю, что отрицательное отношение общественности к NT batch обусловлено:
Малая известность фич NT batch. В пустой системе батников — раз, два — и обчелся, да и те с базовым синтаксисом. А в никсах — скрипты везде, и даже неопытному пользователю приходится в них заглядывать. И one-liner'ы в никсах популярны.
Чтобы сделать многострочный блок внутри ветвления, надо или круглые скобки городить(а круглые скобки широким массам слабо известны), или goto'ми давиться (цикл с постусловием организовать — тем более).
Громоздкая конструкция %ERRORLEVEL%. Ну кто, кто мешал назвать ее %E% или даже %?
Обработка ввода пользователя — мало, да и то ужс. До семерки носил за собой choice.exe
В batch не любят ставить отступы, хотя можно ведь.
Итого — пытается некто нечто автоматизировать — не получается, лезет за примерами — видит хрень ===> НЕНАВИСТЬ!!!
Насчет непригодного для скриптинга sh — заглянем в боевой юникс, к примеру, HP-UX — масса скриптов именно на sh. Страшно, но жить можно.
Потом, если не ошибаюсь, писать init-скрипты на sh — это вроде как хороший тон, ибо переносимо и совместимо по самые помидоры до десятого колена.
Для «скриптабельности» на винде есть расширяемый WSH, c VBScript и JScript из коробки, с возможностью делать вообще всё, даже дергать функции из нативных DLL и т.д. Не говоря о том, что при желании можно в WSH хоть perl подключить.
А чтобы писать «one-liner» в комстроке Farлюбимого файлового менеджера для 90% задач Вам вполне хватит стандартного виндового cmd и стандартных же findstr и прочих.
Добавим портированные из никсов coreutils — убили еще 9 % задач.
И perl для оставшегося 1 %.
Еще есть 4NT, он же Take Command, по возможностям примерно равный sh с coreutils, но синтаксис не лучше, чем у cmd.
Огрызок — это безусловно, по сравнению даже c голым POSIX-совместимым sh.
А вот неюзабельный? Я бы не был так категоричен. Синтаксис страшноват, но это ж не брейнфак, верно?
Согласен, жонглировать терминами можно бесконечно, тем более, если (как принято у нас в бывш. СССР) переводить технические термины дословно и искать в них массу скрытого смысла, а потом совмещать старые термины с новоязом и плодить монстров.
А я просто взял определение из энциклопедии кибернетики 74 года :)
Терминал, абонентский пульт, оконечное устройство — устройство оперативного ввода и вывода информации, используемое при взаимодействии человека с вычислительной машиной или вычислительной системой (часто удаленных от пользователя).
…
Терминалы разделяют на пассивные (без переработки информации) и активные (имеющие собственные вычисл. машины, входящие в состав вычислительных систем).
Если мыслить архитектурно, то контроллеры в клавиатуре и мониторе не делают их существенной частью распределенной вычислительной системы. У них другая задача.
То же и со старыми терминалами — они тупо послылали текст, принимали текст, печатали текст и обрабатывали эскейп-последовательности в тексте. По сравнению с мэйнфреймом, к которому они коннектились, они были ничтожны и взаимодействовали с ним на максимально низком уровне. Поэтому я причислил старые аппаратные терминалы к пассивным.
Для сравнения, тот же тонкий клиент против облака — разница только количественная, а не качественная, взаимодействие на высоком уровне и по спектру возможностей они равны (игровые консоли, например, все ближе и ближе к терминалам, а кластеры из кучи PS3 давали отличные практические результаты ). Поэтому это — активный терминал.
Терминал — обобщённое название как программы, так и специальной железки (таких больше нет в природе).
Мне кажется, тут существует некоторая путаница в определениях.
Терминал — оконечное устройство, через которое пользователь взаимодействует с основной (в т.ч. и удаленной) вычислительной системой.
Монитор + клавиатура или даже KVM + монитор + клавиатура, складывающийся в 1U — пассивные локальные терминалы.
Гугло-ноут — активный удаленный терминал.
«Терминал» как программа — эмулятор терминала и его железа.
Действительно умерли с приходом ПК — именно пассивные терминалы для удаленного доступа, железяки по типу VT-100 (типа, добавь модем и лезь в чужой мэйнфрейм).
На их место пришли программные эмуляторы пассивных терминалов и, с учетом облачных и SaaS-тенденций, современные активные терминалы — тонкие клиенты, нетбуки, планшеты, тысячи их.
Я не думаю, что ему лавры Дэна Брауна покоя не дают. Руссинович — и так уже самый известный эксперт по ядру Windows в мире. Нужен ли ему такой пиар? Вопрос.
Хотя, быть может, цель — немного «экспертной», а не «попсовой» популярности в смежных, более широких кругах. Как Шнайер или Торвальдс, заявления которых весомы и цитируются всеми подряд.
Локальные операции — как минимум, всевозможная бюрократия.
Но даже и для оплаты с ручным вводом контрольный разряд нужен.
Представьте себе — нет контрольного разряда, значит номер с ошибкой в одном разряде потенциально может быть не просто корректным, но и чьим-то чужим.
1) Ошибка в последних разрядах — попали в чужую карту того же банка, если у нее, конечно, такой же Expiry Date. Эта поправка уменьшает вероятность в худшем случае раз эдак в 36, но не исключает подобной ситуации.
2) Ошибка в первых разрядах — попали в карту чужого банка. Мы ничего про него ничего знать не можем, и транзакция радостно полетела, скажем, на другой континент. Да, ее отвергнут, назад полетит отрицательный ответ, но будет некоторая задержка по времени и лишняя нагрузка на все системы.
А ведь чужой банк мог ее и не отвергнуть, если мы, как в первом варианте, попали в существующую карту. Это просто замечательная ситуация, хоть и маловероятная.
Зачем всем заинтересованным сторонам потенциальные проблемы, если можно при помощи контрольного разряда сильно улучшить ситуацию?
Аналогично с номерами счетов и ИНН — у их номеров абсолютно те же функции, и везде есть контрольный разряд.
Согласен, стандартная оптопара из старой мыши на проход письма через щель будет круче.
А еще, как вариант, можно найти почивший сканер с еще живым сенсором… и в ту же щель его встроить. При пересечении щели — включать подсветку. Да и вообще, сразу распознавать спам и озвучивать для почтальонов и лже-почтальонов различные сообщения :) Или спамеров можно сразу фотографировать и предлагать выбирать другие ящики :)
Я бы тоже не стал так извращаться — ну протянул бы от компа до ящика RS-232, на конце между, скажем, DTR и Ring — геркон, на дверцу — магнит, на комп — демона (под виндой WaitCommEvent c желаемой маской, под никсами же вообще по барабану, хоть ioctl TIOCMGET шлем, хоть как, а еще можно добавить минимум деталей и несколько движений паяльником, прикинуться кусочком модема, звонящим в тот же Ring и вообще ничего не кодить, только скриптовать)…
Сборка всего решения и POC в боевых условиях займет невыносимые 10-15 минут до получения результата :) Плюс заложены безграничные возможности для развития — содрать десяток-другой миллиампер с ком-порта не западло, и из хлама собрать тот же инфракрасный датчик заполнения ящика, например.
Но ведь это же совершенно неспортивно! Да и не модно, наверное.
А вот МК приспособить можно именно в наших реалиях к более тяжелой задаче — спрятать в щитке (наверняка рядом же!), увешать все ящики датчиками, и броадкастить всем жильцам уведомления о почте через высокочастотные наводки на питание! А если еще удастся малой кровью реализовать стандартный HomePlug, так и вообще чудо.
Чего уж говорить о прочих прелестях громадных проектов для тех, кто только пользуется их плодами. Например, о логах внутри дистрибутивов одного программного продукта от HP, а в логах чудо-даты, учетная запись с индийским именем, и имя машины, видимо, на которой этот дистрибутив и собирали.
А еще VBA, как и его старший брат VB, содержит костыль для вызова нативных DLL.
И отроки пишут нехитрые макровирусы, например.
Или вот такие, вполне себе легитимные вещи.
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Sub open_cdrom()
Dim a As Double
a = mciSendString("open cdaudio", 0&, 0&, 0&)
a = mciSendString("set cdaudio door open", 0&, 0&, 0&)
a = mciSendString("close cdaudio", 0&, 0&, 0&)
End Sub
Private Sub close_cdrom()
Dim a As Double
a = mciSendString("open cdaudio", 0&, 0&, 0&)
a = mciSendString("set cdaudio door closed", 0&, 0&, 0&)
a = mciSendString("close cdaudio", 0&, 0&, 0&)
End Sub
Как тяжко это будет, как обойти античит — это уже отдельные проблемы.
А в данном случае, похоже, лезть глубоко и не надо совсем, как нам автор и показал :)
Тем более, когда в популярных ботах:
Даже если реализован навороченный распределенный протокол генерации ключей, взаимная аутентификация, а сам алгоритм шифрования не RSA ни разу, а нечто жутко сложное и новомодное — мы уже видим весь код клиента и весь его контекст исполнения (регистры и память), значит мы — это клиент (с погрешностью по времени в считанные единицы тактов процессора даже на одном однопоточном ядре).
На клиентской стороне шифруем — в памяти клиента и сырые данные лежат, как минимум, на момент передачи в процедуру шифрования перед отправкой пакета. Наверняка шифруется пакет целиком, а не каждая структура данных по отдельности.
Что в PowerShell, что в WSH, чтобы дернуть нативную DLL из VBscript действительно придется использовать свой или чужой костыль (одна радость — при вездесущем дотнете можно сгенерировать его прямо в том же скрипте :) ).
А «всё» — имелись в виду, конечно, доступные из WSH сотни и тысячи COM-интерфейсов.
Итого — пытается некто нечто автоматизировать — не получается, лезет за примерами — видит хрень ===> НЕНАВИСТЬ!!!
Насчет непригодного для скриптинга sh — заглянем в боевой юникс, к примеру, HP-UX — масса скриптов именно на sh. Страшно, но жить можно.
Потом, если не ошибаюсь, писать init-скрипты на sh — это вроде как хороший тон, ибо переносимо и совместимо по самые помидоры до десятого колена.
А чтобы писать «one-liner» в комстроке
Farлюбимого файлового менеджера для 90% задач Вам вполне хватит стандартного виндового cmd и стандартных же findstr и прочих.Добавим портированные из никсов coreutils — убили еще 9 % задач.
И perl для оставшегося 1 %.
Еще есть 4NT, он же Take Command, по возможностям примерно равный sh с coreutils, но синтаксис не лучше, чем у cmd.
А вот неюзабельный? Я бы не был так категоричен. Синтаксис страшноват, но это ж не брейнфак, верно?
А я просто взял определение из энциклопедии кибернетики 74 года :)
Если мыслить архитектурно, то контроллеры в клавиатуре и мониторе не делают их существенной частью распределенной вычислительной системы. У них другая задача.
То же и со старыми терминалами — они тупо послылали текст, принимали текст, печатали текст и обрабатывали эскейп-последовательности в тексте. По сравнению с мэйнфреймом, к которому они коннектились, они были ничтожны и взаимодействовали с ним на максимально низком уровне. Поэтому я причислил старые аппаратные терминалы к пассивным.
Для сравнения, тот же тонкий клиент против облака — разница только количественная, а не качественная, взаимодействие на высоком уровне и по спектру возможностей они равны (игровые консоли, например, все ближе и ближе к терминалам, а кластеры из кучи PS3 давали отличные практические результаты ). Поэтому это — активный терминал.
Мне кажется, тут существует некоторая путаница в определениях.
Терминал — оконечное устройство, через которое пользователь взаимодействует с основной (в т.ч. и удаленной) вычислительной системой.
Монитор + клавиатура или даже KVM + монитор + клавиатура, складывающийся в 1U — пассивные локальные терминалы.
Гугло-ноут — активный удаленный терминал.
«Терминал» как программа — эмулятор терминала и его железа.
Действительно умерли с приходом ПК — именно пассивные терминалы для удаленного доступа, железяки по типу VT-100 (типа, добавь модем и лезь в чужой мэйнфрейм).
На их место пришли программные эмуляторы пассивных терминалов и, с учетом облачных и SaaS-тенденций, современные активные терминалы — тонкие клиенты, нетбуки, планшеты, тысячи их.
Хотя, быть может, цель — немного «экспертной», а не «попсовой» популярности в смежных, более широких кругах. Как Шнайер или Торвальдс, заявления которых весомы и цитируются всеми подряд.
Но даже и для оплаты с ручным вводом контрольный разряд нужен.
Представьте себе — нет контрольного разряда, значит номер с ошибкой в одном разряде потенциально может быть не просто корректным, но и чьим-то чужим.
1) Ошибка в последних разрядах — попали в чужую карту того же банка, если у нее, конечно, такой же Expiry Date. Эта поправка уменьшает вероятность в худшем случае раз эдак в 36, но не исключает подобной ситуации.
2) Ошибка в первых разрядах — попали в карту чужого банка. Мы ничего про него ничего знать не можем, и транзакция радостно полетела, скажем, на другой континент. Да, ее отвергнут, назад полетит отрицательный ответ, но будет некоторая задержка по времени и лишняя нагрузка на все системы.
А ведь чужой банк мог ее и не отвергнуть, если мы, как в первом варианте, попали в существующую карту. Это просто замечательная ситуация, хоть и маловероятная.
Зачем всем заинтересованным сторонам потенциальные проблемы, если можно при помощи контрольного разряда сильно улучшить ситуацию?
Аналогично с номерами счетов и ИНН — у их номеров абсолютно те же функции, и везде есть контрольный разряд.
ИНН, ISBN и масса прочих окружающих нас идентификаторов — почти везде есть контрольный разряд.
А еще, как вариант, можно найти почивший сканер с еще живым сенсором… и в ту же щель его встроить. При пересечении щели — включать подсветку. Да и вообще, сразу распознавать спам и озвучивать для почтальонов и лже-почтальонов различные сообщения :) Или спамеров можно сразу фотографировать и предлагать выбирать другие ящики :)
Сборка всего решения и POC в боевых условиях займет невыносимые 10-15 минут до получения результата :) Плюс заложены безграничные возможности для развития — содрать десяток-другой миллиампер с ком-порта не западло, и из хлама собрать тот же инфракрасный датчик заполнения ящика, например.
Но ведь это же совершенно неспортивно! Да и не модно, наверное.
А вот МК приспособить можно именно в наших реалиях к более тяжелой задаче — спрятать в щитке (наверняка рядом же!), увешать все ящики датчиками, и броадкастить всем жильцам уведомления о почте через высокочастотные наводки на питание! А если еще удастся малой кровью реализовать стандартный HomePlug, так и вообще чудо.
Фраза, которая почему-то врезалась мне в память:
www.google.ru/search?&q=%22can+someone+check+the+wording+of+this+step%22
Мне кажется, круче было бы только оставить в документе Lorem Ipsum.
Чего уж говорить о прочих прелестях громадных проектов для тех, кто только пользуется их плодами. Например, о логах внутри дистрибутивов одного программного продукта от HP, а в логах чудо-даты, учетная запись с индийским именем, и имя машины, видимо, на которой этот дистрибутив и собирали.
И отроки пишут нехитрые макровирусы, например.
Или вот такие, вполне себе легитимные вещи.
Зло было обречено.