Тоже неплохой вариант, но имеет ряд ограничений.
1) Многие dlp снимают скриншоты и цветные квадратики будут явно большого размера чтобы можно было их потом обратно с фото/видео считать.
2) Палевный процесс сам по себе — если находишься не один в кабинете, то съемка экрана телефоном выглядеть будет явно подозрительно.
У Пастильды флешка — это побочный функционал, я его не использовал.
Да, я напрямую слал байты, соответствующим образом дополнив hid-дескриптор. Собственно, вы повторили идеи моей статьи.
Ваш взгляд уместен — способов вынести довольно много.
Но я не считаю, что статья вида: «если можно копировать данные на флешки, то копируйте данные на флешки» была бы хоть сколько-то интересной.
Интересный вопрос, и точного ответа я не знаю.
Я не пытался идти таким путем, поскольку это явное нарушение известного состава устройств в системе и, наверняка, будет замечено.
Но чисто теоретически, заменив условную пару клавиатура/мышь на пару прокси, думаю что такая система будет работать в 2 раз быстрее, поскольку к капу скорости usb даже близко не подошли.
Нисколько не умаляю заслуги DIHALT, но даже в самой статье я привел 2 источника, которые описывают подобный подход.
В моей статье указан способ поднять скорость «моргания» в 60 раз, не беспокоя защитные системы появляющейся флешкой.
С sizeof это уже довольно древний спор на тему того что правильнее — sizeof(тип) или sizeof(переменная).
Если кодстайл принуждает к sizeof(тип), то приводят примеры как у вас. int a;
memset(&a, 0, sizeof(int));
Меняем тип в объявлении переменной char a;
memset(&a, 0, sizeof(int));
и теперь memset пишет вне переменной.
А если кодстайл принуждает к sizeof(переменная), то пример такой:
Было: int a[100];
memset(a, 0, sizeof(a));
Делаем выделение памяти динамическим: int* a = (int*)malloc(100);
memset(a, 0, sizeof(a));
Теперь память недозаполняется.
Именно поэтому автору не стоило бы писать статью в виде «Заблуждения программистов о...». Разработчик не может запретить 29 февраля, високосную секунду, UTC−0:25:21, написание имен, возможности наличие кавычек в имейле и дома без адреса. А вот то, какие логины будут на его сайте — на это он может легко повлиять.
В конструкторе Random устанавливаются значения inext в 0, inextp в 21. При безопасном использовании это расстояние сохраняется.
Смотрим на InternalSample (есть в статье).
Вангую, что из-за доступа из разных потоков к переменным inext и inextp может происходить рассинхронизация и расстояние между ними не всегда будет постоянным. Если так вдруг случилось, что inext и inextp совпали, то за 55 вызовов массив SeedArray весь обнулится. Далее все «случайные» числа будут высчитываться как 0 — 0.
The System.Random class and thread safety
Instead of instantiating individual Random objects, we recommend that you create a single Random instance to generate all the random numbers needed by your app. However, Random objects are not thread safe. If your app calls Random methods from multiple threads, you must use a synchronization object to ensure that only one thread can access the random number generator at a time. If you don't ensure that the Random object is accessed in a thread-safe way, calls to methods that return random numbers return 0.
1) Многие dlp снимают скриншоты и цветные квадратики будут явно большого размера чтобы можно было их потом обратно с фото/видео считать.
2) Палевный процесс сам по себе — если находишься не один в кабинете, то съемка экрана телефоном выглядеть будет явно подозрительно.
Да, я напрямую слал байты, соответствующим образом дополнив hid-дескриптор. Собственно, вы повторили идеи моей статьи.
Но я не считаю, что статья вида: «если можно копировать данные на флешки, то копируйте данные на флешки» была бы хоть сколько-то интересной.
Я не пытался идти таким путем, поскольку это явное нарушение известного состава устройств в системе и, наверняка, будет замечено.
Но чисто теоретически, заменив условную пару клавиатура/мышь на пару прокси, думаю что такая система будет работать в 2 раз быстрее, поскольку к капу скорости usb даже близко не подошли.
В моей статье указан способ поднять скорость «моргания» в 60 раз, не беспокоя защитные системы появляющейся флешкой.
На гиктаймс статья о
здоровье глазочках за вашим авторством.Если кодстайл принуждает к sizeof(тип), то приводят примеры как у вас.
int a;
memset(&a, 0, sizeof(int));
Меняем тип в объявлении переменной
char a;
memset(&a, 0, sizeof(int));
и теперь memset пишет вне переменной.
А если кодстайл принуждает к sizeof(переменная), то пример такой:
Было:
int a[100];
memset(a, 0, sizeof(a));
Делаем выделение памяти динамическим:
int* a = (int*)malloc(100);
memset(a, 0, sizeof(a));
Теперь память недозаполняется.
Получается как не пиши код, можно придраться.
Проверяем
Смотрим на InternalSample (есть в статье).
Вангую, что из-за доступа из разных потоков к переменным inext и inextp может происходить рассинхронизация и расстояние между ними не всегда будет постоянным. Если так вдруг случилось, что inext и inextp совпали, то за 55 вызовов массив SeedArray весь обнулится. Далее все «случайные» числа будут высчитываться как 0 — 0.
ideone.com/VR2B8W