TGViewer
Channel Public Channel
Нажимаем кнопки

Нажимаем кнопки

@pushing_buttons

Subscribers
223
Photos
70
Videos
11
Links
24

Showing posts older than #79 · Back to latest

Older Posts 13 shown
Post #78 871
Индикатор уровня топлива
Это самая обидная часть ремонта. Изначально индикатор работал, через какое-то время перестал. Я откладывал решение этой проблемы до последнего, и даже съездил в Манчестере с неработающим индикатором. Всё потому что индикатор является частью топливного насоса. Чтобы заменить индикатор, нужно заменить весь насос. Я убедился в том, что проблема действительно в насосе, отключив его разъём и поставив на место контактов индикатора уровня резистор – машина стала думать, что бак полный. Нормальный способ поменять насос – это слить бензин, снять бак и потом уже заменить насос. Сервисы, в которые я позвонил, отказались это делать.

Я решил следовать советам из интернета. Вырезал ножницами по металлу дыру под задним пассажирским сидением и заменил насос через неё. При этом в баке оставалось полно бензина, так что доставать из него насос мне было не по себе. Всё обошлось, ничего не загорелось. Машина ездит с новым насосом с eBay (на этот раз за £50!), индикатор работает.

Итог
Мне сложно сосчитать, сколько раз я хотел отправить машину на свалку за то время, что я её ремонтировал. Это был захватывающий путь со взлётами и падениями (и погружениями), успехами и неудачами. Спасать утопленика было весело, хоть и не совсем рационально 🙃
  • 🔥 6
  • ❤ 1
  • ❤‍🔥 1
Post #77 780
Машина на ходу и все функции работают без каких-либо проблем. Я уже проехал на ней около 800 км – ничего при этом не сломалось. Как я к этому пришёл...

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

Салон
Оставались проблемы с электроникой и мокрым салоном. Проблема мокрого салона решилась доставанием всех сидений и ковра наружу. Ковёр я помыл шампунем и высушил дома. Сидения стояли на улице несколько недель. Приходилось выходить укрывать их от дождя, так как в Лондоне началась осенняя погода сразу после инцидента. Задние сидения до сих пор выдают немного воды, если на них посидеть какое-то время 💧

Электроника
Большая часть проблем с электроникой решилась заменой одного компонента – Body Control Module (BCM). Плюс старой машины в том, что почти любую деталь можно купить на eBay за £30, вне зависимости от того, что это за деталь. После замены BCM заработали все основные функции управления: фары, поворотники, дворники и прочее. Машина перестала делать то, что ей самой захочется.

Поменял модуль климат контроля – заработала печка и кондиционер. Для этого пришлось разобрать почти весь салон. Видимо, не предполагалось, что кому-то придётся менять эту часть 😄️️

Сигнал тоже не работал – чтобы добраться до него, нужно было снять передний бампер. А вы знали, что гудок состоит из двух динамиков, работающих на разной частоте? Машины издают не одну ноту, а интервал – малую терцию в большинстве случаев 🎺

Блок подушек безопасности тоже пришлось заменить. После замены, лампочка на приборной панели продолжила сигнализировать об ошибке. Научился подключать ноутбук к машине, чтобы читать и сбрасывать ошибки. Оказалось, что я неправильно подключил натяжитель ремня безопасности, когда ставил сидение на место. Подключил как положено, сбросил ошибки – лампочка погасла.

Дверные замки
Изначально открывалась только одна дверь – водительская, при помощи механического ключа. Остальные двери не открывались даже изнутри. После долгого гугления, выяснилось, что есть функция под названием deadlock. Её придумали чтобы защититься от воров, которые открывают машины через разбитые боковые окна. Эта функция каким-то образом активировалась, а потом перегорел предохранитель центрального замка. Чтобы добраться до этого предохранителя, нужно открыть пассажирскую дверь 🤦 Помогли мои новые навыки в электронике. В купленом в интернете руководстве по обслуживанию нашлась схема контактов дверей. Подключил аккумулятор к контактам моторчика, который открывает и закрывает замок – дверь открылась. Я почувствовал себя хакером 🧑‍💻

Заменил сгоревший предохранитель – заработал центральный замок, но только на открывание, плюс багажник не открывался. Пришлось залезть в багажник через салон и открыть его оттуда. Заменил замок в одной из дверей – все двери стали открываться и закрываться с ключа.
  • ❤ 7
Post #76 525
Диск оказался зашифрован
Все диски на маках шифруются секретным ключом - Volume Encryption Key (VEK). Ключ этот сам хранится в зашифрованном виде несколько раз - по одному разу на каждого пользователя. Для того, чтобы получить ключ расшифровки содержимого диска, нужно знать пароль любого из пользователей. Пароль хешируется по определённому алгоритму, из чего получается так называемый Key Encryption Key (KEK). Этим ключом уже можно попробовать расшифровать сам VEK. Когда шифруют VEK, к нему в конец приписывают определённую последовательность: 0xA6A6A6A6A6A6A6A6. Если результат расшифровки заканчивается так, значит пароль правильный. Когда пользователь меняет пароль или добавляется новый пользователь, ключ шифрования остаётся старый, но его нужно зашифровать при помощи нового обновлённого KEK.

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

Друг запустил этот скрипт у себя, ввёл пароль и отправил расшифрованный VEK мне. Мне осталось только заменить логику запрашивания пароля в драйвере, чтобы она сразу выдавала ключ расшифровки диска. Драйвер смог работать дальше...

Ищем заветный email
После всех манипуляций, драйвер смог успешно отработать и смонтировать образ без ошибок. Я мог перемещаться по директориям и смотреть, какие файлы в них находились. Было ощущение, что успех совсем близок. Однако, почти любая попытка прочитать какой-либо файл, приводил к ошибке.

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

Усовершенствуем старый трюк: добавим логирование в код драйвера, который пытается открыть файл на чтение. Каждый раз, когда драйвер открывает какой-либо файл, я узнаю его адрес. Осталось запустить grep из корневой директории с письмами и собрать получившиеся логи. grep пробует открыть все файлы во всём под-дереве, так что я так получил адреса всех писем. После дедупликации получилось ~6000 офсетов.

Я разбил полученные адреса на группы по 1000 и написал 6 скриптов следующего вида:
ddrescue -i 25890078720 -s 65536 /dev/sda2 dump-part2.img dump-part2.log &&
ddrescue -i 119821115392 -s 65536 /dev/sda2 dump-part2.img dump-part2.log &&
ddrescue -i 112831520768 -s 65536 /dev/sda2 dump-part2.img dump-part2.log &&
... 1000 таких команд

Каждая из команд заставляет ddrescue скопировать 64 кб данных по заданному офсету.
К моему удивлению, такой подход сработал очень хорошо, и диск за всё время перегрелся всего один раз.

Мне тогда лишь осталось скопировать полученные файлы с образа и отправить их другу на проверку. Письмо нашлось, клиент остался доволен (хоть письмо в результате оказалось и не нужно 😐).
  • 🔥 8
  • ⚡ 1
  • 🤩 1
Post #74 260
Восстанавливаем данные с диска MacBook Air

Ситуация: на старом макбуке лежит очень важная переписка, которую один мой друг вёл через программу Mail много лет назад. С тех пор макбук сломался и перестал включаться. Судя по всему, отказал диск. Я решил попробовал помочь другу и восстановить письма с этого нерабочего ноутбука.

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

Читаем всё подряд
Главное - это то, что Ubuntu позволила обратиться к проблемному диску без необходимости монтировать файловую систему. Возникла идея сделать дамп диска при помощи программы ddrescue, а прочитать содержимого этого дампа уже на другом компьютере. Идея сработала частично: поначалу данные копировались, но потом что-то ломалось, и кроме ошибок с этого диска уже ничего невозможно было получить до следующего презапуска. Преимущество ddrescue в том, что его исполнение можно прервать, и при последующем запуске копирование продолжится для необработанных секторов. Каждый запуск приводил к копированию дополнительных 4% содержимого, после чего диск отключался и начинал сыпать ошибки. Если выключить компьютер и дать ему постоять полчаса, то можно было скопировать ещё 4%. Похоже, что диск перегревался и автоматически отключался, чтобы не дать себе сгореть.

Я опробовал несколько разных способов не дать диску перегреться: ограничивал скорость чтения и запускал копирование на пару минут, после чего делал паузу. Диск всё равно отключался, поэтому лучшей методикой было просто пытаться прочитать максимальное количество данных, пока диск не отключится. Таким образом у меня получилось достать 20% содержимого, после чего у меня закончилось терпение, и я решил пробовать работать с тем, что удалось скопировать.

Монтируем частичный образ
Mac использует файловую систему APFS. Какой-то энтузиаст провёл ревёрс-инжиниринг этой файловой системы, написал драйвер под Linux и выложил его на GitHub: apfs-fuse. Я сбилдил этот драйвер на другом компьютере с Ubuntu и попробовал смонтировать то, что получилось извлечь со сломанного диска. Ожидаемо, драйвер упал с вот такой ошибкой:
ReadAndVerifyHeaderBlock checksum error.
Failed to load checkpoint map
Unable to init container

У меня возникла идея, которая оказалась решающей для всего дальнейшего процесса восстановления. Что если добавить в код дополнительное логирование, чтобы знать точно, какой адрес драйвер пытается прочитать? Зная адрес проблемного сектора, можно будет запустить ddrescue в соответствующей области диска, и попробовать смонтировать дополненный образ снова. Таким образом я смог восстановить все необходимые служебные части диска, руководствуясь новыми сообщениями об ошибках, которые выглядели примерно так:
CheckPointMap: reading header block paddr=3995372
ApfsContainer: reading spaceman paddr=3981781, num_blcks=1
ReadAndVerifyHeaderBlock checksum error.
Драйвер прошёл первые стадии инициализации, пока не дошёл до следующего препятствия...
  • ❤ 2
  • ⚡ 1
  • 🔥 1
Post #73 273
Машина завелась!

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

Если получится спасти салон и электронику, будет вполне рабочая машина!

PS: дворники работают сами по себе. Они включились из-за бед с электроникой, как и фары.
  • 🔥 6
  • ❤ 1
  • 🤩 1
Post #71 232
На самом деле, машина моя 🥲
Парковку затопило приливом, пока я гулял по окрестностям. Машина набрала полный салон воды и стала показывать всё, что она умеет. Включились фары, гудок, поворотники. Явно какая-то электроника была не в восторге.

Машину уже достали из воды и доставили к дому на эвакуаторе. Заводить пока не пробовал. Готовлю план действий. Если она заведётся, нужно будет стараться спасти электронику и салон.
  • 😱 5
  • 😢 3
  • ❤ 1
Post #70 217
Нашел в реке машину. Буду пробовать восстановить.
  • ❤ 2
  • 🤯 1
Post #69 212
Спустя полтора месяца ожиданий, покупатель нашёлся! Пришлось довольно сильно скинуть цену, так как я не смог ответить "нет" на такое сообщение 😅

Если вычесть доставку и комиссию Ebay, остаётся £204.95. Чистая прибыль – £73.52. Я надеялся на большее, но для первой сделки это вполне неплохо.

Новый баланс: £247.53
  • ❤ 6
Post #68 337
Усилитель заработал
Напомню, что два месяца назад мне удалось заставить усилитель играть через один из двух каналов. В собраном виде к ключевым компонентам должен быть присоединён огромный радиатор для охлаждения, который при тестировании мне было лень прикручивать на место. Из-за этого тестировать приходилось короткими интервалами, чтобы транзисторы не перегрелись. В один из подходов я заслушался своей любимой песней и продержал усилитель включённым слишком долго. Где-то через минуту работы один из транзисторов заискрился и взорвался. Наушник издал сильный хлопок, от которого у меня потом долго звинело в ухе. Я решил больше не экспериментировать и сразу заказать все сгоревшие транзисторы, которые получилось обнаружить.

Первый заказ дошёл до UK довольно быстро, но в Leeds вместо Лондона. Когда он доехал до Лондона, посылку зачем-то отправили в Амстердам. В Амстердаме быстро поняли, что посылку всё-таки нужно отправить в Лондон, что они и сделали. С того момента прошёл месяц без каких-либо обновлений. Пришлось ждать повторной доставки.

На днях всё пришло. Я пряпаял транзисторы на место, прикрутил к ним радиатор и полностью собрал усилитель. К моему удивлению, всё просто заработало.

Выставил на продажу, жду покупателей: https://www.ebay.co.uk/itm/406028513954
Текущий баланс: £42.58
  • ❤‍🔥 4
  • 👍 1
Post #64 202
Аудио Микшер
Пока ждал, когда доставят детали для усилителя, решил починить что-нибудь ещё. Купил на Ebay сломаный микшер. По описанию выглядело так, будто будет достаточно тыкнуть паяльником в несколько мест и всё снова заработает. В реальности он действительно практически полностью работал, но почти все каналы сильно гудели. Пользоваться было невозможно. Это вдобавок к проблемам, которые были завлены – сигнал то появлялся, то пропадал.

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

С трансформатора подвели +15 и -15 вольт и соединили с входными контактами через диоды, которые направлены так, чтобы эти +15 и -15 вольт не пустить на предусилитель. Но зачем? Идея в том, что когда на входе напряжение становится больше + или - 15 вольт, то диоды открываются и дают напряжению уйти обратно на трансформатор. Например, если 48 вольт с микрофона начинают протекать через конденсатор C4 на усиливающую схему, то разница потенциалов на диоде D1 становится такой, что он начинает пропускать ток, уменьшая потенциал, который уходит к усилителю до 15 вольт.

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

В итоге, диоды заменены, взорвавшийся op-Amp тоже. Микшер работает.
  • 🏆 3
  • ❤ 1
Post #63 240
Недавно решил пройти Vice City на Play Station 2. Многие эту игру любят за масштабный открытый мир, который можно очень долго изучать. Один из аспектов игры - это поиск "пакетов", спрятанных по всему городу. На некоторые из них можно случайно наткнуться в ходе игры, но чтобы собрать все 100, нужно приложить значительные усилия.

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

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

На диске с игрой было несколько типов файлов, которые выглядели полезными:
• SLES_510.61 - главный скомпилированный бинарник
• Файлы с расширениями IDA и IPL и ZON. Эти файлы текстовые, в некоторых хранятся координаты.
• MAIN.SCM - бинарный файл неизвестного назначения. Как выяснилось далее, там хранятся все скрипты и миссии в игре.

Координаты известных пакетов
IPL файлы выглядели интересно, так как в них хранятся названия и координаты объектов. Там описаны всякие фонарные столбы, пальмы и скамейки. Хоть пакетов я там и не нашёл, эти файлы помогли мне приблизительно узнать координаты некоторых из известных мне пакетов.

Я выбрал в качестве референса пакеты, которые находились возле особенных, выделяющихся объектов. Один был возле маяка, другой - в пиццерии и третий - возле бассейна с характерной формой. В IPL файлах они были записаны как nbt_pizzaplace, od_lighthouse и cokpoolwater.

Читаем машинный код
Среди машинных инструкций и структур где-то должны лежать данные. Единственное, на что я мог полагаться в бинарниках - это числа. Я надеялся, что они хранятся в каком-нибудь нормальном формате, который я смогу прочитать. Число с плавающей точкой можно получить, читая любой набор байтов. Мне же подходят только те числа, которые похожи на координаты - в пределах от -2000 до 2000 и по модулю больше 0.1. Так я могу отсеять числа с большой экспонентой - такие числа встречаются среди данных чаще всего.

Я стал запускать линейный поиск блоков байтов, которые при раскодировании дадут мне хорошие числа. Путём перебора параметров выяснилось, что больше всего чисел получается, если искать 4-байтные float-ы, записанные в little endian. Нашлось 246 525 чисел в основном бинарнике и 74 207 в MAIN.SCM.

Теперь можно начать искать координаты известных пакетов, которые я нашёл ранее. Я брал каждое из найденных чисел и проверял, есть ли ещё одно число, записанное с определённым отступом после него. Если есть, то первое число интерпретировалось как X и второе - как Y. Дальше считаем евклидово расстояние до известных пакетов и репортим, если это расстояние меньше 50 до любого из них. В MAIN.SCM нашёлся кластер из 6 чисел, которые подходили под все условия. Это и было то заветное место, где хранятся координаты всех пакетов!

Оказалось, что пакет возле маяка хранится самым первым в списке. А всего нашлась 101 точка. Получается, пакетов не 100, а 101?

Координаты почему-то хранятся с отступом в 1 байт между числами и 2 байта между пакетами. Получается, на одну координату отведено 5 байт, а на точку - 17 (3 координаты + отступ). Почему нет выравнивания и почему не записано просто одно число за другим - не знаю.

Наносим точки на карту
В файле NAVIG.ZON нашлись координаты районов города с названиями. Это помогло мне сопоставить точки со скриншотом карты. При помощи скрипта была сгенерирована прозрачная картинка с границами областей и точками на местах пакетов. Потом самая сложная часть - сопоставить сгенерированную карту с игровой с нанесёнными вручную точками.

Интересно, рассчитывали ли разработчики на такой вариант прохождения игры?
  • 🔥 4
Post #59 166
Реверс-инжиниринг GTA Vice City
  • 🔥 1
Post #56 180
Это были фотографии из самолёта.
Сделал отображение превью на карте. Прототипом уже вполне можно пользоваться!
  • ❤ 3
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →