Assalamualaikum warahmatullahi wabarakatuh, halo teman-teman semua! pada artikel kali ini saya akan menuliskan perjalanan saya dalam melakukan sedikit proses Reverse Engineering terhadap situr phishing yang saya dapatkan dari grup skill-issue, jadi malam ini setelah melihat discord skill-issue saya menemukan kurang lebih ada chat seperti di bawah ini
Di sana salah satu member dari skill-issue menanyakan adakah yang pernah melakukan analisa indikasi situs phishing beralamat identitaskita.com lalu dijawab oleh teman lain yang yang memberikan jalan terbaik seperti melaporkan ke pihak-pihak tertentu, analisa dapat dilakukan oleh “orang nganggur” tentu saja akulah si nganggur itu (beneran) [ngegame doang sih] 🤣🤣🤣
Untuk bentuk web aplikasinya web phishing ini meniru halaman resmi milik Google Playstore yang mana akan melakukan instalasi sebuah aplikasi android, seperti berikutlah lampiran gambar tangkapan layarnya
Tombol yang ada di web tersebut hanya ada sebuah button install
yang mana mengarahkan ke sebuah fungsi JS untuk melakukan download per chunk, seperti inilah potongan kode yang dilakukan rendering di browser
Debugging pertama paling nyaman memang lewat inspect element, karena ternyata jika dilakukan view-source: ternyata konten utamanya disembunyikan pada sebuah base64 encode, berikut adalah bentuknya
seluruh kontennya berada di sebuah variable encodeContent
dan setelahnya akan dilakukan decode dan memasukannya pada body HTML, mari kita coba lakukan decode siapa tau ya kan ada sesuatu yang menarik, karena kodenya dilakukan inspect element sangat berat mari gunakan curl
saja untuk mengambil kontennya yang mana akan dilakukan decode di local.
Hapus manual konten yang bukan base64
Gunakan WSL untuk melakukan decode
Dengan ini saya sudah dapat source asli dari kode-kode frontend-nya meskipun bukan hal yang mungkin berfungsi tapi ya kenapa tidak dilakukan analisanya. Fungsi download di-handle oleh javascript
function handleDownload() {
if (document.querySelector("#instal").style.display === "none") {
return
} else if (downloadA) {
downloadA.click();
setTimeout(function () {
if (/Chrome/.test(window.navigator.userAgent) && !Boolean(window.chrome)) {
document.querySelector('.UDxLd').style.display = "block";
}
}, 1000)
}
if (/Chrome/.test(window.navigator.userAgent) && !Boolean(window.chrome)) {
window.location.href = "intent://" + window.location.href.split("://")[1] + "#Intent;scheme=" + window.location.href.split("://")[0] + ";end;";
}
Singkatnya pada kode tersebut adalah memastikan apakah user menggunakan browser Chrome, ataupun jika menggunakan browser android web-view akan memaksa membuka intent://
ke aplikasinya, isi terduga malware akan berada di uri kode berikut ini
const url = decodeURIComponent("https:\/\/identitaskita.com\/x\/down?name=Identitas Kependudukan Digital.apk");
sebelum melakukan analisa ke file android aplikasi yang ada, saya lebih memilih untuk melakukan pengecekan umur domain dan relasi yang kemungkinan ada dari web ini, berikut hasilnya.
Whois
domainnya sudah menggunakan whois protection (ternyata tidak sebodoh kasus sebelumnya) yang mana informasi-informasi mengenai siapa yang memesan domain tersebut sudah tidak ada, lalu umur domainnya baru satu bulan dihitung per tanggal 19 Desember 2024 ini, sangat muda.
Related domain
ada 1 domain yang terkait dengan domain yang sedang saya analisa, dan bentuknya juga sama persis
Tampilan
b. whois
Informasi awal yang dapatkan dari aplikasi android yang saya download, untuk ukuran file yang saya terima sekitar 16Mb lalu berikut detail dari aplikasinya
Name File | MD5 |
---|---|
Identitas Kependudukan Digital.apk | 34fcabe4d244928cf2deb96de36c6719 |
Setelahnya kita dapat melakuakan dekompilasi dengan jadx seperti biasa melakukan analisa dengan jadx
berikut adalah hal-hal menarik yang saaya temukan
Pada folder com.louye.dpt/MainActivity.java
ditemukan kode seperti tangkapan layar di atas, dari sini sense of feeling saya bekerja dengan baik merasa ini adalah kode buatan China 🇨🇳 dilihat dari nama-nama yang ada dan benar saja string dpt-shell
adalah sebuah library Dex Protect yang dikembangkan oleh teman-teman di China.
Setelah menemukan sumber kode library-nya saya melakukan installasi apk pada emulator android saya dan ternyata Google Protect langsung melakukan flagging terhadap aplikasi ini bahwa aplikasi berbahaya
Tapi untuk alasan analisa, kita Enable saya! toh ini adalah emulator, Tatakaeeeeeeeee! setelah membuka aplikasinya, aplikasinya benar-benar selalu crach di sini cukup menyulitkan saya dalam proses analisa, tapi tak apa kita lakukan analisa Dex Protect -nya saja!
Untuk semua library untuk melakukan obfuscator disimpan pada folder resource/assets/vwwwwwvwww/*
seperti tangkapan layar di bawah ini
Saya sudah melakukan analisa terhadap libdpt.so
dan hasilnya sangat-sangat susah dibaca, daripada sibuk melakukan Reverse Engineering pada libdpt.so saya lebih mending membaca kode sumber yang ada, saya mulai mencari dari data-data yang ada di strings yang ada
libdpt.so |
---|
app_acf |
dpt-shell seem not working |
vwwwwwvwww |
Dari bantuan string-string yang ada ini memudahkan saya melakukan analisa pada kode sumber milik dpt
obfuscator, semua konfigurasi memang benar disimpan pada file bernama
Global.java saya melakukan tracking melalui file ini dpt_util.h
dari namanya saja util
pasti ini penting hahaha. Saya mencari sumber-sumber yang ada dan paling membuahkan informasi menarik adalah fungsi berikut ini
bool read_zip_file_entry(void* zip_addr,off_t zip_size,const char* entry_name, void ** entry_addr,uint64_t *entry_size);
pada potongan kode di bawah ini
bool needFree = read_zip_file_entry(apk_addr,apk_size,COMBINE_DEX_FILES_NAME_IN_ZIP,&dexFilesData,&dex_files_size);
if (dexFilesData != nullptr) {
DLOGD("Read classes.dex of size: %lu", (unsigned long)dex_files_size);
uint32_t zipDataLen = readZipLength((uint8_t *)dexFilesData, dex_files_size);
DLOGD("Extracted zip data length: %u", (unsigned int)zipDataLen);
fungsi read_zip_file_entry
membutuhkan 5 parameter dan semuanya diisi, salah satu variable yang mengisinya adalah konstanta hardcoded COMBINE_DEX_FILES_NAME_IN_ZIP
yang mana isinya adalah
#define DEXES_ZIP_NAME "i11111i111.zip"
#define CACHE_DIR "code_cache"
#define ACF_NAME_IN_ZIP "assets/app_acf"
#define APP_NAME_IN_ZIP "assets/app_name"
#define CODE_ITEM_NAME_IN_ZIP "assets/OoooooOooo"
#define DEX_FILES_NAME_IN_ZIP "assets/i11111i111.zip"
#define COMBINE_DEX_FILES_NAME_IN_ZIP "classes.dex"
#define JUNK_CLASS_FULL_NAME "com/luoye/dpt/junkcode/JunkClass"
Di sana terlihat banyak string-string yang dilakukan hardcode, lalu di manakah dex
asli dari aplikasi ini? ya benar di simpan pada files i11111i111.zip
yang mana juga diverifikasi oleh fungsi hooking dari dpt-shell itu sendiri
if(location.rfind(DEXES_ZIP_NAME) != std::string::npos && dex_class_def){
int dexIndex = parse_dex_number(&location);
auto* class_def = (dex::ClassDef *)dex_class_def;
NLOG("[+] DefineClass class_desc = '%s', class_idx_ = 0x%x, class data off = 0x%x",descriptor,class_def->class_idx_,class_def->class_data_off_);
if(LIKELY(class_def->class_data_off_ != 0)) {
size_t read = 0;
auto *class_data = (uint8_t *) ((uint8_t *) begin + class_def->class_data_off_);
uint64_t static_fields_size = 0;
read += DexFileUtils::readUleb128(class_data, &static_fields_size);
NLOG("[-] DefineClass static_fields_size = %llu,read = %zu", (unsigned long long)static_fields_size,
read);
uint64_t instance_fields_size = 0;
read += DexFileUtils::readUleb128(class_data + read, &instance_fields_size);
NLOG("[-] DefineClass instance_fields_size = %llu,read = %zu",
singkatnya seluruh Dex
asli mili aplikasi malware ini berada di files i11111i111.zip
yang mana dapat kita verifikasi dengan melakukan akses ke android shell lewat adb dengan akses roots.
Identifier dari malware ini adalah com.kpee.csnei.zdzd.adyj
Berarti kemungkinan dia dapat menyimpan Dex aslinya adalah berada pada /data/data/com.kpee.csnei.zdzd.adyj/assets/
namun ternyata setelah melakukan pencarian lagi path aslinya berada pada /data/data/com.kpee.csnei.zdzd.adyz/code_cache/*.zip
setelah menariknya ke local, berikut inilah data yang saya dapatkan
Terdapat 4 *.dex dan saat dibuka lewat jadx lagi, files-files ini berisi seperti berikut ini
Banyak dari files-filesnya juga masih terobfuscated, namun ini sudah hasil yang baik dalam analisa singkat malam ini, salah satu aset yang saya temukan adalah ip addresess berikut ini:
http://203.107.1.1/d?host=
IP tersebut jika diberikan supply input pada query parameter host juga tidak mengerluarkan hasil apapun yang berbeda, dari sini saya sudah tidak berminat melakukan analisa lebih dalam lagi karena menjalankan aplikasinya saja tidak bisa di emulator saya, kalau teman-teman mau saya harap banyak yang mau benar-benar deep dive ke malware ini, karena saya tidak dapat kesimpulan apapun sebenarnya wkwk.
Terima kasih teman-teman telah membaca artikel saya kali ini, dalam analisa kali ini saya tidak dapat apapun seperti bagaimana behaviour dari aplikasinya, bagaimana mengirimkan data curiannya dan siapa pelakunya tapi saya cukup puas dalam perjalanan analisa ini, yang bisa saya pastikan menurut data-data yang ada malware yang ada ini dari China things meninjau dari IP yang ditemukan, obfuscator serta aset-aset yang berbahasa China lainnya, mungkin kesimpulan ini salah tapi data berbicara begitu. Sekali lagi mohon maaf tidak memenuhi ekspetasi teman-teman semuannya 😖 terima kasih sudah membaca!