Moondark

Moondark

Пикабушник
Дата рождения: 21 ноября 1989
поставил 1131 плюс и 301 минус
отредактировал 0 постов
проголосовал за 1 редактирование
Награды:
5 лет на Пикабу
3679 рейтинг 6 подписчиков 59 подписок 4 поста 2 в горячем

Сказ о том, почему LelResetFeg со спидраном не свезло

3 дня назад во время прохождения GTA: San Andreas на скорость товарищу LelResetFeg на голову упал вертолёт. Некоторые игроки начали подозревать стримера в нечестной игре, но если подумать, то ситуация выглядит слишком глупо
Если вы ранее играли в GTA: SA, то вполне возможно, что подобное с вами уже случалось: совершенно рандомная последовательность клавиш приводила к активации какого-нибудь чита.
В этом посте мы разберёмся, что же приводит к такому поведению игры

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

Для начала, нужно понять, как игра хранит список чит кодов.
Этот вопрос решается простым гуглением:

GTAG Modding:
San Andreas stores the last 29 characters typed on the keyboard, hashes the resulting string and compares it with the hashes of the cheats. Because the cheats are stored in hash form, it is much harder to figure out what they are. Most cheats have more than one code due to hash collisions and the intended cheat phrases for many took a long time to find.
...
Cheats have a minimum length of 6 characters and are stored all in upper-case.


Отлично, теперь мы знаем следующее:

- Чит коды хранятся в виде хешей
- Хеш-функция достаточно слабая (много коллизий)
- Длина чит кода может быть от 6 до 29 символов

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

Пример: Вы можете хешировать «Войну и мир» Л. Н. Толстого и на выходе получить строку вроде "73279c854ad356869d3f59150ebc964d53269aed" (хеш по алгоритму SHA-1). Затем, если вам скинут архив с кучей книг и рандомными названиями, то найти среди них нужное издание книги вы сможете просчитав хеши всех книг, и найдя среди них книгу с хешем "73279c854ad356869d3f59150ebc964d53269aed" (не читая ни названий, ни содержания).
Вероятность того, что хеш SHA-1 совпадёт с хешем другой книги - крайне мала.

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

Итак, что мы можем сделать дальше?
Поверим англоязычным товарищам на слово и будем считать, что хеш-функция действительно слабая.
Для этого есть некоторые предпосылки, например, оптимизация: во времена разработки GTA: SA (напомню, игра вышла в конце 2004 года) трата кучи ресурсов компьютера на просчёт хеша последних введённых символов на клавиатуре была бы... не лучшим вложением.

Наша задача - найти как можно больше коллизий для чит кода OHDUDE (спавн вертолёта Hunter), для её упрощения (и ускорения расчётов) мы ограничимся набором символов "WASD"

Проблема: не понятно, какую хеш-функцию использует игра. По этому поводу информации практически не найти, поэтому рассмотрим, какие кусочки информации есть на форумах:

Есть хеши чит-кодов:

Сказ о том, почему LelResetFeg со спидраном не свезло GTA: San Andreas, Программирование, Читы, Реверс-инжиниринг, Видео, Длиннопост

Каждый хеш длиной в 4 байта, с такой длиной куча коллизий - не сюрприз.
Запомним хеш нужного нам чита - 0xE958788A
На ум сразу приходит CRC32 (32=8*4 - от количества бит в хеше), вот только не понятно, какая его разновидность используется в игре.

Не будем ломать себе мозг и воспользуемся калькулятором.
Вводим OHDUDE, и... ничего похожего здесь нет:

Сказ о том, почему LelResetFeg со спидраном не свезло GTA: San Andreas, Программирование, Читы, Реверс-инжиниринг, Видео, Длиннопост

На этом этапе я провёл достаточно много времени, обнаружил на форумах утверждение, что в игре используется CRC-32/JAMCRC. Также было упоминание о расчётах CRC-32 в исходных кодах инструмента для изменения игровых файлов, но результаты никак не сходились.
До тех пор, пока до меня не дошло, что гораздо удобнее хранить историю нажатых клавиш в перевёрнутом виде. Посмотрим:

Сказ о том, почему LelResetFeg со спидраном не свезло GTA: San Andreas, Программирование, Читы, Реверс-инжиниринг, Видео, Длиннопост

Ха, вот оно как!
Значит, осталось перебрать все возможные последовательности нажатия кнопок W, A, S и D, хеш CRC-32/JAMCRC которых будет равен 0xE958788A.

Конечно, делать это мы будем не ручками, а при помощи небольшой программы.
В ней нет почти ничего интересного, суть сводится вот к чему:
- Получаем на вход ожидаемый чит код
- Считаем его хеш
- Перебираем все возможные сочетания WASD (длиной до 17 символов, но это можно изменить)
- Выплёвываем все совпадения, предварительно перевернув строку задом наперёд
Самые любопытные могут почитать исходный код. (Писалось под Linux/g++, заводилось на WSL)

Итак, после перебора 17 179 869 100 возможных сочетаний мы получаем следующий список:

1. DASD AWAA WSSW WAW
2. AWDD WAAD SAAA WASS S
3. SWSW SWAA AWWW ASWW S
4. SSWD AWSS ADWD SSDW A
5. SDAW WDWS DDWS WSAW A
(если проверять все возможные сочетания, список будет гораздо длиннее, но перебор 288 230 376 151 711 744 сочетаний займёт... скажем, достаточно продолжительное время)


5 коллизий, и это только 4 кнопки с макс. длиной 17 символов! Время проверить:

Ни одной осечки :)
Такой вот ночной детектив.
Будете генерировать свои версии чит-кодов - кидайте в комментарии, может кому-нибудь они ещё понадобятся.

Показать полностью 3 1

Баяны, акт третий [есть решение]

Речь пойдёт о посте https://pikabu.ru/story/vyi_razbiraytes_a_ya_poydu_5335434 , ныне похороненном в баянах.
Ранее обсуждалось, что в случае, если пост привносит что-то новое в смысловом/эстетическом/контентном плане (короче, если он более полный, чем похожий предыдущий), то он не считается баяном. Мнение модератора, которое высказывалось ранее ( #comment_94138739 ):

Баяны, акт третий [есть решение] Модератор, Баян

Однако в этом посте наш любимый @moderator игнорирует предыдущие решения и посылает нас куда подальше читать "Комментарии к правилам Пикабу с примерами" ( #comment_95755221 )


Я считаю, пора доработать правила, касающиеся баянов, и поставить в подобных спорах точку, вне зависимости от решения по этому конкретному посту. (Но отмечу, что предыдущие посты с "баянистым" контентом были откровенно плохи в качественном плане,  поэтому я и ввязался в это)

Предновогодний ремонт клавиатуры LG MH-594A

Уже полгода у меня не работала бОльшая часть кнопок на панели управления. И вот, несколько дней назад, в очередной раз упёршись в необходимость выключения микроволновки через открытие дверцы, меня наконец достало. Попытки воскресить клавиатуру народными методами не увенчались успехом (точнее, они помогли... на полтора часа). Раз токопроводящий лак так плохо держится - решено переделывать клавиатуру с мембранной на механическую.

Сам пациент:

Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост

Нам нужны:

* Пациент - 1 шт.

* Сервис мануал - 1 шт.

* Механические кнопки - 19 шт.

* Провод МГТФ - ~3 метра (с запасом)

* Прямые руки - 2 шт.

* Термоклей и пистолет к нему

* Что-то умеющее делать отверстия и сверло к нему


Итак. Для начала, снимаем блок управления с клавиатурой, отклеиваем верхнюю часть клавиатуры и намечаем будущие отверстия в пластике

Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост

Отклеиваем клавиатуру окончательно, сверлим отверстия:

Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост

(Да, получилось немного ущербно, но в целом - неплохо. Всё же это будет под декоративной частью клавиатуры.)

Теперь было бы неплохо заглянуть в сервис мануал и посмотреть, как у нас в этой клавиатуре всё устроено. На странице со схемами находим вот такую прелесть:

Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост

Мне было неудобно паять кнопки с помощью такой схемы, поэтому я достал свой любимый графический редактор, и сделал вот это:

Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост

Теперь гораздо нагляднее, не так ли?

Начнём с нижнего ряда, там где "Курица кусками" и варианты для установки таймера:

Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост

("Хмм, что ж, это было достаточно легко и быстро" - подумал я)


Спустя 6 часов мучений было готово всё остальное:

Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост

Все кнопки соединены, но... У меня не осталось ничего, чтобы подпаять их к самой плате управления! В начале я указал 3 метра провода МГТФ. Это потому, что двух метров мне хватило только на сами кнопки.


В ход идут китайские разноцветные провода. (Всё равно в макетках они держались не очень хорошо, так что фиг с ними)

Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост
Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост

Время собрать всё воедино и проверить!

Подклеиваем декоративную часть клавиатуры, подключаем всё назад...

Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост

И... запуск!

Предновогодний ремонт клавиатуры LG MH-594A Ремонт техники, Микроволновка, СВЧ, LG, Длиннопост

Вот такой вот ремонт.


Выводы:

Если и делать подобное, то только для себя - убивает очень много времени. С другой стороны, проблемы с клавиатурой в ближайшем будущем не ожидаются :)

Всех с наступающим новым годом, удачных и интересных ремонтов, адекватных клиентов и отличного настроения!

Показать полностью 11

Китайские КИП

Попросили починить микрофон - Enbao EU2700TX, "Глючит после падения", осмотрел всё, напрягла катушка индуктивности, у неё определённо расколот сердечник (на самом деле, ощущение как-будто его пытались "подкрутить"), решил начать с замены этой самой индуктивности, но не могу понять, какой тут номинал, измерить нечем (да и толку, если она, вероятно, повреждена?). Буду признателен, если кто подскажет, куда копать.

Китайские КИП Ремонт техники, Индуктивность, Китай, Аудиотехника
Китайские КИП Ремонт техники, Индуктивность, Китай, Аудиотехника
Показать полностью 2
Отличная работа, все прочитано!