Автослесарное, или как я провёл на даче

Не работал у моего Пацифика кондей. Ездил я по разным сервисам. Диагнозы различались кардинально. Правильный поставили на Салова, 44 – помер датчик обморожения. Правда, лечение предложили не совсем верное и не самое простое – давайте разберём полмашины и махнём его.

Жаба шепнула – читай мануалы, Дениса. И я устремился…

Делов оказалось минут на 30.

Итак, рассказ в картинках, как “поменять” датчик обморожения на Chrysler Pacifica. 😉

https://www.instagram.com/p/BD54SNVqxUR/

Отдельное спасибо тестю, кто сделал мне такой полезный подарок на день рождения – презентовал два замечательных термистора на 10кОм! dolf_ru_114.gif😀

 

Взлом пароля Excel 2016. Вы держитесь здесь, всего доброго, хорошего настроения и здоровья

Ущербный Reddit’а удалил мой комментарий какому-то ученику. Полагаю из-за ссылок на наш мегакрутой софт для взлома паролей. Ну и дурак!.. 😉

Там пользователь problemboy99 спрашивает, как ему взломать пароль к Excel 2016. Если он это сделает, то получит полный зачёт. Типа лёгкие деньги!

Ему начинают лить в уши всякий бред – напиши VBA макрос, открой файл в OpenOffice и подобную чушь…

Народ, ау! Файл закрыт паролем! Это просто злая шутка учителя. Зачёт через пару тысяч лет. Смешно.

Дело в том, что взломать пароль Excel 2016 не представляя его структуру невозможно(*). Трюков, типа гарантированной расшифровки Excel 97-2003, для Excel 2007-2016 не существует. Только полный перебор вариантов. А раз мы ничего не знаем про структуру паролей, то придётся перебирать все-все варианты (два набора букв, цифры, спецсимволы). И вот уже пароли длиной всего 7 символов будут перебираться несколько тысяч лет:

Взлом пароля Excel 2013 в Passcovery Suite

Медленно? А быстрее не будет! Поверьте-проверьте: наш софт вылизан до идеала в плане оптимизации скорости работы. Скорость можно повысить масштабированием: добавлением в систему быстрых GPU, но это уже другие деньги. Не маленькие и не лёгкие. 🙂

Рейтинг GPU, если кому-то интересно.

И как тогда взламывать пароли Excel 2016?..

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

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

  • атака по словарю с мутациями. Если предположить, что пароль – это слово, набор слов, слова с изменениями (password -> p@$$w0rd), то наш софт умеет организовать атаку с мутациями по указанным словарям. Видео-пример для любопытных.
  • атака по [расширенной] маске. Если хоть что-то известно о структуре пароля, то нужно пробовать сочинить сложную маску. В нашем софте можно задавать всякую непростую экзотику: первый символ в пароле – только заглавная буква, второй – строго цифра, дальше набор букв, а в конце – цифра и спецсимвол (P4hdJfy9!). Пример из жизни.

В общем простого зачёта парню не видать, но из моего ответа он об этом не узнает. Ущербный Reddit потёр мой комментарий. 🙂

PS: конечно же всегда есть ненулевая вероятность, что пароль устанавливал наивный идиот и он придумал отличный пароль – 12345 🙂

Я ему: “Exim, pipe email в скрипт и в почтовый ящик!” А он такой: “Mail delivery failed!”

Как уже писал, входящие ордера у меня идут на псевдо-email. Exim отправляет поток в скрипт и передаёт письмо дальше на реально существующий email.

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

И вот оно “поломалось”…

То есть с моей стороны всё работало, как надо, а вот отправителю от сервера приходил привет вида:

SUBJ: Mail delivery failed: returning message to sender

BODY:
A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  pipe to |/var/www/scrpts/gvmmny.php
    generated by ordr@email.com

The following text was generated during the delivery attempt:

------ pipe to |/var/www/scrpts/gvmmny.php
       generated by ordr@email.com ------

PHP Warning:  Module 'geoip' already loaded in Unknown on line 0
Works! OrderID: 63838534

blah-blah-blah

Сразу как-то не дошло, в чём проблема. Пришлось интернеты ихние читать…

Суть в том, что скрипт и вся его обвязка не должны ничего генерировать в поток. А у меня получалось, что и скрипт (в тестовых целях) чего-то своё писал, и варнинг от PHP прилетал.

Решение:

  1. Задисабил свой текст.
  2. Задисабил подключение модуля в php.ini (;extension=geoip.so), поскольку он уже в сборке самого PHP присутствует (потому и варнинг).

И всё снова стало хорошо: и база пополняется, и я письма получаю, и отправитель отлупов от моего сервера не видит.

Опять делаю SSL A-класса. Теперь на Nginx

Резал пуделя, когда был на говнохостинге от Битвеб. Тогда это был патч для апатч.

ssltestaСейчас, на Sinaro, сервер работает в связке Apache+Nginx и пришлось в общем-то тоже самое (отключать SSL3 и запрещать слабые алгоритмы шифрования) делать в конфиге Nginx (/etc/nginx/nginx.conf):

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
ssl_prefer_server_ciphers on;

Потом рестарт и всё пучком.

service nginx restart

Серт брал у китайского WoSign. C дешёвого GoGetSSL переключилось всё хорошо. Работает. 🙂

 

Частичный редирект http -> https в Nginx

Отломалась активация софта.

Вскрытие показало, что проблема в редиректе http->https, сделаному средствами Nginx:

listen 185.48.58.35:80;
return 301 https://$host$request_uri;

В браузере всё пучком, а из программы ключ активации запрашивается по http, идёт редирект и ответа она уже не видит.

Решение очевидно в общем-то – закрыл редирект в условие:

listen 185.48.58.35:80;
if ($request_uri !~ “^/diracti”)
{
return 301 https://$host$request_uri;
}

То есть редиректим всё, кроме того в чьём URI есть нужная папка (тут это / diracti)

Рестарт Nginx: service nginx restart и всё, как надо.

Google PageSpeed Insights : Включите сжатие

Суть в сокращении объёма передаваемых данных. Сервер пакует их в ZIP, а браузер распаковывает и отображает.

Проверить включено ли сжатие на сервере можно здесь, например. У меня оно было отключено.

Я для сжатия использовал модуль mod_deflate. Существует еще и mod_gzip.

Опять полез в конфиг Апача и прописал такую конструкцию:

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript application/rss+xml
</IfModule>

То есть проверяем, если модуль активен, то пускай пакует данные указанных типов.

Рестарт Апача (service httpd restart) и бинго – PageSpeed Insights отсыпал кучку поинтов. 🙂

UPD: Я ж теперь на Sinaro.Host (да-да, БитВеб оказался полным говном) и у меня тут зоопарк из вебсерверов (так было и на Форнексе). За статику отвечает Nginx. Для него нужны свои директивы на сжатие (конфиг по вдресу /etc/nginx/nginx.conf) и свой рестарт (service nginx restart):

gzip on;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

Google PageSpeed Insights : Оптимизируйте код JavaScript и CSS

Продолжаю собирать монетки. Было 77/100. Станет 95/100. 😉

“Удалите из верхней части страницы код JavaScript и CSS, блокирующий отображение,” – говорит нам Гугль.

Ерунда какая!

Сам же гугль хочет responsible design видеть. А он строится на собственных стилях шаблонов и стилях фрэймворков (в моём шаблоне это Bootstrap).

Если все стили оптом отправить в ссылку к </body>, то плывёт отображение страницы.

Решение в исходнике самого Google:

#стилиоднойстрокойТо есть я тупо запилил все критические стили в строку и прописал их явно в хидер шаблона. 150Kb текста в шаблоне выглядят дико, но монетки от PageSpeed Insights я получил – 95/100.

Для минимизации и обратного форматирования .css использовал Dan’s Tools. Там, кстати, много нужных штук.

Да, а все JavaScripts, второстепенные CSS и линки на GoogleFonts были сосланы в низ страницы, к закрывающему тегу.

Работает.

UPD: Минимайзер Дэна жмёт не максимально, как оказалось. Вот этот пакует лучше.

Google PageSpeed Insights : Используйте кеш браузера

Прогибаемся под рекомендации Большого Брата 😉

Для сервера на Apache есть два метода, за каждый из которых отвечает свой модуль – mod_headers или mod_expires. Я использовал mod_headers.

По совету отсюда, прописал в .htaccess конструкцию:

<ifModule mod_headers.c>
<FilesMatch “\.(js|css|txt)$”>
Header set Cache-Control “max-age=604800” #храним неделю
</FilesMatch>
<FilesMatch “\.(flv|swf|ico|gif|jpg|jpeg|png)$”>
Header set Cache-Control “max-age=2592000” #храним месяц
</FilesMatch>
<FilesMatch “\.(pl|php|cgi|spl|scgi|fcgi)$”>
Header unset Cache-Control #запрещаем кэширование
</FilesMatch>
</IfModule>

Прописал, а оно – чик и не работает. 😉

Оказалось, что сам модуль на сервере не установлен. Установил mod_headres и перезапустил Apache, как рекомендовано здесь:

1. a2enmod headers – включил модуль

2. service apache2 restart – перезапустил службу Apache

Удовлетворённость PageSpeed Insights для мобильника сайтом составила 77/100

Оптимизирую дальше

UPD: “А какого править .htaccess для каждого сайта-то?” – подумал я и запузырил конструкцию <IfModule mod_headers.c> в конфиг файл самого апача. Перезапустил его и все сайты сервера отправляют одинаковые директивы.

Обновись до Windows 10 бесплатно

Про скорый выход Windows 10 конечно же слышал. Новость, что 29 июля нас ждёт новый триумф Microsoft Windows из всех утюгов льётся.

Было как-то всё равно.

А тут вчера – Чик! и иконка загорелась в TaskBar’е – Get Windows 10. Кликнул и вижу:

Get Windows 10 free

Зарезервировал, жду 🙂

Windows 10 reserved

И подслушанная мысль про бесплатный апгрейд до новой версии.

Суть в том, что шаг-то вынужденный. Времена поменялись. Приходится искать другие варианты монетизации. Тупо “продажа Windows” уже не катит. Apple и Google отгрызают рынок и приучают пользователя хотеть фришных решений, недорогих лицензий и копеешных платежей за сервисы.

Оно видно и по продажам наших паролеломалок – покупает народ всё со скрипом и жалобами, что ценник у нас ломовой. 😉

Учим Apache правильно отдавать файлы с неизвестным расширением

Наши радужные таблицы для расшифровки Excel, Word и PDF, являясь по сути бинарным потоком данных имеют неизвестное для Apache расширение (.prt) и, как результат, сервер неверно определяет их тип данных:

Content-Type: text/plain

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

Фу-фу-фу!

Решение – явное указание типа данных для файлов с нужным расширением в .htaccess:

AddType “application/octet-stream” .prt

Теперь при переходе по ссылке на файл таблицы появляется окно с предложением сохранить “octet-stream” на диск.

mime-type