Работа с HEX-редактором на примере хака CocoonJS

другие уроки, мануалы, советы по Construct 2

Сообщение Работа с HEX-редактором на примере хака CocoonJS
» 10 мар 2013, 09:10

*использовалась версия CocoonJS от 10.03.2013

В моей статейке Экспорт на мобильные платформы при помощи CocoonJS я добавил хак библиотеки CocoonJS, который убирает их логотипы. После чего в личку стали поступать вопросы о том, как я это сделал и, как сказал один из: "Не собираюсь хакать, но мне просто интересно!". Ну, что ж... выходной день, времени полно, погода пасмурная, настроение сонное... почему бы и нет?

Все действия описанные ниже производились и поясняются только с общеобразовательного интереса! Если вы собираетесь покупать или распространять свои игры созданные на С2 и CocoonJS - оставляйте всё как есть и покупайте все необходимые лицензии.

Только сразу хочу предупредить о том, что для продвинутых юзверей данная статья может показаться смешной, ибо ничего кул-хацкерского вы здесь не найдете! Я просто расскажу с чего всё началось и как я дошел до результата... что новичкам, именно новичкам, просто даст пищу для размышления. Так что если ты работаешь в IT-сфере достаточно давно - можешь пройти мимо;)

И так, для работы нам понадобится простой текстовый редактор (Блокнот, да:) но я использую AkelPad и редактор в файловом менеджере FAR) и сам HEX-редактор. А что это такое вообще? Википедия вам в помощь!
Прежде чем я выбрал какой НЕХ-редактор использовать - я решил просто просмотреть файл libCocoonJSLib.so. Почему именно его? Да, к этому я пришел не сразу... ведь моя цель - убрать картинку с логотипом, а где она спрятана - неизвестно. После декомпиляции APK (о чем я описал в статье по первой ссылке), я просмотрел все файлы... ни в одном из читаемых файлов не было ни единой ссылки на какие-либо картинки, кроме моих собственных. Вывод очевиден - логотипы вшиты в какой-то из не читаемом (бинарном) файле. Но в каком? Благо, что таких файлов было не много и по логике вещей первым делом решил просмотреть именно libCocoonJSLib.so, просто потому, что он самый большой и потому, что в нем говорящее само за себя название "Библиотека CocoonJS". Открываю его в блокноте и вижу что-то типа того:
Изображение

Ага... интересно. А вдруг среди всего этого хаоса все таки есть картинка? Я был уверен, что формат у картинки именно PNG т.к. именно этот формат советовался для использования сплаш-скринов, поэтому первым делом я решил попробовать распознать именно его. Но как? Для начала надо бы узнать, как выглядит PNG в не читаемом виде (прошу прощения за не совсем крутые термины). Для этого я открыл блокнотом несколько PNG картинок.
Изображение
Изображение

Все они начинались и заканчивались одинаково! Обратите внимание на скриншоты... видите, в самом начале *закорючка* затем PNG, а потом уже пошел всякий шлак. Так вот *закорючка*PNG - это метка начала любого PNG - файла! А вот чем они заканчиваются:
Изображение
в конце всегда IEND и некий набор символов.

Возвратившись к файлу библиотеки CocoonJS я ввел в поиск эти символы и нашел аж 5 совпадений!!! Т.е. в нем явно вшито 5 тел PNG-изображений! А вдруг я ошибаюсь? Не может же быть так просто... ведь эти данные должны быть зашифрованы, ну, не знаю, я бы зашифровал. Нужно было убедиться наверняка, что это действительно изображения, причем в чистом виде! Как это сделать я знал сразу - нужно просто выделить тело одного из файлов и сохранить его отдельно, а затем получившийся файл открыть в просмотрщике изображений и если я прав - то увижу какое-то изображение, в лучшем случае и сам логотип!
Задача проста, вот только тело файлов очень большое... если делать это в текстовых редакторах. Представьте себе, что вам нужно выделить точно, от точки до точки, кусок из 3000 страниц какой-то книги, которая состоит из миллионов страниц. Как вы себе это представляете в текстовом редакторе?))) Да никак... регулярные выражения здесь тоже не помогут. Нужен хороший HEX-редактор, который работает с байтами, а не с текстовой информацией.

Я попробовал несколько редакторов - всё не то. В итоге мой выбар пал на Hex Editor Neo. Полнофункциональная версия доступна в течении 14 дней. Русский язык есть! Да и бесплатных функций нам хватит за глаза... Так что качаем его и ставим. Такие банальные вещи уже подсказывать не буду=)) Скажу только, что во время установки я выбрал режим Advanced User. Предположим у вас он уже стоит - едем дальше...

Открываем в нашем редакторе файл библиотеки.
Изображение

Жмем Ctrl+F и ищем начало первого графического файла:
Изображение
Помните закорючку (что-то вроде знака %) которая должна быть перед PNG? Вот ищем сочетание PNG до тех пор, пока не увидим перед PNG этот самый %. Т.е. то, что на скриншоте - это пример не нужного нам фрагмента, ищем дальше, нажимая F3. Для более точного совпадения я снял галочку перед опцией "Без регистра", чтобы он искал png только ВЕРХНЕМ регистре.

О! Что-то нашлось!
Изображение

В этом замечательном редакторе есть возможность делать закладки! Давайте-как её сделаем, а затем поищем конец найденного фрагмента.

Выделяем начало фрагмента и создаем закладку:
Изображение

Ищем далее конец файла. Как он заканчивается, помните? IEND!
Изображение

Жмем снова на кнопку создания закладки и теперь у нас их две! Можно легко переключаться между фрагментами! В нашем случае между началом и концом! Круто, попробуйте;) Просто кликайте на них:
Изображение

Теперь нам нужно вытащить это тело и сохранить в новом файле! Для этого нам нужно выделить фрагмент от начала и до конца! Но, прежде чем мы это сделаем....
Изображение
Кликнем правым ухом в левый столбик и выберем опцию "Десятичный", для более лёгкого счета размера выделения! Запишите номер строки (хоть это и не правильно, но для лучшего восприятия будем называть это номерами строк), на которой находитесь. У меня это 5 653 812:
Изображение

Теперь идем к концу фрагмента (тыкаем на закладку №2) и записываем его строку:
Изображение
6 190 812

Далее открываем калькулятор и решаем: 6 190 812 - 5 653 812 = 537000
Зачем? Сейчас поймете.

Идем снова к началу файла (закладка №1) и теперь идем в меню "Выделение" и выбираем этот пункт:
Изображение
Выделить область.

Делаем все как у меня и жмем ОК:
Изображение
Здесь скажу лишь, что "Смещение" - это и есть "строка", но здесь имеется в виду смещение байта (о чем было описано в википедии). А то, что мы посчитали на калькуляторе - это размер выделения! Т.е. начиная от смещения 5 653 812 мы выделяем еще 537000 байт вниз.

В моем случае начало выделилось хорошо:
Изображение

А вот конец не до конца:
Изображение

Это потому, что я допустил ошибку... надо было брать на одно смещение больше=) Ну, ничего! В этом офигенски удобном редакторе можно дополнять выделения! Просто ткните мышкой в 00 и перетяните до 49 как показано на скриншоте:
Изображение
Если не получилось - не беда! Эти символы и дописать можно....

Ну, что ж... что же мы такое выделили? Давайте посмотрим! Жмем Файл - Новый файл или CTRL+N
Изображение

Переходим на закладку с нашим прошлым файлом, тыкаем правым ухом на наше выделение и жмем Копировать!
Изображение

Теперь идем к нашему новому файлу, тыкаем на первый байт правым ухом и теперь выбираем Вставить!
Изображение

Всё... теперь жмем Файл - Сохранить как... В появившемся окне жмем "Да" и сохраняем файл с расширением PNG!
Изображение

Поздравляю! Вы совершили самое настоящее хакерство=)))

А чтобы быть совсем уж крутыми, давайте заменим это изображение на свое?

Прежде чем начать - обратите внимание, что сразу же после окончания нашего файла, начинается другой файл!
Изображение
Это файл изображения для ландшафтной ориентации! Как его выделить и вытащить - вы уже знаете!

Для начала нам нужно создать или найти то изображение, на которое мы будем заменять логотипы. Можно создать изображение в пэинте... размеры изображения не важны, но не должны превышать 537 килобайт. Точнее... это возможно, но давайте не будем усложнять себе задачу=)

Я создал такое изображение:
http://j-p-g.net/if/2013/03/10/0250517001362895504.png

Что делаем дальше? Дальше всё просто... Выделяем фрагмент, который будем заменять. Например, тот же самый, что мы выдернули.
Жмем кнопку "Залить" делаем всё как у меня:
Изображение
Мы залили фрагмент нулями. Т.е. всё, на месте картинки уже ничего нет...

Теперь жмем Правка - Вставить файл.
Изображение
И выбираем, например, ту картинку, которую вы скачали по моей ссылке выше.

Всё! Теперь вы можете сохранить редактируемый файл, скомпилировать новый APK и проверить свою работу. Напоминаю, что статья про работу с APK-файлами лежит здесь: viewtopic.php?f=4&t=444

Теперь вы поняли, как в Зионе читают матрицу?;)
Последний раз редактировалось virusfun 19 апр 2013, 01:59, всего редактировалось 2 раз(а).
Пути геймдева неисповедимы!
Аватара пользователя

Игродел
Сообщений: 916
Я тут с 23 сен 2012
Откуда: Хабаровск
Двиг: Construct 2/3
Лицензия: Personal
VK: vk.com/virusfun
Репутация 153 [ ? ]

Сообщение Re: Работа с HEX-редактором на примере хака CocoonJS
» 10 мар 2013, 11:20

virusfun, огромная работа проделана! Спасибо большое! Обязательно попробую :clapping:
Только не
virusfun писал(а):закорючку (что-то вроде знака %)
а значок промилле :biggrin: :biggrin: :biggrin:
Аватара пользователя

Игродел
Сообщений: 398
Я тут с 08 янв 2013
Откуда: Мск
Репутация 226 [ ? ]

Сообщение Re: Работа с HEX-редактором на примере хака CocoonJS
» 10 мар 2013, 11:47

Ilyko96, :lol: так вот что это такое.
Пути геймдева неисповедимы!
Аватара пользователя

Игродел
Сообщений: 916
Я тут с 23 сен 2012
Откуда: Хабаровск
Двиг: Construct 2/3
Лицензия: Personal
VK: vk.com/virusfun
Репутация 153 [ ? ]

Сообщение Re: Работа с HEX-редактором на примере хака CocoonJS
» 19 апр 2013, 23:32

Кстати проблема решена, почистил ccleaner-ом временные файлы и установил другой апк менеджер.
Параллельно нашёл инфу как избавиться от ошибки "Не найден путь...."
Может кому будет полезно.
 
Reported by project member Brut.alll, Dec 5, 2011

If you use --rename-manifest-package option to aapt when building resources something weird happens. Resources are built for old package name, but manifest uses new one. This makes resources broken a little when using current apktool, because they're built for new package name, so resulting apk is a little different than original one.

In most cases it doesn't matter because resource package name isn't that important. However in some cases it is, e.g.:

- I think framework apks with changed resource package shouldn't work anymore
- if apk declares its own attrs and uses them in XMLs, they're referenced by package name, so references are broken after decoding - you won't be able to build apk back.

Problem can be reproduced very easily: just create new Android project, define some attr, use it in XML and then build resources with --rename-manifest-package. You will be able to apktool-decode resulting apk, but you will get "error: No resource identifier found for attribute" errors when building back.

Proper solution to this problem is to revert manifest package back to original one. So:

- check if resources package is different than the one in AndroidManifest.xml
- if so then rename android:package to that found in resources.arsc and store original android:package in apktool.yml
- when building use --rename-manifest-package if it is found in apktool.yml

Also in the case of apk-with-attrs files it should be possible to fix the problem quite easily without apktool support: just replace "http://schemas.android.com/apk/res/${originalPackage}" with "http://schemas.android.com/apk/res/${renamedPackage}" in all XML files. You can do this in unix by e.g.:

find res -type f | xargs perl -pi -e 's/http:\/\/schemas.android.com\/apk\/res\/com.touchtype/http:\/\/schemas.android.com\/apk\/res\/com.touchtype.swiftkey/g'


Вывод некоего Лерика:
"В итоге, как я понял, проблема в том, что в файлах с разметкой написан пакет "http://schemas.android.com/apk/res/com.touchtype", а в манифесте package="com.touchtype.swiftkey.phone.beta".
Для пробы изменил манифест на "com.touchtype" - все собралось.
Значит при получении такой ошибки есть два пути - найти во всех файлах разметки неправильное название и заменить на то, что в манифесте или же взять то, что написано в файлах с разметкой и заменить в манифесте. Думаю предпочтительней первый вариант.

З.Ы. Для тех, кто будет встречать эту ошибку в дальнейшем и найдет сей пост: для автоматической замены во всех файлах этой строки можно использовать Notepad++ (Ctrl+F -> Найти в файлах, дальше указываем папку и понеслась...)"
Аватара пользователя

Участник
Сообщений: 13
Я тут с 31 мар 2013
Репутация 1 [ ? ]

Сообщение Re: Работа с HEX-редактором на примере хака CocoonJS
» 20 апр 2013, 03:03

Pasifia, ты не в ту тему запостил! Но все равно спасибо, полезная инфа!+++
Перенесу твой текст в шапку моей темы.
Пути геймдева неисповедимы!
Аватара пользователя

Игродел
Сообщений: 916
Я тут с 23 сен 2012
Откуда: Хабаровск
Двиг: Construct 2/3
Лицензия: Personal
VK: vk.com/virusfun
Репутация 153 [ ? ]

Сообщение Re: Работа с HEX-редактором на примере хака CocoonJS
» 22 авг 2013, 21:35

обнови скриншоты !без них как без рук
Аватара пользователя

Участник
Сообщений: 28
Я тут с 15 апр 2013
Репутация 0 [ ? ]

Сообщение Re: Работа с HEX-редактором на примере хака CocoonJS
» 23 авг 2013, 07:29

Какого хрена, куда это они делись О_о
Разберусь как доберусь!
Пути геймдева неисповедимы!
Аватара пользователя

Игродел
Сообщений: 916
Я тут с 23 сен 2012
Откуда: Хабаровск
Двиг: Construct 2/3
Лицензия: Personal
VK: vk.com/virusfun
Репутация 153 [ ? ]

Сообщение Re: Работа с HEX-редактором на примере хака CocoonJS
» 23 авг 2013, 07:30

я поставлю тебе свечку в церкви )
только залей прям сейчас, мне уезжать , а релиз игры выложить нужно прямо сейчас)
Аватара пользователя

Участник
Сообщений: 28
Я тут с 15 апр 2013
Репутация 0 [ ? ]

Сообщение Re: Работа с HEX-редактором на примере хака CocoonJS
» 23 авг 2013, 11:01

virusfun писал(а):Какого хрена, куда это они делись О_о
Разберусь как доберусь!

Тут на форуме, вроде, неплохой хостинг изображений есть.
Аватара пользователя

Игродел
Сообщений: 501
Я тут с 04 янв 2013
Репутация 77 [ ? ]

Сообщение Работа с HEX-редактором на примере хака CocoonJS
» 27 окт 2013, 14:27

Изображения перезалиты. Прощу прощения за длительную задержку.... всё руки не доходили.

В принципе, относительно Кокуна статья уже не актуальна) но она имеет место быть для тех, кто впервые сталкивается с 16ричным редактором и не имеет представления, что с ним вообще можно делать.
Пути геймдева неисповедимы!
Аватара пользователя

Игродел
Сообщений: 916
Я тут с 23 сен 2012
Откуда: Хабаровск
Двиг: Construct 2/3
Лицензия: Personal
VK: vk.com/virusfun
Репутация 153 [ ? ]



Вернуться в Другие уроки по Construct 2

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх