.
.NET Kings
@netskings7.9K подп.
4.5Kпросмотров
57.2%от подписчиков
9 сентября 2025 г.
📷 ФотоScore: 5.0K
👁‍🗨Hello world~ Атака Man-In-The-Disk на Android. Часть 4 Внедрение полезной нагрузки • Когда у нас уже есть готовый пейлоад, настало время встроить его в легитимное приложение, как это сделать? • Для начала проводим декомпиляцию через apktool, он выдаст нам smali код. Но что это и почему не декомпилировать до джавы, раз практически все приложения написаны именно на ней? • Smali — это низкоуровневый язык, используемый для работы с Dalvik байткодом. Проще говоря, это человекочитаемое представление байткода андройд приложений. Можно сказать асемблер для андройда. • Ну хорошо, но почему именно smali, а не Java? Просто после модификации мы не сможем собрать Java код обратно, поэтому нам необходимо получить именно smali классы и работать мы будем с ними. • Для запуска нагрузки вместе со стартом приложения нужно модифицировать входную точку. Входной точкой любого GUI приложения является класс потомок Activity, который принимает ACTION_MAIN. • Открываем папку с декомпилированным приложением, и находим его в файле AndroidManifest.xml: <activity android:name="com.halfbrick.mortar.MortarGameLauncherActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> • https://t.me/netskings/491 com.halfbrick.mortar.MortarGameLauncherActivity. Открываем Activity, в данном случае по пути base&#092;smali_classes2&#092;com&#092;halfbrick&#092;mortar&#092;MortarGameLauncherActivity.smali и видим код. .class public Lcom/halfbrick/mortar/MortarGameLauncherActivity; .super Landroid/app/Activity; .source "MortarGameLauncherActivity.java" .method public constructor <init>()V .locals 0 .line 28 invoke-direct {p0}, Landroid/app/Activity;-><init>()V return-void .end method .method protected onStart()V .locals 2 .line 33 invoke-super {p0}, Landroid/app/Activity;->onStart()V .line 35 invoke-virtual {p0}, Lcom/halfbrick/mortar/MortarGameLauncherActivity;->isTaskRoot()Z move-result v0 if-nez v0, :cond_0 .line 37 invoke-virtual {p0}, Lcom/halfbrick/mortar/MortarGameLauncherActivity;->finish()V return-void .line 41 :cond_0 new-instance v0, Landroid/content/Intent; const-class v1, Lcom/halfbrick/mortar/MortarGameActivity; invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V .line 42 invoke-virtual {p0}, Lcom/halfbrick/mortar/MortarGameLauncherActivity;->finish()V .line 43 invoke-virtual {p0, v0}, Lcom/halfbrick/mortar/MortarGameLauncherActivity;->startActivity(Landroid/content/Intent;)V return-void .end method • Тут видно, что MortarGameLauncherActivity запускает MortarGameActivity и закрывается. Посмотрим что делает метод Oncreate в MortarGameActivity. .method protected onCreate(Landroid/os/Bundle;)V .locals 9 :try_start_0 const-string v0, "android.os.AsyncTask" .line 465 invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class; :try_end_0 .catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_0} :catch_0 .line 471 :catch_0 invoke-super {p0, p1}, Landroid/support/v4/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V // Здесь будет наш код как 472 строка. .line 473 invoke-static {}, Lcom/halfbrick/mortar/NativeGameLib;->TryLoadGameLibrary()Z .line 475 invoke-virtual {p0}, Lcom/halfbrick/mortar/MortarGameActivity;->getIntent()Landroid/content/Intent; • Теперь нам осталось только преобразовать нашу нагрузку в smali код и вставить, чем мы и займемся в следующий раз. Удачи! • Поддержать автора монеткой: @v_meshke
4.5K
просмотров
3753
символов
Нет
эмодзи
Да
медиа

Другие посты @netskings

Все посты канала →
👁‍🗨Hello world~ Атака Man-In-The-Disk на Android. Часть 4 — @netskings | PostSniper