Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public class CoreApplication implements LocationListener {
// ...неинтересный код был тут
public static CoreApplication getCoreApplication() {
if (coreApplication == null)
throw new RuntimeException("here CoreApplication must exists!");
return coreApplication;
}
private static void onNativeCrashed() {
Class localClass = getCoreApplication().params.getCrashHandlerClass();
if ((localClass != null) && (!getAppBuildIdFromNative().contains("master_market"))) {
new RuntimeException("crashed here (native trace should follow after the Java trace)");
new StringBuilder("App name is ").append(getAppNameFromNative());
new StringBuilder("Build ID is ").append(getAppBuildIdFromNative());
if (getAppBuildIdFromNative().length() > 32)
applicationContext.startActivity(new Intent(applicationContext, localClass).setFlags(268435456));
}
// ...неинтересный код был тут
}
onNativeCrashed(). Он вызывается при краше native библиотеки которая работает с Яндекс.Картами. Метод получает класс, унаследованный от CrashHandler (в котором и как раз и живет тот самый безобразный метод sendBug(String paramString)) путём вызоваClass localClass = getCoreApplication().params.getCrashHandlerClass();
if ((localClass != null)...) и если native-библиотека которая отвечает за взаимодействие с Яндекс.Картами вернула правильный пароль :) — стартует activity, из которой потом можно будет вызвать этот самый гадкий sendBug(String paramString).getCrashHandlerClass(), то мы увидим что он всегда возвращает null:public class MapsCoreApplicationParams extends CoreApplicationParams
{
// ...ля-ля-ля, не важно
public Class getCrashHandlerClass()
{
return null;
}
// ...ля-ля-ля, тоже не важно
}
sendBug(String paramString) никогда не будет вызван. Как видите, тут все запутано как бразильском сериале :) Думаю поэтому компилятор не смог до конца вкурить все эти связи и стремный код на всякий случай оставил.android.util.Log. По идее приложение не должно писать в лог никакой конфиденциальной информации, но на практике разработчики часто используют методы из android.util.Log в процессе разработки с целью отладки, а потом забывают убрать вызовы этих методов из релиза. Я подозреваю что с Яндекс.Деньгами 1.71 так и получилось. В версии 1.80 это пофиксили.
Как мирный reverse engineering помог чуть-чуть улучшить приложение Яндекс.Деньги