Category Archives: web-дев

Внезапно, wordpress!

А вот вы в курсе, что первая, совсем первая запись тут появилась аж 04.10.2009? Так-то! Кто-то отмечает дни рождения, различные даты, типа христанутой пасхи или чего еще. А я не отмечаю. Скажем, этот блог совсем не отмечал дней рождений. А сегодня он опять сменил ориентацию и, внезапно, опять перешел на богомерзкий wordpress. Почему? Да потому, что manistream и, конечно же, из-за лени. В ближайшее время вернется проигрывание аудио, а также архив всякого стаффа из happiness.chto.su

Reversing Google Play Store.

Да, вслед за Реверсом AppStore, решил я взяться за то же самое, но с Google. Google Play Store. (как Бонд. Джеймс Бонд).

Весело то, что у гугла все просто и секъюрно. Юзаются подписи, nonce’ы. А также сервис разделяется на две составляющие – push и обычную. Все запаковано во что бы вы думали? Правильно – protobuffers! It’s hard to decode, ибо формат бинарного сообщения сам себя не описывает, много эвристики и веселья.
Забавно, однако, что, как и в Apple, ВНЕЗАПНО, плевали они на стандарты (или я неправильно понял?) – gzip отдается плейнтекстом/binary – в protobuffers, а вот binary отдается в… gzip!:

Покупка проходит очень легко и непринужденно сложно.

Первое – /fdfe/toc – выдает данные о Terms&Conditions маркета и другую обязательную чушь.
Второе – /fdfe/purchase или /market/api/ApiRequest  – получить данные о покупке (та кнопка “купить” в маркете)
Третье – /fdfe/completePurchase – выполнить собственно покупку
Пятое – /fdfe/purchaseStatus или /market/api/ApiRequest – проверить статус покупки – получить nonce и прочие параметры покупке в json
Шестое – /market/api/ApiRequest – получение Nonce, деталей покупки
Седьмое – запрос к /market/api/ApiRequest и получение какой-то интересной строки типа ‹ г bе`PxБОі‰‰ эњ – я не понял, что это.

Также не ясно, почему запросы идут то к /market/api/ApiRequest, то к /fdfe/* при покупке. Может я попал под тихую смену протоколов?

+ большой брат следит за тобой! Переодически уходят запросы на /fdfe/log:

Вместе с этим приходит push-уведомление с данными о том, что, “ваша покупка загружена”, либо “не удалось совершить покупку” – пока остановился на этом.
Забавно, что все это дело работет через TCP with SSL/TLS, ВНЕЗАПНО, по mtalk.google.com (был в полной уверенности, что будет что-то на подобие XMPP), ан нет – protobuffers в base64 и что-то еще:

To be continued… (если меня, конечно, корпорация добра не забанит)
(C) ZonD80

Реверс инженеринг протокола appstore

Встречайте – In-AppStore.com – плод моих трудов с 4 по 12 июля. Реверс инженеринг протокола appstore пришел к успеху. Что меня сподвигло на такой шаг? Во-первых, просто грабительское приложение CSR Racing. Деньги просят отовсюду, играть невозможно. Ну не наглость ли? Вот так-вот.

Очень порадовал и сам AppStore. Покупка приложения – это вам не хухры-мухры. Как минимум 5 запросов, а с валидацией и все 7. И еще, у apple просто свалка из всех возможных технологий XML (aka PLIST) via gzip. XML-PLIST просто как plain. JSON под gzip, NSDictionary под gzip и в base64. JSON в base64. Ужас! Это еще не все! Часть appstore управляется чисто POST/GET заголовками, часть работает через HTTPS. Часть через HTTP. Вот скажем получить список покупок – http. Купить что-то https. Проверить покупку, при том получив ту же информацию за исключением подписи – уже http! Такие дела.

Еще интересно то, что срали они на стандарты построения POST запросов. application/x-www-form-urlencoded у них в некоторых запросах тупо идет PLIST-ом. Никакого urlencode, никакого построения ссылок, что вы? Не, не слышали. Так и отправляются POST-ом целые XML-документы без компрессии.
А как зашифрован чек? Встречайте JSON->base64->NSDictionary->base64->NSDictionary. Вот такие дела.
А вы знали, как дох… много запросов делают ваши любимые игрушки и приложения? Ужаснах, есть куча неизвестных серверов статистики, где логгится, когда вы открыли приложение, сколько в нем провели, сколько тапнули по экрану. Большой брат следит за вами!

И еще раз – In-AppStore.com

(C) ZonD80

Aurora. Safari. Chrome.

Переход на Safari опять не удался. Ну slow он, slow. Да и плагинов меньше. И загрузка не показывается. Хотел запилить свою, даже зарегался apple-safari-developer’ом, но нет, это слишком жестокие костыли. В итоге вернулся опять на stable chrome, ибо beta не исправила косяк с недоверенным CA SSL-сертификата (буду таки юзать сафари на таких сайтах), а в dev-версии глючат инпуты. Пичалька.
Еще сегодня по наводке тов.Николая (это с которым я пилю очень интересное дело) затестил Firefox Aurora. Awesome Wow! Effect™3D-раскладка CSS-стилей конечно решает. Сайты еще никогда не были таким конструктором. Зацените:

Да, да! Это – в окне вашего браузера. Юзабельно для разработки? ИМХО НЕТ, но красиво! + я таки не очень долюбливаю firefox после их бесконечных апдейтов и свистоперделках после версии 3.0…. + тормоз он с плагинами и оперативки жрет… (maybe, это стереотип?)
В общем, круто, но… google. google chrome. и apple….

(C) ZonD80

PHP/binary

Говорите PHP – быдлокодерский скриптовый язык высокого уровня? Да, maybe. Сегодня я в рамках моего хобби Kinokpk.com releaser работал с UDP-пакетами, считал количество бит, оффсеты, паковал, распаковывал, отправлял и принимал все это дело на уровне сокетов. Такие дела! 
(C) ZonD80

Safari. No flash. Just HTML5

Итак, еще одна попытка перейти полностью на safari, ибо хром не принимает кастомные сертификаты. Это печально. Вроде полет нормальный.
(C) ZonD80

Все гениально просто

Все гениальное – просто.

Не помню, кто именно так сказал, но это действительно так. Суть:

Я разрабатываю одну очень интересную систему, там есть 2 типа эммм… проектов – технология, и собственно сам проект. Технология описывает базовые отношения между составными частями проекта. Затем, при создании нового проекта, технология копируется в него и де-факто мы имеем шаблон проекта с заданными заранее зависимостями. Так вот, при копировании все ок, зависимости соблюдены. Но, тут возникает вопрос, что делать, если создается что-то новое, или создается что-то по образу уже находящейся в производстве вещи? А если это цепочка вещей, а если внутри цепочки перекрестные зависимости от множества других цепочек?

Немного графики:

Вопрос: как соотнести автоматически зависимости между объектами на уровне цепочек?
Думали, спорили аж с пятницы. Даже матом ругались. Было несколько версий:

  1. Создавать цепочки пообъектно, из кирпичиков-объектов, каждому вручную указывать зависимости – это долго, муторно и сложно
  2. Создавать цепочки по технологии, но технология не хранит данных о зависимости конкретных объектов в проекте!
  3. Создавать цепочки по технологии и указывать в какой цепочке искать объекты для зависимости. А если объектов много, если у каждого перекрестные зависимости, а что будет зависеть от самой цепочки, а что, если какой-то объект в уже существующих цепочках удалили и его вообще нет – куча исключений
  4. Создавать цепочки и объекты по технологии, однако что, если все зависимости уже удовлетворены – будет куча хлама и неиспользуемых объектов
  5. Создавать пустые цепочки и потом все заполнять уже на этапе разработки цепочек – ужаснах, это как-то некошерно
В итоге, пригласив Джорджа (гендир заказчика), сошлись на том, что будем просто копировать уже существующие цепочки, сохраняя зависимости их объектов и добавляя соответственно свежесозданные объекты цепочки туда, где требовались объекты цепочки-прообраза! ???? PROFIT!!!! Просто, ясно, одна кнопка!
Действительно, все гениальное – просто
(C) ZonD80

Inside job

Итак, я делаю великий проект™. Сегодня конкретно занимались с тов.Сашей созданием структуры БД, и вот  она, вот она структура-то (скриншот будет попозже)! Так проходит разработка, да.
Сегодня весь день провел в его офисе. Имхо, он опять же, уютнее, чем у нас. Там есть диван. Микроволновка. Растения разные. 2 сервака (один даже двухюнитовый), правда не их, а палыча.
Еще в перспективе там должны быть слоны, но зимой слонов нет.
Еще будем работать в ВС, ибо завтра выходной.
Еще разделили участь – моя – админство+проектирование, его – программирование и дизайн.
Ах да, вот скриншот, вернее фотка. Сорри за конспирацию, комм.тайна:

(C) ZonD80