- PVSM.RU - https://www.pvsm.ru -
Многие видели демо-видео персонального ассистента Hound, который по возможностям не уступает, и даже опережает такие известные приложения, как Google Now и Siri. Также Hound доступен свободно для скачивания на Google Play (на территории US), но, к сожалению, он находится в стадии разработки и требует инвайта при запуске.
У меня сразу зачесались руки срочно протестировать это чудо, и, устав ждать инвайта по почте (примерно через минуту), я взялся за дебаггер… который мне так и не понадобился, поскольку все оказалось проще, но об этом по порядку.
Примечание: я не являюсь профессиональным разработчиком на Android, взломщиком и прочее, все выполняется для удовлетворения собственного любопытства и на свой страх и риск. О любых неточностях сообщайте в комментариях или в личных сообщениях.
Первым делом, необходимо получить apk файл с приложением. Можно поискать в интернете, но мы не ищем легких путей. Я скачал последнюю версию из Google Play и вытащил приложение из папки /data/app/com.hound.android.app-1 (необходимы права администратора, т.е. root).
Любое приложение для Andoid представляет собой apk файл, который на самом деле является переименованным zip архивом. Если открыть его любым архиватором, мы увидим такую картину:
Рассмотрим содержимое поподробнее:
Нам повезло, почти все приложение, за исключением сторонних библиотек, написано на Java, а значит нам не нужно сидеть в отладчике и дизассемблировать низкоуровневый код.
Теперь необходимо распаковать classes.dex и попытаться вытащить из него код. Для этого используем Apktool [1]. Со страницы «Install» качаем исполняемый jar файл, а также обертку для его использования из командной строки. Достаточно скопировать оба файла в папку с приложением (или добавить в переменную окружения) и выполнить следующую команду:
apktool -r decode имя_файла.apk
Параметр -r необходим, чтобы не тратить время на распаковку ресурсов, которые мы не будем редактировать.
Теперь в папке, одноименной с названием приложения, мы видим уже чуть больше, чем в архиваторе. Файл classes.dex теперь отсутствует, а вместо него появилась папка smali, в которой хранятся классы в виде текстовых файлов. Но погодите, а где же Java? Вокруг одни файлы с расширением .smali, в которых хранится что-то отдаленно похожее на ассемблер.
Это — язык опкодов Dalvik, в который компилируется Java код. Есть приложения, которые могут попытаться восстановить исходный код из этих файлов, но надо же потом изменять этот код, а пересборка из Java кода — дело неблагодарное. Поэтому будем разбираться в smali коде, благо он довольно понятный, а также в нем остались нетронутыми названия функций. Чем мы и воспользуемся.
Найдем код, который отвечает за доступ в приложение. Зная название приложения и английский язык становится понятно, что основные классы приложения находятся в папке smali/com/hound/android/appcommon. Проблема состоит в том, чтобы найти то место, где проверяется наличие инвайта. Нам поможет поиск по файлам, например, в Windows можно использовать команду:
findstr /s /i /m искомая_строка *.*
В коде может быть как «invite», так и «invitation», поэтому выкинем последнюю букву из слова и будем искать «invit». Бинго, вот оно, метод isInvitationComplete() в файле smali/com/hound/android/appcommon/app/Config.smali:
.method public isInvitationComplete()Z
.locals 2
.prologue
.line 578
const v0, 0x7f080174
const v1, 0x7f0b001f
invoke-direct {p0, v0, v1}, Lcom/hound/android/appcommon/app/Config;->getBoolean(II)Z
move-result v0
return v0
.end method
В нем запрашивается булева переменная из параметров приложения и возвращается ее значение. Но зачем нам такие сложности! Давайте всегда будем возвращать true. Заменим «move-result v0» на «const/4 v0, 0x1» и сохраним файл. Будем надеятся, что все приложение полагается на эту маленькую функцию, которая отныне будет считать нас полноправными бета-тестерами.
Остается только собрать приложение обратно. Используем снова замечательную утилиту Apktool:
apktool -r build имя_папки
Не забудьте, что нам нужна вся папка, распакованная до этого, а не только smali. После того, как apktool закончит работу, заходим в эту папку, затем в dist, где находится собранный apk файл.
И он не будет работать, а точнее, не установится. Мы изменили содержимое приложения, а значит подпись теперь недействительна. Необходимо заново подписать приложение. Если вы являетесь разработчиком под Android, можете воспользоваться собственной подписью и Android SDK. Но у многих нет ни того, ни другого, им можно использовать тестовую подпись, и отдельно взятую из SDK утилиту signapk.jar. Также есть утилита sign.jar [2], в которую уже встроена подпись. Достаточно выполнить следующую команду:
java -jar sign.jar имя_файла.apk
Рядом появится файл имя_файла.s.apk, который и будет подписанным приложением. Закачиваем его на устройство, устанавливаем, и радуемся полностью рабочему приложению!
А можно просто найти в интернете пропатченную версию, которую кто-то недавно выложил.
Автор: noxwell
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/91625
Ссылки в тексте:
[1] Apktool: http://ibotpeaches.github.io/Apktool/
[2] sign.jar: https://github.com/appium/sign/tree/master/dist
[3] Источник: http://geektimes.ru/post/251572/
Нажмите здесь для печати.