Задать вопрос
  • [Python + pywin32] Как эмулировать движения курсора, клики кнопками мыши и нажатия клавиш клавиатуры в игре WoT?

    TrueBers
    @TrueBers
    Гуглю за еду
    вожусь уже 4-ю неделю, и на данный момент прямых ответов не нашел.
    Что можно было делать 4 недели, если ответ гуглится за 4 секунды? За 4 недели можно было игру дизассемблировать и посмотреть, как там всё устроено.

    Способов обработки ввода как минимум несколько. На одном Window Message Loop Legacy Input, который ты насилуешь, свет клином не сошёлся. Он никогда не считался подходящим для игр и точного ввода, почему им пользуется огромное количество игр — загадка. Либо банальная человеческая лень.

    Есть DirectInput, есть XInput, есть window message loop input events, есть RawInput, и GameInput. Первые два давно уже устаревшими помечены, не развиваются с 2000-х и не рекомендуются к использованию в современных играх. Устаревшие ивенты из window message loop, которые ты пытаешься посылать в окно, никогда не рекомендовались для реалтаймовых игр, где важна скорость реакции и точность наведения курсора. Остаётся RawInput. Ну а GameInput — слишком новая, высокоуровневая и специфическая штука, чтобы её часто использовали. Более того, все эти *Input базируются на низком уровне как раз на RawInput.

    Обрати внимание на ивенты, которые приходят перед нужными тебе. WM_INPUT, вот он как раз относится к RawInput. Его то и обрабатывает приложение. Сначала приходит WM_INPUT, а потом за ним старое сообщение просто для совместимости с древними хендлерами. Приходят старые сообщения потому, что разработчики не отключили их генерацию флагом RIDEV_NOLEGACY, либо есть какая-то логика отката к старому обработчику.
    И самое главное, WM_INPUT генерируется HID-железкой внутри самого системного хендлера событий. То есть самому послать это сообщение от лица пользователя невозможно.

    Эмулировать RawInput можно только аппаратно/драйвером/гипервизором, либо внедрившись в код игры. Придётся реверсить игру и разбираться в логике обработки сообщений. Возможно, можно как-то заабьюзить логику, которая проверяет, будет ли обрабатывать сырой ввод, и вдруг есть какое-то условие или флаг из конфига, при котором произойдёт fallback, который сбросит обработку WM_INPUT на старые ивенты.

    PS. С ответа про обработку ввода через графические API поржал :D. Нормальная шутка, смешная.
    Ответ написан
    3 комментария
  • Я в РФ, если пройду собес в компанию из РБ, Казахстана и т.д. обязательно ехать туда?

    TrueBers
    @TrueBers
    Гуглю за еду
    Меньше думай и слушай чушь!
    Не существует никакой русофобии, так же как и нет для тебя никаких "недружественных стран", весь мир дружественный, если ты адекватный и общаешься с адекватным человеком на той стороне провода. Если хочешь работать где угодно, выкинь этот пропагандистский мусор из головы. Адекватному работодателю до жопы вообще из какой ты страны, откуда работаешь, какому богу молишься.

    Если ты крутой спец, а им надо тебя заполучить, поверь, в ход пойдут любые методы тебя урвать. И как платить найдётся, и как контракт заключить, и как сделать так, чтоб тебе было комфортно, главное работу чтоб делал круче всех. Даже США с их драконовскими законами про разрешение на работу и резидентство, имеют кучу лазеек, чтобы протащить понравившегося кандидата.

    Проксей — миллион, способов оплаты — сотни, способов легально платить налоги — десятки. Главная проблема — лень. Лень твоя и лень работодателя, других преград нет.
    Ответ написан
    5 комментариев
  • Стоит ли использовать блоки кода для ограничения области видимости?

    TrueBers
    @TrueBers
    Гуглю за еду
    Код нужно писать так, чтобы его было удобно читать! Основная задача кода — быть прочитанным человеком, в первую очередь, а потом уже компилятором.
    Эти скобочки вносят колоссальный мусор и шум в беглое чтение, при том, что реально без них обойтись можно в 99.999% случаев.

    Единственный, мне известный случай, когда это реально надо — в низкоуровневом программировании драйвера или ядра своей ОС. Когда ты знаешь захардкоженное значение размера стека и тебе нужно в одной функции выделить что-то размером в почти весь твой стек, что-то с этим значением сделать и резко сразу же его очистить, чтобы не стек уплыл в оверфлоу при использовании ниже. Тогда можно воспользоваться этим хаком. В других случаях адекватный человек этим пользоваться не будет.
    Ответ написан
    Комментировать
  • У кого есть картинка пути развития ИБ специалиста?

    TrueBers
    @TrueBers
    Гуглю за еду
    Херачить аки конь – вот единственный путь развития, а не какие-то дурацкие картинки в интернетах рассматривать. Браться за всё, до чего можешь дотянуться и жадно поглощать знания. Иначе не прорвёшься.

    Эта диаграмма из хабра-статьи Positive Technologies. А если точнее, с их образовательного подразделения.
    Pdf-версия.

    Там же даже логотип и название компании указаны! Если ты не в состоянии даже нагуглить картинку из открытого источника... боюсь, до карьеры в ИБ ещё очень далеко.
    Ответ написан
  • Обьясните в чём суть инкапсуляции?

    TrueBers
    @TrueBers
    Гуглю за еду
    Оу, май, 4 человека ответили, и ни один не понимает, что такое инкапсуляция... деградация какая-то, алё!

    Причём тут защита данных? Причём тут контроль доступа? Сокрытие данных? Геттеры, сеттеры? private, public?
    Это всё не имеет никакого отношения к инкапсуляции, это всё побочные эффекты, либо способы реализации в конкретном языке.

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

    ООП и его фишки тут не причём. Ни геттеры, ни сеттеры, ни private\public никакого отношения к этому не имеют. Инкапсуляция может быть даже статической, когда, например разрешаются модули во время компиляции, и язык вообще не должен быть объктно-ориентированным при этом. Инкапсуляция может реализовываться вообще распределённо по разным нодам, которые реализуют интерфейс. Да и ещё чёрт знает как. Скрывать данные не нужно от пользователя. Часто даже удобно обратное -- не писать кучу бойлерплейта, а просто дать возможность пользователю сконфигурировать интерфейс через изменение стейтов в его реализации напрямую, если позволяет платформа, соблюдая инварианты. Это будет более верным архитектурным дизайном, нежели городить какие-то костыли "вдруг пользователь идиот и всё поломает".

    На этом всё, это и есть инкапсуляция.
    Ответ написан
    Комментировать
  • Можно ли в nftables добавить счетчик для заблокированных IP?

    TrueBers
    @TrueBers
    Гуглю за еду
    Почитать же доку можно, не?
    Достаточно counter добавить к правилу и всё будет считаться.
    Ответ написан
    Комментировать
  • С чего начать чтобы написать полностью свой гипервизор с 0?

    TrueBers
    @TrueBers
    Гуглю за еду
    Сначала нужно понять, какая архитектура процессора интересует.
    Для Intel, AMD, ARM, RISK-V будут разные технологии использоваться.
    Допустим у тебя Интел. Качаешь Intel Software Developer Manual. Это такой талмуд на 5 тысяч страниц. Там можно найти всю информацию по инструкциям процессора, настройкам, режимам, прерываниям, разметке памяти и т. п.

    Дальше, необходимо решить, какой тип гипервизора нужен.
    Есть грубо 2 вида: первый и второй.
    Первый это когда гипервизор является программой, которая не рассчитывает ни на кого, кроме как на само железо.
    И второй, который пользуется средствами запущенной ОС. Просит у неё память, использует её планировщик, её модель памяти, прерывания, и т.д.
    В первом случае гипервизор может являться, например, драйвером для UEFI или голого железа.
    Во втором случае -- драйвером ОС, который загружает сама операционная система.

    В ответе с примерами про VirtualBox и xen видно, что автор ответа никогда не сталкивался с разработкой гипервизоров, но решил ответить ради ответа и кучи мусорных совковых слов из ГОСТов. Изучать гипервизоры на их примере, всё равно что ковыряться в коде ядра Линукса, чтобы понять как работают ОС. Пары-тройки лет должно хватить.

    Проще всего взять один из сотен готовых учебных микро-гипервизоров и ковырять их, пописывая свой параллельно, по мере того, как приходит понимание.
    Советую начать с разработки bare-metal гипервизора на основе UEFI-драйвера. Там минимальные функции уже идут в прошивке из коробки, такие как выделение памяти, настройка реального режима процессора, страничной адресации, и т. п. Остаётся только написать сам код гипервизора и можно будет загружать существующую установленную ОС прямо в своём гипервизоре.

    Ассемблер нужен по минимуму. Там строк 50 от силы на нём наберётся. Его нужно читать, понимать, да. Знать тонкости работы процессора, интерпретировать состояние регистров правильно и ещё много чего. Но писать на нём не нужно почти ничего.

    Погугли. Миллион же уже курсов, статей, репозиториев.
    Один из первых был Hypervisor-From-Scratch, он до сих пор поддерживается.
    7 days to virtualization тоже один из первых курсов статей.
    SimpleVisor один из первых репозиториев открытых с минимальным гипервизором в качестве драйвера под винду которая виртуализирует сама себя.
    Orange Slice неплохой минималистичный гипервизор, автор его разрабатывал на стриме на твитче или ютубе, не помню уже.
    Из awesome списков есть https://github.com/husseinmuhaisen/Hypervisor и https://github.com/Wenzel/awesome-virtualization
    Инфы просто тонны на эту тему в последнее время. На гитхабе игрушечных гипервизоров несколько десятков если не сотен.
    Ответ написан
    2 комментария
  • Судебная экспертиза unity C#?

    TrueBers
    @TrueBers
    Гуглю за еду
    Сколько ж курс стоил, что такие заморочки?
    На сайте нетологии есть курс за 107к за 13 месяцев. Это 8к в месяц.
    Это он?
    Работу бы лучше с таким рвением искал. Там научишься, да ещё и платить будут. 8к в месяц это заплатить за ChatGPT, GH Copilot, Midjourney, пару лицензий софта и сидеть учиться, искать возможность, а не причину.

    Если 8к в месяц для тебя невероятные деньги, то почему тогда заранее не почитал отзывы, про все эти курсы, про то, что они все максимально ублюдские и бесполезные. Уже каждый в интернетах в курсе об этих инфоцыганских нетологиях, скиллбоксах и прочих "вайтивайти". Халявные деньги только в мышеловке. Чтобы научиться, надо херачить аки конь, а не ветряные мельницы останавливать в пустой степи.

    По Юнити ГРОМАДНОЕ количество информации в интернете. Разжёвано просто всё, что можно и нельзя. Какие нужны курсы? Садись да пиши или работу ищи. Судиться с инфоцыганами на их поле по их правилам -- это прям смешно.
    Ответ написан
    Комментировать
  • Какой режим заряда работает для ноутбука?

    TrueBers
    @TrueBers
    Гуглю за еду
    Это всё профили передачи мощности стандарта USB.

    Они все требуются для реализации стандарта, это не разные стандарты, как тут писали, и не "универсальная" зарядка. Это блок питания с поддержкой USB Power Delivery, ничего другого в этих секретных цифрах не кроется.

    Эти токи выбирают устройства обычно в момент согласования вначале зарядки. Но так же БП, заметив, например, перегрев, может попросить устройство снизить потребление, чтобы охладиться.
    Либо это может быть щадящая зарядка низкими токами, чтобы не стрессовала батарея, когда, например, на ночь ставится устройство заряжаться, оно предполагает, что им пользоваться не будут и запрашивает минимальный ток, чтобы максимально продлить жизнь батарее.
    Другой вариант: видеокарта стартует и требует мощности у БП, чтобы передать больше мощности, БП переходит на повышенное напряжение. Соответственно, когда устройство находится в Idle, нужны минимальная мощность.
    Ответ написан
    Комментировать
  • Как транслировать .class в .dex?

    TrueBers
    @TrueBers
    Гуглю за еду
    Например, погуглить (это пока легально): android class to dex compiler.
    Первой же строкой в поиске зайти по ссылке.
    Profit!
    Ответ написан
    4 комментария
  • Как WI-FI роутеры противодействуют атакам типа BrutForce или Dictionary Attack?

    TrueBers
    @TrueBers
    Гуглю за еду
    1. Брутфорс пароля не имеет смысла. Это слишком долго и затратно. Перебор минимального восьмизначного пароля это 6634204312890625 комбинаций, на современном железе это займёт тысячи лет.
    2. Правильно он ответил. Перебирать на самом роутере это 1 комбинация в несколько секунд. Перебор хеша -- сотни тысяч комбинаций в секунду. И даже с такой скоростью это занимает десятки и сотни лет.
    3. Смотря какой стандарт. Их там десятки. Ни в одном из них не передаётся пароль, это не имеет смысла. Стандарт для пользователей называется WPA2-PSK. Если бы ты не спрашивал у статистической модели, а просто погуглил, нашёл бы перевод этой аббревиатуры. PSK значит Pre-Shared Key. Pre-shared значит, что он заранее известен, зачем его передавать, если оба его знают? Достаточно просто статью открыть на википедии и почитать. Там всё расписано как и что происходит.
    Ответ написан
  • Где и как искать описания современного Battlenet протокола?

    TrueBers
    @TrueBers
    Гуглю за еду
    MITM не особо работает с отличным от HTTP/HTTPS протоколом
    HTTPS и TLS это одно и то же, а в TLS ничего нового не придумано, и mitm как был рабочим, таким и остаётся.

    Чтобы осуществить его, нужно отвязать клиент от Certificate Pinning. Для этого нужно провести реверс-инжиниринг приложения, найти место, где происходит проверка подписи сертификата и запатчить место статически либо динамически.

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

    Другое дело, что клиент батлнета может иметь какую-то защиту от эмуляции. Например слать движения мыши, нажатия клавиатуры, идентификаторы железа, какую-то иную телеметрию, проверив и не найдя которую, может заподозрить эмуляцию и выдать бан.
    Ответ написан
  • Какой бот может удалять эмодзи и специальные символы?

    TrueBers
    @TrueBers
    Гуглю за еду
    Проходиться по Юникодным кодпоинтам и фильтровать по категории.
    Ответ написан
    Комментировать
  • Как обновить с++ на мак?

    TrueBers
    @TrueBers
    Гуглю за еду
    Нажми Cmd+Shift+P.
    Там напиши c++ edit config, выбери пункт C/C++: Edit Configurations (UI).
    Там внизу найди C++ standard и выбери c++23.
    Ответ написан
  • Как сделать графику на fasm?

    TrueBers
    @TrueBers
    Гуглю за еду
    Учить ассемблер и писать свою ОС это примерно как учиться сварке и строить космический корабль.
    Ассемблер это только 1% от всего, что нужно изучить.
    Тебе нужно решить кучу архитектурных проблем сначала, а потом уже думать о графике.

    Посмотри вот сюда. Там описаны фазы создания операционной системы. Согласно этому туториалу, графика это уже третья фаза. Так что тебе ещё первые две предстоит осилить, прежде чем приступать к графике.
    Ответ написан
    7 комментариев
  • Не работает дополнение кода vscode?

    TrueBers
    @TrueBers
    Гуглю за еду
    Поставь питон через pyenv.

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

    Питон в brew тоже довольно кривоват и нужно много с бубном плясать вокруг него, чтобы заставить адекватно работать с pip.
    Ответ написан
    Комментировать
  • Как идентифицировать target в build.rs?

    TrueBers
    @TrueBers
    Гуглю за еду
    А как оно будет работать, если build.exe для того и предназначен, чтобы запускаться самим тулчейном на хостовой системе, а не на таргете?

    Вот список переменных окружения, которые получаются через std::env::var в build.rs. Для target-triple тебе нужен TARGET.

    Чтобы получить host-triple, нужна переменная HOST.
    Ответ написан
    Комментировать
  • Как вызвать ядро со второго сектора дискеты из загрузчика на первом секторе дискетты?

    TrueBers
    @TrueBers
    Гуглю за еду
    Прочитать с диска в память и передать управление?

    Миллион статей в интернетах с девяностых годов же.
    https://wiki.osdev.org/Rolling_Your_Own_Bootloader хотя бы посмотри.

    Через int 13 читай следующий сектор и передавай управление через jump.
    Ответ написан
    3 комментария
  • Рекомендации по созданию приложения на C++?

    TrueBers
    @TrueBers
    Гуглю за еду
    Плюсы и гуй в 2024-м это уже не смешно.

    Графические интерфейсы на плюсах развиваются сейчас как полудолхая кляча. Баги по 15 лет не могут пофиксить в Кьюте, который тебе советуют. К тому же, Qt был на плюсах лет так 15 назад. Сейчас там всё на QML пишется и чистые плюсы самой компанией уже давно не поощряются. Нужно понять главное: каждой задаче -- свой инструмент. Если будешь писать такую программу на плюсах, будешь страдать. Много страдать. Не начало нулевых так-то, уже столько всего под эти задачи есть удобного, что стоило бы изучить эту сферу.

    Например, посмотри на Flutter. Очень приятный у шустрый фреймворк для создания графических приложений. Язык Dart учится с нуля за 2-3 дня. Написал на одном языке один раз, а работать это всё будет начиная от мобил и ПК, заканчивая вебом, Raspberry Pi, бортовым компьютером Теслы и Тойоты, телевизорами, фоторамками и прочими экзотическими устройствами.

    C++ сейчас учить нужно только для общего развития, писать на нём новые проекты не советую. Есть множество современных, куда более адекватных и не таких затратных по времени и силам языков, как Rust -- отличная замена C++, Zig -- крутая замена Си.
    Ответ написан
    Комментировать
  • Как заставить бота тг писать кириллицей?

    TrueBers
    @TrueBers
    Гуглю за еду
    Ну он же чёрным по белому пишет:
    Bad Request: strings must be encoded in UTF-8

    Кодируй строку в UTF-8 и отправляй.
    Ответ написан