Как понять NullPointerException

Эта простая статья скорее для начинающих разработчиков Java, хотя я нередко вижу и опытных коллег, которые беспомощно глядят на stack trace, сообщающий о NullPointerException (сокращённо NPE), и не могут сделать никаких выводов без отладчика. Разумеется, до NPE своё приложение лучше не доводить: вам помогут null-аннотации, валидация входных параметров и другие способы. Но когда пациент уже болен, надо его лечить, а не капать на мозги, что он ходил зимой без шапки.

Итак, вы узнали, что ваше приложение упало с NPE, и у вас есть только stack trace. Возможно, вам прислал его клиент, или вы сами увидели его в логах. Давайте посмотрим, какие выводы из него можно сделать.
Читать дальше →

[Из песочницы] Отладка Java приложения, когда оно совсем не ждёт — добро пожаловать в InTrace подход

Доводилось ли вам когда-либо исследовать шаг за шагом выполние некого Java кода, который не удосужились снабдить средствами логирования или прочими механизмами наблюдения?
Усложним задачу тем, что не будем перекомпилировать исследуемый код, да и вообще перезапускать существующий процесс (тот случай, когда непонятное поведение было да и при перестарте сплыло). Java машина, конечно же, запущена с самыми обыкновенными опциями (без параметров для аттача дебагера или ещё каких наворотов).
А так хочется понять, что же происходит.

Именно этим мы и займёмся.
Узнать больше …

Как создавать патчи, основанные на доверчивой политике безопасности Android

Приветствую тебя, уважаемый читатель!

Offtop

В этом топике я хотел бы поделиться с тобою тем, как можно получать доступ к тому, что принадлежит нам, но косвенно.
Любой софт — это чья-то собственность: кто-то сидел и шевелил своими мозгами, чтобы произвести на свет очередное «чудо».
Но вне наших девайсов речи о софте не может и быть. Понятие «софт», в таком случае, будет означать не более чем «мягкость».
Это очевидно.
Именно поэтому мы имеем право вытворять с любым программным кодом, выполняющимся на нашем устройстве, все, что пожелает душа…

Intro

Думаю, начать стоит с самого начала. Все началось с моего обнаружения пользовательской зависимости окружающих к небезызвестной игре 2048. Мне, конечно же, стало интересно, чем эта игра так захватывает людей, поэтому я решил сам ее попробовать. Через несколько минут я понял ее суть и мне эта игра тоже стала интересна.
Должен признаться, более 5000 очков мне набирать не удавалось никак, а до 2048 было еще слишком долго…
Тем временем окружающие «игроки» с легкостью набивали по 10-16тыс очков, а некоторым удавалось даже достигать 2048 в клетке.
Что ж, спустя некоторое время у меня возникла идея тупо взломать эту игру, чтобы не «убивать» время на ее прохождение( она слишком долгая в прохождении, но от этого не менее затягивающая ). А еще спустя пару дней, об этом же меня попросили и мои знакомые.
Это означало одно: пора браться за дело…

Что было в начале?

Этот взлом не начался с чего-то необычного. Все было по шаблону: я вытащил APK-пакет приложения, произвел первичную декомпиляцию, с использованием apktool.jar, затем вторичную( для получения Java кода из Smali ), используя тулзу jd-gui. Ничего необычного. Далее я долгое долгое время бороздил по Java-классам в надежде отыскать хоть что-то полезное и интересное. Помимо «тонн» рекламных и гугловских библиотек я ничего не замечал. В конце концов удалось наткнуться на внутренности данного приложения, т.е то, где все интересное и происходит:

Читать дальше →