Модифицированные программы что это

Что такое модифицированный APK? Законно ли скачивать мод APK?

советы и хитрости для Android / by admin / August 05, 2021

Google Play Store — это наша общая платформа для загрузки и установки приложений и игр для наших устройств Android. Приложения в Google Play Store являются официальными приложениями; многие из них — платные. Что ж, вы можете заплатить деньги, чтобы купить и установить приложение, но как насчет приложений, в которых есть покупки в приложении?

Модификация программы и что лучше менять: исполняемый код или AST программы?

Принципы в заметке общие для почти любого языка программирования и системы исполнения, но акцент будет на jvm. Рассмотрим два основных подхода по модификации программы:

  • манипуляции с исполняемым кодом программы после компиляции или во время загрузки кода;
  • изменение исходного кода перед компиляцией.

МОДИФИЦИРОВАННЫЕ ДРОНЫ ВЗРЫВАЮТ ТАНКИ // Ковровые бомбардировки с дронов

Метафора, связанная с изображением в заметке: программа — это основное здание, а результат трансформации программы — вспомогательная конструкция.

Зачем модифицировать?

Начнем с вопроса зачем программе модифицировать другую программу. Метапрограммирование помогает уменьшить объем boilerplate кода в проекте и концентрироваться на главном, улучшить читаемость кода и решить задачи которые сложно решить другим способом.

Простейший пример в java — JavaBeans и get/set методы для доступа к полям класса, также примером может служить создание билдеров для класса, автореализации equals/hash в IDE и т.п.

Следующий пример — это логирование, автоматическое управление транзакциями. Все к чему привыкли при использовании Spring Framework и редко задумываемся как это реализовано. Но даже Spring создал сложности с конфигурацией и инициализацией фреймворка для новичков, что послужило причиной появления «магического» Spring Boot/Spring Roo. Но это отдельная тема, мы же вернемся к теме модификации программы.

Обфускация и минимизация кода, инструментирующие профилировщики и мир DevOps третий пример для чего нужно модифицировать программу. Думаю, что пропустил другие важные примеры, вы можете дополнить в комментариях.

Итак, зачем модифицировать программу мы определились, теперь рассмотрим, как это обычно делают.

Модификация исполняемых инструкций программы

Можно модифицировать байт-код программы и это самый распространенный способ. Делать это можно как сразу после компиляции, но перед сборкой jar, так и при загрузке класса. В первом случае это будет плагин системы сборки проекта, во втором специальный загрузчик классов или java агент, либо механизм hotswap в jvm. Подход с агентами и загрузчиками классов очень похож на самомодифицирующиеся программы в машинном коде и полиморфные вирусы.

Байт-код файла, который загружает jvm имеет структуру, описанную в официальной документации о формате класса

Модифицированные приложения. Расширяем функционал и комфорт при использовании приложений.


Приложение javap позволяет просматривать байт-код скомпилированного класса

Пример из официальной документации
Исходный текст класса:

import java.awt.*; import java.applet.*; public class DocFooter extends Applet < String date; String email; public void init() < resize(500,100); date = getParameter(«LAST_UPDATED»); email = getParameter(«EMAIL»); >public void paint(Graphics g) < g.drawString(date + » by «,100, 15); g.drawString(email,290,15); >>

Вывод javap на консоль для байт-кода этого класса:
Compiled from «DocFooter.java» public class DocFooter extends java.applet.Applet < java.lang.String date; java.lang.String email; public DocFooter(); Code: 0: aload_0 1: invokespecial #1 // Method java/applet/Applet.»»:()V 4: return public void init(); Code: 0: aload_0 1: sipush 500 4: bipush 100 6: invokevirtual #2 // Method resize:(II)V 9: aload_0 10: aload_0 11: ldc #3 // String LAST_UPDATED 13: invokevirtual #4 // Method getParameter:(Ljava/lang/String;)Ljava/lang/String; 16: putfield #5 // Field date:Ljava/lang/String; 19: aload_0 20: aload_0 21: ldc #6 // String EMAIL 23: invokevirtual #4 // Method getParameter:(Ljava/lang/String;)Ljava/lang/String; 26: putfield #7 // Field email:Ljava/lang/String; 29: return public void paint(java.awt.Graphics); Code: 0: aload_1 1: new #8 // class java/lang/StringBuilder 4: dup 5: invokespecial #9 // Method java/lang/StringBuilder.»»:()V 8: aload_0 9: getfield #5 // Field date:Ljava/lang/String; 12: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: ldc #11 // String by 17: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 20: invokevirtual #12 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 23: bipush 100 25: bipush 15 27: invokevirtual #13 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V 30: aload_1 31: aload_0 32: getfield #7 // Field email:Ljava/lang/String; 35: sipush 290 38: bipush 15 40: invokevirtual #13 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V 43: return >

Читайте также:
Что за программа xcom

Но модифицировать байт-код вручную имеет смысл только в учебных целях или если вы ниндзя, который любит создавать и преодолевать сложности. The Java Virtual Machine Specification отвечает на большинство вопросов на этом этапе.

В промышленном программировании работу с байт-кодом упрощают библиотеки ASM, javassist, BCEL, CGLIB. После парсинга байт кода, тот же ASM позволяет программисту работать с байт кодом как через Tree API, так и в событийной модели, используя шаблон visitor. Кроме анализа, возможна и модификация, добавление новых инструкций, полей, методов и т.п. В природе существуют и другие библиотеки работы с байт кодом, но их используют реже.

Пример использования API ASM для

анализа байт-кода

Аспектно-ориентированный подход можно считать высокоуровневым способом модификации программы. В реализации AspectJ на уровне агента, загрузчика классов или плагина вся «магия» АОП превращается в манипуляции с байт-кодом классов. Но как это видит программист при разработке отличается от того как модифицируется байт код «под капотом» с помощью того же ASM и BCEL. Если интересно, что фактически добавляет AspectJ в классы вашего приложения, можно включить дамп модифицированных классов и по локоть влезть в этот код, например, с помощью Java Decompiler.

В AspectJ разработчик определяет действия в виде классов, аннотируя их как аспекты и указывая в каких точках программы(Pointcut) их следует вызывать. Синтаксис определения pointcut выражений также достаточно высокоуровневый. Такой подход к модификации байт-кода более прост в использовании для программиста.

Подробнее показывал и рассказывал на примерах в цикле публикаций на хабре

  • Диагностируем причину, выживаем в JAR hell: не дышим серой и не варимся в котле
  • Публикация логов в Elasticsearch — жизнь без регулярных выражений и без logstash
  • Протоколирование JDBC запросов и их параметров в существующем приложении
  • Хабр шелл: встраиваем кросплатформенный ssh server в java приложение
  • Внедрение веб консолей в jvm процесс на примере SonarQube
  • Доклад: «Аспектно-ориентированное программирование в распределенных системах для java разработчиков и QA»
  • Напильники бывают разные или повествование про «напильник» для java программ
Читайте также:
Dvb t2 что это за программа


Трансформация программы за счет модификации байт-кода имеет свои сильные и слабые стороны:

Плюсы Минусы
подход работает при отсутствии исходных текстов программы сложность анализа и модификации, при нетривиальных трансформациях
независимость от компилятора отсутствие информации, доступной только в исходном коде

Трансформация AST исходного кода, метапрограммирование

Теория и практика трансформации исходного кода давно применяется в метапрограммировании, Prolog, Lisp, макросах и препроцессорах языков программирования.

При данном подходе исходный текст программы трансформируется либо дополняется другой программой перед компиляцией, а затем компилируется. Работать удобнее не с самим текстом программы, а с абстрактным синтаксическим деревом построенным из него (abstract syntax tree, AST).

Опять же, удобство метапрограммирования зависит от поддержки его в самом языке программирования. Существует шутка

В Лиспе, если охота аспектно-ориентированного программирования, нужно лишь настругать немного макросов, и готово. В Java, нужен Грегор Кичалес, создающий новую фирму, и месяцы и годы попыток заставить всё работать.

Поэтому в jvm чуть сложнее, хоть механизм reflection и является частью языка и платформа может динамически загружать и исполнять байт-код. Сразу на ум приходят две технологии, которые используют кодогенерацию — JPA static metamodel generator и jaxb code generation. Другой пример — project Lombok, который позволяет автоматически реализовать, то что раньше генерировалось IDE или писалось вручную и поддерживалось разработчиками.

Аннотации проекта Lombok

Реализовано в Lombok это с помощью модификации AST пользовательской программы и кодогенерации.

Схожая функциональность, со своими ограничениями, есть и в java для аннотаций с областью видимости compile time — Annotation Processing Tool.

В случае с парсингом java исходного кода, лучше чем javac и eclipse java compiller вряд ли кто справится. Есть альтернативы, такие как Spoon и JTransformer, но насколько полно они поддерживают спецификацию и сложные классы, даже нет желания проверять.

Раз уж речь идет о jvm, то трансформация исходного текста программы на Groovy является частью самого языка, подобные возможности есть и в языке Scala.

Итак, в модификации исходного кода программы есть слабые и сильные стороны:

Плюсы Минусы
большее количество информации, чем в байт-коде этап компиляции или интерпретации (память, время)
возможности, подобные рефакторингу в IDE требование к наличию исходных текстов, способа автоматически найти их для заданного класса/jar

Трансформация AST кода и рекомпиляция во время выполнения

Самая хардкорная часть этой заметки — мысли про перекомпиляцию в рантайм. Модификация и компиляция AST java кода в момент выполнения может быть нужна, если требуются костыли: проект либо полный капролит, либо делать и поддерживать десятки форков разных версий очень трудоемко, либо если его менеджмент и разработчики считают его идеальным и не позволяют никому его модификацию, но при этом исходный текст есть в enterprise maven репозитарии. И этот подход нужен только если задачу невозможно или неудобно решать двумя ранее описанными классами трансформации программы.

С компиляцией все относительно просто. JavaCompiler API позволяет скомпилировать программу из исходного кода в момент выполнения, предоставляя интерфейс независимый от реализации. При изучении манифеста и исходных текстов eclipse EJC компилятора, обнаружил что и он поддерживает JavaCompiler API.

Читайте также:
Для чего нужна программа driver booster

Но при анализе текста программы все равно нет публичного и универсального API для работы с AST. Т.е. придется работать либо с com.sun.source.tree.* либо org.eclipse.jdt.core.dom.*

Задача с поиском исходного текста класса легко решается, если проект публиковался в maven репозитарий вместе с артефактом типа source и в jar с классами есть файлы pom.properties или pom.xml, либо есть некий словарь соответствия названия/хеша артефакта исходному коду соответствующего jar файла и способ получить эти исходники во время работы программы.

Плюсы — для трансформации доступно больше информации, чем есть в байт-коде, применение не требует пересборки проекта и почти так же удобно как и применение AspectJ агента, но при этом трансформацию невозможно было выполнить средствами преобразования байт-кода, либо очень трудоемко.

Минусы такие же, как и у прошлого подхода: память, время, требование к наличию исходного текста программы и способа его найти для данного класса.

Примеры вышесказанного в виде кода ejc+maven будут в ближайшие месяцы, да и задача выбрана вполне жизненная. Сталкивались ли вы с подобным? Какие задачи из вашей практики можно было бы элегантно решить только с помощью трансформации java кода и рекомпиляции во время выполнения?

Кстати, возможности компилятора TinyCC и его размер доказывают, что такой подход возможен и для C программ.

В заметке мы рассмотрели несколько подходов по модификации программы, их сильные и слабые стороны. Модификация исполняемого кода более распространена, но не все задачи можно решить без наличия исходного кода программы и его последующей трансформации.

  • Разработка веб-сайтов
  • Open source
  • Программирование
  • Java
  • Анализ и проектирование систем

Источник: habr.com

Модифицированные программы и приложения бесплатно на русском

Модифицированные программы и приложения бесплатно на русском

В наши дни функционал таких устройств как мобильные телефоны, планшетные ПК или компьютеры можно существенно расширить при помощи дополнительных приложений и программ. Их существует очень много. Есть как бесплатные, так и платные продукты. Без проблем можно найти подходящую программу для любых целей и задач. Это может быть редактор для видео или фотографий, приложение для текстовых документов, музыкальный плеер и так далее.

Особого внимания заслуживают модифицированные приложения. Что это такое? По сути, модифицированной программой можно назвать тот продукт, который имеет определённые изменения в сравнении с его исходной формой. Следует понимать, что данная модификация может иметь самый разный характер. Иногда это просто удаление мешающей рекламы.

Все мы прекрасно знаем, как иногда эта реклама раздражает. Бывает и так, что это какие-то серьёзные изменения в коде. Как правило, подобными манипуляциями занимается сторонний разработчик. Первоначальный создатель продукта этим обычно не занимается.

Где можно найти подобные приложения и программы? По понятным причинам распространяются они строго через неофициальные источники. К примеру, это может быть такой файлообменник как APK Mirror или что-то подобное. Достаточно большой популярностью в наши дни пользуется Android. Эта операционная система стоит на многих устройствах.

Разумеется, разработчики создают много продуктов для Android. Далеко не все они устраивают потребителя. Где-то слишком много рекламы, где-то чего-то не хватает и так далее. Именно поэтому нередко возникает необходимость в том, чтобы скачать модифицированный продукт. Где это можно сделать?

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru