Напиши Trojan за Android
Когато говорим за плъгини и модулни приложения, първото нещо, което имаме в предвид обикновен потребител софтуер. Въпреки това, модулния дизайн може да бъде също толкова полезен в развитието на руткитове и задни врати. С конвенционални средства, за да актуализирате такъв софтуер е твърде уличаващи, и не винаги е възможно, но тихо заредите модула с нова функционалност в мрежата - това моля. И ако се вземе ключ функционалност в модулите и да ги премахнете веднага след изтеглянето, вие сериозно може да навреди на живота реверс.
В класическия Java има клас, наречен java.lang.Classloader. Неговата задача - да се зареди байт кода на съответния клас (с разширение .class файл) към виртуална машина по време на изпълнение. След това можете да се създаде обект от този клас и да викате методите му използване размисъл. Такъв е пътят за динамично зареждане на код, който може да се използва за представяне на кандидатури за писане с разширена функционалност, или, да го кажем просто, плъг-ин подкрепа.
В Android, има Java виртуална машина и не е клас ClassLoader, но е аналог DexClassLoader, изпълнява точно същата функция, но във връзка с байткод Dalvik (файлове и .dex вместо .class съответно). И, за разлика от десктоп на Java, където е по-лесно да се постави необходимата буркан-файла в CLASSPATH и не се занимавам с динамично натоварване в Android, този подход дава наистина много предимства, най-важната от които е, че функционалността на приложението може да се допълва и актуализира без потребителят и нещо, без да го питам. По всяко време, приложението ви може да изтеглите файл с клас от сървъра, мишката и след това да изтриете файла.
Каквото и да беше, динамични натоварвания клас - много полезно нещо в писмена форма не е съвсем "белите" приложения, така че който и да е охрана-специалист трябва да знаят как този механизъм работи и как тя се използва в троянците.
Прости примери
Всичко да се пише по-нататък по-лесно да се разбере, просто давам пример за зареждане на работническата класа:
В общи линии, всичко е проста: кода зарежда буркан-архив / SDCard / Моето приложение / модула. буркан с нашия клас, много го com.example.modules.simple клас. Модул, създава един обект и призовава план (метод). Обърнете внимание на три точки:
За да тествате този код на изпълнение, създаване на прост модул:
Не бързайте да създадете нов проект в Android Studio, можете да разпространявате кода в бележник и го събират в буркан-файл директно от командния ред:
Уверете се, че директории платформи / андроид-23 и натрупването инструменти / 23.0.3 там, във вашия случай, имената им могат да варират.
Ако всичко върви добре, ще получите module.jar на изходния файл. Вие ще трябва само да добавите код за зареждане на ОС в заявлението, сложи module.jar за карта с памет, изграждане и изпълнение на приложението.
DOWN рефлексите
Reflection - хубаво нещо, но в този случай това е само пречка. Един от методите не е аргумент с него причина не е трудно, обаче, ако искаме нашата молба е разработен API модули с различни методи, като на няколко параметри трябва да се измисли нещо по-удобно. Например, използването на предварително определен интерфейс, който ще се изпълнява от всеки модул.
Прилагането на този подход към примера по-горе, ние получаваме следните три файла:
ModuleInterface.java файл с описание на API:
2. Module.java файл с изпълнението на нашите модули:
3.Novy модул товарач (поставя се в молбата си):
Това е всичко. Сега ние можем да работим с модула като общ обект. Освен това, системата ще бракувани модули (класове), които не са съвместими с интерфейса, дори и по време на зареждане, така че ние няма да се налага да се чудя дали има начин искаш да модул.
Когато модулът е много по-
Например, модулът принадлежи com.example пакет даден по-рано. modules.simple (вж. Директива пакет), така че трябва да бъдат включени в буркан-архив simple.jar (промените -output = module.jar на -output = проста. буркан в командата направата й). Когато дойде време да се създаде нов модул (например remote_shell), на първия ред ще уточни пакет ком в изходния код. example.modules.remote_shell.Module; и zapakuesh компилиран байт код в буркан-архив remote_shell.jar.
Име на JAR-файл (без разширение) също се използва като ключов в heshmape, следователно, да знае името на модула, винаги може да управлява своя методи:
ВМП, вземете със себе си
На този етап вече имаме един апартамент, който може да изтеглите неограничен брой модули в указаната директория и с удобството на работа с тях. Остава да се справят с това как да се разпределят тези модули. Най-очевидният вариант - да ги изтеглите от сървъра, дори и да ни "троянски кон", за да направите това само веднъж на ден, а след свалянето на модула предизвиква модулът за зареждане, за да ги презареждат в приложението. Кажете ни как да го направя, няма да съм тук през цялото елементарно, и тази задача ще намерите по всяко уводна статия или книга за разработване на Android.
Друг вариант - да се включат модули с пакета документи за кандидатстване. В този случай нашият троянски ще имат достъп до необходимите модули веднага след първия манш, че предпазва от проблеми с достъпа до мрежата. Когато се появи в мрежата, може да добавите към модулите за зареждане от сървъра, ако е необходимо.
За да се даде възможност на модулите в APK, те трябва да бъдат поставени в каталога на активи в рамките на проекта (в този случай, на активи / модули), а след това прилагане на модул за извличане на необходимата директория. В кода, тя ще изглежда по следния начин:
Това е много проста. Код на модула вътрешната страна на опаковката и да ги копирате един по един в директорията / SDCard / Моето приложение, от което след това те могат да бъдат да се зареди с помощта на зареждане.