Selasa, 12 Oktober 2010

Virulogi : VBSEncryptor

By Tri Amperiyanto

Kelemahan dari Virus yang ditulis dengan VBS adalah file source code-nya mudah dibaca oleh korbannya.  Karena virus hanya disimpan  ke file dalam format plain text. Para virus maker pun sadar akan kelemahan ini, maka  diterapkanlah beberapa metode untuk menutupi kelemahan. Metode yang lazim dipakai adalah enkripsi. Alias melakukan manipulasi pada string data.  Seperti : memindahkan posisi tiap huruf, atau  mengubahnya ke dalam format hexadecimal, dsb.
Tujuan melakukan enkripsi adalah mempersulit anti virus dalam melakukan pendeteksian virus, plus tindakan perbaikan terhadap kerusakan yang diakibatkannya.
Bagaimana tidak ? Listing program yang ada dalam plain texts akan dicampur-aduk. sehingga sulit untuk dibaca secara normal.
Celakanya, proses enkripsi skrip ini tidak sulit dilakukan oleh siapa saja.  Karena  dengan bantuan suatu program tools yang dirancang sedemikian rupa, pemrogram VBS tinggal  memasukkan source code virus yang dirancangnya ke dalam program tools, dan melakukan enkripsi hanya dengan menekan tombol tertentu saja.
Mengingat bahaya ini, sudah selayaknya Anda tahu, bagaimana sebenarnya enkripsi ini dilakukan. Artikel ini akan menyoroti sebagian triknya.

VBS Encryptor

Berikut ini adalah contoh suatu tool yang berguna untuk melakukan enkripsi data.  Keistimewaan program ini, adalah mampu tetap menjalankan program VBS yang dienkripnya,  sebagaimana program aslinya. 
Artinya, biarpun tampilan dan datanya sudah dikacaukan sedemikian rupa, program sesungguh masih dapat berfungsi sebagaimana aslinya ! 
Meski program ini dibuat oleh programmer lokal, namun tidak boleh dipandang sebelah mata.  Untuk dapat menjajal keampuhannya, silahkan di download program VBS Encyptor ini dari st4ti5t1c5.wordpress.com. [Sayang sekali saat ini kelihatannya Blog tersebut sudah tidak ada lagi.  :(  Tapi saya masih menyimpan file execute ini.  jadi dapat Anda download di sini.  Untuk pembuat program, jika Anda tidak berkenan dapat menghubungi saya, saya akan hapus link download ini.]


Gambar 1.  tampilan utama program

Saat program dijalankan, akan muncul tampilan sederhana yang  menawarkan 3 jenis fungsi enkripsi, yakni:
1. String reverse atau memutar-balikkan posisi huruf.
2. Mengubah huruf yang berkode genap menjadi ganjil dan yang berkode ganjil menjadi genap.
3. Mengubah huruf ke dalam hexadecimal.

Uniknya, ketiga fungsi tersebut dapat digunakan secara bersamaan. Hasil Enkripsi dari salah satu fungsi enkripsi, dapat digunakan oleh fungsi-fungsi  lainnya sebagai masukan. Namun jika pemakai tidak berminat melakukan enkripsi ganda, pemakai dapat memilih hanya salah satu fungsi saja.
Untuk memilih metode enkripsi, cukup klik checkbox yang ada di depan metode yang diinginkan.  Misalnya mengklik pilihan 3. Artinya pemakai memilih enkripsi model mengubah huruf ke dalam heksa desimal.


Gambar 2.  pilihan metode enkripsi



Contoh enkripsi metode 1

Anggap saja suatu file VBS dibuat dengan notepad dan  diberi nama : TEST.VBS.
Lalu diisi datanya dengan skrip sebagai berikut :

Msgbox “test script encryptor”

Simpan file tersebut, lalu jalankan dengan mengklik ganda file tersebut.  Akan muncul jendela dengan pesan tersebut.


Gambar 3. membuat file test.vbs



Gambar 4. hasil eksekusi test.vbs

Dari satu baris perintah tersebut, bagaimana hasilnya jika diolah dengan program enkriptor ini ? Panggil progam dan klik OPEN FILE.  Pilih file test.vbs. tampilannya seperti terlihat pada gambar.


Gambar 5.  data dimasukkan ke VBSScript Encryptor

Data asli file akan masuk di bagian Input, sedangkan konversinya akan masuk di kotak Output. Karena Encryption Method yang dipakai adalah 1, klik 1, lalu klik tombol ENCRYPT.  Hasil enkripsi akan terlihat pada kotak output. Klik tombol SAVE, kotak dialog penyimpanan data akan muncul, simpan data dengan nama 1.vbs (misalnya). Lalu klik Save.


Gambar 6. memilih Save File untuk meyimpan data

Jika proses berhasil akan muncul pesan File has been saved. Klik Ok untuk selesai.
Jika hasil file  hasil enkripsi (1.vbs) dibuka, maka isinya lebih kurang sebagai berikut :

Function DA2D36ED59(DB38B2E2D4):DA2D36ED59=StrReverse(DB38B2E2D4):End Function:DD28C8DA89="7D5CC12FD etucexE:))E58CC2F2ED(95DE63D2AD(260265F2AA=7D5CC12FD:"&""""&""&""""&"&"&""""&""&""""&""&""""&""&""""&"&"&""""&"!rotpyrcne tpircs tset"&""""&"&"&""""&""&""""&""&""""&""&""""&"&"&""""&" xobgsm"&""""&"=E58CC2F2ED:noitcnuF dnE:)14271DC1BA(esreveRrtS=260265F2AA:)14271DC1BA(260265F2AA noitcnuF":DC1495651A=DA2D36ED59(DD28C8DA89):Execute DC1495651A

Bandingkan dengan satu baris data aslinya sebagai berikut :

Msgbox “test script encryptor”

Sungguh amat berbeda dan cukup memusingkan kepala !  Bagi Anda yang berpengalaman membaca data enkrip, tentu akan tahu, bahwa rumitnya data tersebut adalah dalam rangka agar perintah asli dapat dijalankan sebagaimana mestinya, saat file tersebut diaktifkan.  Untuk semakin mempersulit pembacaan, oleh pemrogram data-data tersebut akan ditulis satu baris saja. Jadi data baris-baris skrip tidak akan ditata secara wajar layaknya suatu program skrip, namun disambung menjadi satu baris saja. Untuk memisahkan perintah antara baris skrip satu dengan lainnya  digunakan karakter : (titik dua).  Karakter tersebut berguna untuk menunjukkan bahwa data yang ada dibelakang setiap :, sebenarnya adalah data  (perintah) yang diletakkan  pada baris berikutnya.
Jika file “rumit”  (1.vbs) tersebut dieksekusi, ternyata akan berjalan baik, sama seperti file test.vbs yang tidak di dienkripsi.


Gambar 7. tampilan hasil enkripsi dilihat dengan Notepad.


Mengurai dan membaca data enkripsi

Seandainya data rumit tersebut diuraikan dan ditata secara wajar, maka akan tampak  sebagai berikut :

Function DA2D36ED59(DB38B2E2D4)
:DA2D36ED59=StrReverse(DB38B2E2D4)
:End Function

:DD28C8DA89="7D5CC12FD etucexE
:))E58CC2F2ED(95DE63D2AD(260265F2AA=7D5CC12FD:"&""""&""&""""&"&"&""""&""&""""&""&""""&""&""""&"&"&""""&"!rotpyrcne tpircs tset"&""""&"&"&""""&""&""""&""&""""&""&""""&"&"&""""&" xobgsm"&""""&"=E58CC2F2ED
:noitcnuF dnE
:)14271DC1BA(esreveRrtS=260265F2AA
:)14271DC1BA(260265F2AA noitcnuF"


:DC1495651A=DA2D36ED59(DD28C8DA89)

:Execute DC1495651A

Setelah dianalisis, ternyata isinya adalah beberapa fungsi  lengkap dengan data masukannya. Pertama kali, fungsi yang dipakai adalah : DA2D36ED59.  Fungsi ini berguna untuk membalik data string.
Lalu diikuti dengan suatu variabel yang bernama DD28C8DA89.  Variabel ini berisi fungsi dan data asli skrip program yang juga telah dikenai enkripsi.
Pada akhirnya, variabel DD28C8DA89 akan dimasukkan lagi ke suatu variabel (DC1495651A), yang berguna untuk membalikkan kondisi asli data, sebelum akhirnya dieksekusi. Trik yang cukup cerdik !
Mungkin keterangan di atas sedikit membingungkan. Untuk memperjelas keterangan,  data akan diuraikan dengan skema sebagai berikut :


Gambar 8. Skema standar fungsi enkrip metode 1

Data-data nama variabel sengaja dibuat dengan data-data angka acak oleh program VBScript Encryptor.  Tujuan pengacakan data ini, jelas untuk membingungkan pembacanya dalam membaca data sesungguhnya. Nama-nama variabel ini akan acak setiap kali program Encryptor dijalankan untuk mengenkripsi data.  Artinya, pada file yang sama, jika dilakukan proses enkripsi berulangkali, akan menghasilkan data nama variabel yang berbeda-beda.
Untuk mengatasi masalah pembacaan tersebut, pembacaan flow program akan semakin lebih mudah,  jika nama-nama acak tersebut diganti dengan nama variabel  “wajar” yang pendek.  Misalnya variabel : DA2D36ED59 diganti dengan nama variabel X.  Variabel DD28C8DA89 diganti dengan nama Z. dan seterusnya.   Jika hal itu dilakukan, maka akan terlihat jelas flow program. Lihat gambar.



Gambar 9. Skema proses enkripsi data dengan variabel disederhana dan data yang terbalik sudah dinormalkan.

Dari gambar skema dengan nama variabel telah disederhanakan, jika dijabarkan adalah sebagai berikut.
Pertama kali, akan dibuat suatu fungsi yang bernama X yang bertugas untuk menjalankan fungsi pembalik string (strReverse).
Lalu, membuat suatu variabel yang bernama Z.  Isi dari variabel Z, adalah suatu fungsi bernama A, yang juga berguna untuk melakukan proses strReverse.   Dalam variabel Z ini, dibuat suatu variabel lagi, bernama C yang isinya adalah kode program skrip yang dienkripsi. 
Masih dalam variabel Z, akhirnya dibuat suatu variabel D yang menjalankan fungsi A dengan masukan fungsi X. Dimana fungsi Z ini akan menjalankan kode program sesungguhnya. Setelah variabel D terisi dengan data, barulah dijalankan dengan perintah Execute. Sampai batas ini isi dari variabel Z telah sempurna. 
Selanjutnya, barulah dibuat suatu variabel yang bernama E, yang menjalankan fungsi X dengan masukan variabel Z.  Terakhir kali, barulah variabel E di execute .
Dengan cara yang lumayan rumit inilah, suatu program VBS sederhana dienkrip.

Bagaimana dengan Metode lainnya ?

Secara prinsip, metode 2 (mengubah huruf yang berkode genap menjadi ganjil dan yang berkode ganjil menjadi genap),  dan metode 3 (mengubah huruf ke dalam hexadecimal), mengalami proses “pemekaran” menjadi data asli, dengan trik yang hampir sama.  Hanya saja pada data Z (lihat posisi data z pada pembahasan di atas) isinya disesuaikan dengan jenis enkripsi yang dilakukan. 
Berikut ini adalah contoh hasil enkripsi dari kedua metode tersebut.

Contoh hasil enkripsi Metode 2.

Metode ini akan mengubah huruf yang berkode genap menjadi ganjil dan yang berkode ganjil menjadi genap. Jika test.vbs dienkripsi dengan metode 2 hasilnya lebih kurang sebagai berikut :

Function DA657128A(DB3B91DB22):DA657128A=StrReverse(DB3B91DB22):End Function:DDEF9F6D="D0DA6F5FD etucexE:))0CB98422ED(A821756AD(A72076A3AC=D0DA6F5FD:"&""""&"6D7367626F782022746573742073637269707420656E63727970746F722122"&""""&"=0CB98422ED:noitcnuF dnE)3 / )1 * )48C7CE71BC(neL( ,48C7CE71BC(thgiR =A72076A3AC:txeN:EA42099DC & 48C7CE71BC =48C7CE71BC:))2 ,81736901CC ,48C7CE71BC(diM& "&""""&"h&"&""""&"(rhC =EA42099DC:2 petS )48C7CE71BC(neL oT 1 = 81736901CC roF:)48C7CE71BC(A72076A3AC noitcnuF":DC284DA014=DA657128A(DDEF9F6D):Execute DC284DA014

Jika diuraikan dan ditata ulang baris skripnya, hasilnya sebagai berikut :

Function DA657128A(DB3B91DB22)
:DA657128A=StrReverse(DB3B91DB22)
:End Function

:DDEF9F6D="D0DA6F5FD etucexE
:))0CB98422ED(A821756AD(A72076A3AC=D0DA6F5FD:"&""""&"6D7367626F782022746573742073637269707420656E63727970746F722122"&""""&"=0CB98422ED:noitcnuF dnE)3 / )1 * )48C7CE71BC(neL( ,48C7CE71BC(thgiR =A72076A3AC
:txeN
:EA42099DC & 48C7CE71BC =48C7CE71BC:))2 ,81736901CC ,48C7CE71BC(diM& "&""""&"h&"&""""&"(rhC =EA42099DC:2 petS )48C7CE71BC(neL oT 1 = 81736901CC roF
:)48C7CE71BC(A72076A3AC noitcnuF"

:DC284DA014=DA657128A(DDEF9F6D)
:Execute DC284DA014

Jika bagian variabel DDEF9F6D (yang sepadan dengan variabel Z, pada contoh pertama) yang menampung data inti diterjemahkan secara detail, hasilnya adalah :

DDEF9F6D=
"function ca3a67027a(cb17ec7c84)
:for cc10963718 = 1 to len(cb17ec7c84) step 2
:cd99024ae= chr("&""""&"&h"&""""&" &mid(cb17ec7c84, cc10963718, 2))
:cb17ec7c84= cb17ec7c84 & cd99024ae
:next
:ca3a67027a= right(cb17ec7c84, (len(cb17ec7c84) * 1) / 3)
End function

:de22489bc0="&""""&"221227f64707972736e656024707962736370247375647220287f6267637d6"&""""&"
:df5f6ad0d=ca3a67027a(da657128a(de22489bc0))
:execute df5f6ad0d"


Contoh hasil enkripsi metode 3

Metode ini mengubah huruf ke dalam hexadecimal. Jika test.vbs dienkripsi dengan metode 3, hasilnya lebih kurang sebagai berikut :


Function DA657128A(DB3B91DB22):DA657128A=StrReverse(DB3B91DB22):End Function:DDEF9F6D="D0DA6F5FD etucexE:))0CB98422ED(A821756AD(A72076A3AC=D0DA6F5FD:"&""""&"6D7367626F782022746573742073637269707420656E63727970746F722122"&""""&"=0CB98422ED:noitcnuF dnE)3 / )1 * )48C7CE71BC(neL( ,48C7CE71BC(thgiR =A72076A3AC:txeN:EA42099DC & 48C7CE71BC =48C7CE71BC:))2 ,81736901CC ,48C7CE71BC(diM& "&""""&"h&"&""""&"(rhC =EA42099DC:2 petS )48C7CE71BC(neL oT 1 = 81736901CC roF:)48C7CE71BC(A72076A3AC noitcnuF":DC284DA014=DA657128A(DDEF9F6D):Execute DC284DA014

Jika diuraikan dan ditata ulang baris skripnya,  hasilnya adalah sebagai berikut :

Function DA657128A(DB3B91DB22)
:DA657128A=StrReverse(DB3B91DB22)
:End Function

:DDEF9F6D="D0DA6F5FD etucexE:))0CB98422ED(A821756AD(A72076A3AC=D0DA6F5FD:"&""""&"6D7367626F782022746573742073637269707420656E63727970746F722122"&""""&"=0CB98422ED:noitcnuF dnE)3 / )1 * )48C7CE71BC(neL( ,48C7CE71BC(thgiR =A72076A3AC:txeN:EA42099DC & 48C7CE71BC =48C7CE71BC:))2 ,81736901CC ,48C7CE71BC(diM& "&""""&"h&"&""""&"(rhC =EA42099DC:2 petS )48C7CE71BC(neL oT 1 = 81736901CC roF:)48C7CE71BC(A72076A3AC noitcnuF"

:DC284DA014=DA657128A(DDEF9F6D)
:Execute DC284DA014

Jika bagian variabel DDEF9F6D yang menampung data inti diterjemahkan secara detail, hasilnya adalah :

DDEF9F6D=
"function ca3a67027a(cb17ec7c84)
:for cc10963718 = 1 to len(cb17ec7c84) step 2
:cd99024ae= chr("&""""&"&h"&""""&" &mid(cb17ec7c84, cc10963718, 2))
:cb17ec7c84= cb17ec7c84 & cd99024ae
:next
:ca3a67027a= right(cb17ec7c84, (len(cb17ec7c84) * 1) / 3)
End function

:de22489bc0="&""""&"221227f64707972736e656024707962736370247375647220287f6267637d6"&""""&":df5f6ad0d=ca3a67027a(da657128a(de22489bc0))
:execute df5f6ad0d"


Dengan mengenal beberapa teknik enkripsi yang ada, saat Anda membuka suatu file teks (atau VBS)  dengan isian data yang “aneh”. Misalnya, berupa data-data angka atau huruf yang tidak beraturan atau heksadesimal.  Disarankan untuk tidak dijalankan ! Analisislah terlebih dahulu, jika ragu segera hapus saja, karena kemungkinan besar file tersebut adalah file skrip berbahaya.

1 komentar: