PASSWORD DENGAN BAHASA ASSEMBLY
SKRIPSI
Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Teknik Program Studi Teknik Informatika
Oleh:
Mario Tinton Prambudi NIM : 025314038
PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA YOGYAKARTA
APPLICATIONS USING ASSEMBLY LANGUAGE
A Thesis
Presented as Partial Fulfillment of the Requirements
To Obtain the Sarjana Teknik Degree
In Informatics Engineering
By:
Mario Tinton Prambudi
Student Number : 025314038
INFORMATICS ENGINEERING STUDY PROGRAM
DEPARTMENT OF INFORMATICS ENGINEERING
FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
Kupersembahkan karya tulis ini kepada:
Tuhan Yesus Kristus Tuhan Yesus KristusTuhan Yesus Kristus Tuhan Yesus Kristus,
Atas hidup dan segala sesuatu di dunia yang Engkau berikan untukku.
Mama dan Papa Mama dan PapaMama dan Papa Mama dan Papa,
Atas kasih sayang dan dukungan yang tiada habisnya, yang sebenarnya tidak cukup dilukiskan hanya dengan kata-kata.
Windy Windy Windy Windy,
Adikku yang cantik yang kadang membuatku marah, benci, khawatir, senang, atau pun rindu.
Kakek, Nenek, Paman, Bibi, Sepupu, dan semua sanak saudaraku Kakek, Nenek, Paman, Bibi, Sepupu, dan semua sanak saudarakuKakek, Nenek, Paman, Bibi, Sepupu, dan semua sanak saudaraku Kakek, Nenek, Paman, Bibi, Sepupu, dan semua sanak saudaraku,
Di kampung halaman yang selalu kurindukan.
Semua teman Semua temanSemua teman
Semua teman---temanku-temankutemankutemanku,
Atas kesenangan, ketidaksenangan, keuntungan, kerugian, dan apa saja yang telah dan akan sama-sama kita lalui yang memberi pengalaman dan
nilai berharga dalam hidup kita.
Meliss Meliss Meliss Melissaaaa,
Yang telah mengajarkan nilai-nilai hidup yang amat penting bagiku seperti bersabar, bersikap tegar, rendah hati, belajar meminta maaf dan
memaafkan, tidak larut dalam kesedihan, tidak iri pada orang lain, dan hal-hal lainnya, ku selalu bangga akan dirimu dan berharap engkau selalu
A
n
d
W
h
en
H
e
F
a
ll
et
h
"T hat cross you w ear around your neck, is it only a decoration, or are you a true C hristian believer?”
“Yes, I believe – truly”
“T hen I w ant you to rem ove it at once! - and never to w ear it w ithin this castle again!
D o you know how a falcon is trained, m y dear? H er eyes are sow n shut. B lin ded tem porarily
She su ffers the w him s of h er G od patiently, u ntil her w ill is sub m erged and she learns to serve -
as your G od taught and blinded you w ith crosses.”
“You had me take off my cross because it offended...”
“It offend ed no-one! N o - it sim ply appears to m e to be discourteous to...
… to w ear the sym bol of a deity long dead.
M y ancestors tried to find it. A nd to open the door that seperates us from our C reator”
“But you need no doors to find God. If you believe...”
“B elieve?! If you believe you are gullible!
C an you look around this w orld and believe in the g oodness of a god w ho rules it?
F am ine, P estilence, W ar, D isease, and D eath! T h ey rule this w orld!”
“There is also love and life and hope.”
“V ery little hope I assure you. N o. If a god of lov e and life ev er did exist... he is long since dea d.
Pada sistem operasi Windows, suatu aplikasi tersimpan dalam media penyimpanan sebagai berkas yang dapat dengan mudah disalin dan digunakan oleh siapa pun yang memiliki akses terhadap berkas tersebut. Memperhatikan hal ini, penulis tertarik untuk membuat sistem proteksi terhadap aplikasi-aplikasi Windows yang dapat melindungi aplikasi Windows dengan password agar tidak dapat digunakan oleh pihak yang tidak berhak.
Sistem proteksi aplikasi Windows ini dibuat dengan bahasa pemrograman Assembly. Sistem ini hanya berjalan pada sistem operasi Windows 32-bit dan hanya dapat melindungi aplikasi Windows bertipe Portable Executable (PE).
In Windows operating system, an application is saved in storage media as a file which can easily be copied and used by anyone that has access to the file. Noticing this, the author was interested to build a protection system for Windows applications which is able to protect them with password in order to prevent them from being used by unauthorized users.
This Windows application protection system is developed using Assembly programming language. The system can only run on 32-bit Windows operating system and only protects Windows applications that are in Portable Executable (PE) format.
Segala puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Esa karena atas berkat rahmat dan limpahan kasih sayang-Nya penulis dapat menyelesaikan tugas akhir ini beserta laporannya sesuai dengan waktu yang telah ditetapkan dan diharapkan.
Tugas Akhir dengan judul “Sistem Proteksi Aplikasi Windows Menggunakan Password Dengan Bahasa Assembly” ini sebagai salah satu syarat untuk menyelesaikan program studi S-1 di Jurusan Teknik Informatika Universitas Sanata Dharma Yogyakarta. Namun demikian ada banyak hal berupa pengetahuan dan pengalaman berharga yang penulis dapatkan selama Tugas Akhir. Penulis berharap semoga ini dapat berguna bagi penulis di masa yang akan datang.
Penulis menyadari bahwa laporan ini masih jauh dari sempurna dan memiliki banyak kekurangan. Oleh karena itu penulis mengharapkan berbagai kritik dan saran yang bersifat membangun.
Yogyakarta, 1 Oktober 2007
HALAMAN JUDUL... I
TITLE PAGE... II
HALAMAN PERSETUJUAN ... III
HALAMAN PENGESAHAN ... IV
PERNYATAAN KEASLIAN KARYA...V
LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI KARYA ILMIAH UNTUK
KEPENTINGAN AKADEMIS ... VI
BAB II LANDASAN TEORI... 7
3.1 KRIPTOGRAFI... 7
3.1.1 Enkripsi, Dekripsi, dan Cipher ... 7
3.1.2 Password, Kunci Enkripsi, dan Hash ... 8
3.1.3 Feistel Cipher dan XTEA... 9
3.1.4 Algoritma Hashing MD5 ... 12
3.2 SISTEM PROTEKSI PASSWORD... 13
3.3 SISTEM OPERASI WINDOWS 32-BIT (WIN32) ... 15
3.3.1 Dasar-dasar Win32 ... 15
3.3.2 Memori di Lingkungan Win32 ... 16
3.3.3 Win32 API ... 17
3.3.4 Process dan Thread ... 18
3.3.5 Window dan Message ... 19
3.3.6 File Mapping ... 20
3.3.7 Portable Executable ... 22
3.3.8 Teknik Infeksi Virus Pada File Portable Executable ... 26
3.4 BAHASA X86ASSEMBLY... 27
3.4.1 Win32 Assembly... 29
3.4.2 Compiler dan Compiling ... 30
3.4.3 Linker dan Linking... 31
4.1.2 Data Flow Diagram... 33
4.1.3 Diagram Alir... 35
4.2 PERANCANGAN SISTEM... 46
4.2.1 Perancangan User Interface... 46
4.2.2 Perancangan Proses Utama ... 48
4.2.3 Penggunaan Fungsi-Fungsi API ... 49
4.2.4 Algoritma Enkripsi dan Dekripsi XTEA ... 53
4.2.5 Algoritma Hashing MD5 ... 54
BAB IV IMPLEMENTASI SISTEM... 56
5.1 LINGKUNGAN IMPLEMENTASI... 56
5.1.1 Lingkungan Perangkat Keras ... 56
5.1.2 Lingkungan Perangkat Lunak... 56
5.2 IMPLEMENTASI USER INTERFACE... 57
5.3 IMPLEMENTASI PROGRAM... 58
5.3.1 Menampilkan Dialog Box Utama ... 58
5.3.2 Prosedur Dialog Box Utama ... 59
5.3.3 Menampilkan Open File Dialog Box ... 61
5.3.4 Menampilkan About Dialog Box... 62
5.3.5 Menampilkan Help Dialog Box ... 63
5.3.6 Membuat Rutin Penghitung Nilai Hash MD5... 64
5.3.7 Membuat Proses Konfirmasi Password... 73
5.3.8 Membuat Rutin Buka, Mapping, dan Validasi File ... 74
5.3.9 Membuat Rutin Modifikasi File (Protect)... 77
5.3.10 Membuat Rutin Enkripsi XTEA... 79
5.3.11 Membuat Rutin Dekripsi XTEA... 81
5.3.12 Membuat Rutin Modifikasi File (Unprotect)... 82
5.3.13 Membuat Rutin Validasi Blok Enkripsi/Dekripsi Code Section ... 86
5.3.14 Membuat Rutin Pencari Alamat Awal Windows Kernel ... 91
5.3.15 Membuat Rutin Pencari Alamat-alamat Fungsi API ... 92
5.3.16 Menampilkan Password Dialog Box... 94
5.3.17 Membuat Proses Dekripsi Aplikasi dan Validasi Password ... 100
BAB V ANALISIS HASIL IMPLEMENTASI ... 103
6.1 UJICOBA PROGRAM... 103
6.2 KELEBIHAN SISTEM... 111
6.3 KEKURANGAN SISTEM... 111
BAB VI PENUTUP... 112
7.1 KESIMPULAN... 112
7.2 SARAN... 113
TABEL 2.1STANDARD EXEHEADER... 22
TABEL 2.2PEHEADER... 23
TABEL 2.3PEOPTIONAL HEADER... 24
BAB I
PENDAHULUAN
2.1 Latar Belakang Masalah
Praktik cracking atau pembajakan aplikasi merupakan masalah yang sering
ditemui di dunia teknologi informasi. Pembajakan aplikasi ini lebih banyak terjadi
pada aplikasi-aplikasi komersial, tindakan pembajakan tersebut dilakukan oleh
beberapa kalangan yang disebut crackers dan bertujuan untuk memungkinkan penggunaan aplikasi-aplikasi komersial tersebut tanpa membelinya secara resmi
dari pembuatnya.
Ada banyak faktor yang menyebabkan praktik cracking aplikasi dapat dilakukan, beberapa di antaranya adalah arsitektur komputer dan sistem operasi
yang memungkinkan seseorang untuk mendapat salinan identik dari suatu aplikasi
dengan mudah dan cepat. Faktor lain yang umum ialah keberadaan
trialware/shareware yaitu aplikasi komersial yang mudah didapatkan dan dicoba
secara gratis dengan jangka waktu yang terbatas dan fitur yang terbatas, dimana
penggunanya tidak akan dapat menggunakan aplikasi tersebut ketika periode
penggunaan gratisnya telah terlewati, dan pengguna diharapkan membeli aplikasi
tersebut jika masih ingin menggunakannya.
Terdapat banyak cara dan metode cracking, tapi intinya adalah
memodifikasi sebuah aplikasi trialware yang hanya dapat digunakan selama 15 hari agar dapat digunakan tanpa batas waktu. Contoh lain yang jauh lebih
sederhana adalah mendapatkan salinan identik dari aplikasi komersial yang telah
dibeli oleh orang lain.
Untuk menekan maraknya praktik cracking, para pengembang aplikasi menyisipkan suatu algoritma proteksi pada aplikasinya, proteksi ini dimaksudkan
untuk mencegah atau mempersulit praktik cracking, namun pada umumnya
algoritma proteksi yang dipakai juga menyediakan algoritma untuk membuka
proteksi tersebut. Contoh algoritma proteksi adalah memproteksi aplikasi dengan
password, sehingga pengguna aplikasi harus memasukkan password sebelum dapat menggunakannya. Pada kenyataannya cracking terhadap aplikasi yang terproteksi tetap dimungkinkan dengan cara mempelajari cara kerja algoritma validasi
password dalam aplikasi tersebut terlebih dahulu.
2.2 Rumusan Masalah
Dari latar belakang masalah di atas dapat dirumuskan menjadi beberapa
masalah sebagai berikut:
1. Bagaimana cara mengimplementasikan sistem proteksi password pada suatu
aplikasi Windows yang telah ada?
2. Bagaimana cara mengembalikan suatu aplikasi Windows yang telah
2.3 Batasan Masalah
Dalam penerapan algoritma proteksi password pada aplikasi ini dilakukan beberapa batasan sebagai berikut:
1. Aplikasi yang dapat diproses adalah aplikasi bertipe Windows 32-bit x86
Portable Executable (Win32 PE)
2. Program dibuat dengan bahasa Win32 x86 Assembly dan hanya dapat
berjalan di lingkungan sistem operasi yang mendukung aplikasi Win32.
2.4 Tujuan dan Manfaat Penelitian
Penelitian ini bertujuan untuk membuat suatu program yang dapat
menyisipkan sistem proteksi password pada suatu aplikasi agar aplikasi tersebut hanya dapat digunakan oleh pihak yang berhak menggunakannya. Pihak-pihak
yang tidak berhak masih dimungkinkan untuk menyalin aplikasi yang terproteksi,
namun tidak dapat menggunakannya tanpa mengetahui password yang digunakan untuk memproteksinya.
Manfaat yang dapat diperoleh dari pembuatan sistem proteksi password ini ialah mempunyai suatu sistem perlindungan terhadap aplikasi-aplikasi pribadi agar
tidak dapat digunakan oleh pihak-pihak yang tidak berhak menggunakannya.
2.5 Metode Penelitian
Langkah-langkah yang dilakukan adalah sebagai berikut:
1. Studi literatur
b. Mempelajari dan memilih teknik memodifikasi file Portable Executable untuk menempatkan kode password dialog box dan decryptor.
c. Mempelajari algoritma enkripsi XTEA
d. Mempelajari algoritma hashing MD5
2. Merancang program
a. Rancangan sistem input dan output.
b. Rancangan user interface program utama dan password dialog box.
c. Algoritma
1. Algoritma program secara menyeluruh
2. Algoritma memodifikasi file Portable Executable
3. Algoritma untuk membedakan file Portable Executable yang telah terproteksi dan yang belum terproteksi.
4. Algoritma enkripsi XTEA
5. Algoritma hashing MD5
3. Membuat program
a. Mengimplementasikan semua rancangan ke bentuk program
b. Menguji algoritma modifikasi file Portable Executable
c. Menguji interaksi pada user interface dan password dialog box
d. Menguji algoritma hashing MD5 dan enkripsi XTEA
e. Menguji program secara keseluruhan
4. Implementasi program
a. Memilih berbagai macam file Portable Executable dari berbagai sumber
b. Menguji coba program utama dan aplikasi yang terproteksi pada lingkungan
hardware yang kompatibel dengan sistem Intel x86 dan sistem operasi
Windows XP.
Menganalisis hasil dan mengevaluasi unjuk kerja program utama dan
kompatibilitas serta kehandalan aplikasi yang terproteksi.
2.6 Sistematika Penulisan
Sistematika penulisan Tugas Akhir ini terbagi atas lima bab sebagai
berikut:
BAB I: PENDAHULUAN
Bab ini berisi latar belakang masalah, rumusan masalah, batasan masalah,
tujuan & manfaat penelitian, serta metode penelitian dari Tugas Akhir ini.
BAB II: LANDASAN TEORI
Bab ini berisi landasan teori yang dipakai untuk pembahasan masalah
dalam penulisan Tugas Akhir ini.
BAB III: PERANCANGAN SISTEM
Bab ini berisi gambaran perancangan sistem aplikasi yang dibuat dalam
Tugas Akhir ini.
BAB IV: IMPLEMENTASI SISTEM
Bab ini berisi implementasi dari rancangan sistem yang telah dibuat pada
bab sebelumnya.
BAB V: ANALISIS HASIL IMPLEMENTASI
BAB VI: PENUTUP
BAB II
LANDASAN TEORI
3.1 Kriptografi
Kriptografi adalah studi tentang kerahasiaan suatu pesan, informasi, atau
data. Saat ini kriptografi telah menjadi bagian dari Teknologi Informasi terutama
karena dalam Teknologi Informasi sering melibatkan transmisi pesan, informasi,
atau data dari satu tempat dan tempat lain dan kerahasiaan serta keasliannya harus
dijaga selama dalam proses transmisi, di sinilah kriptografi berperan penting.
3.1.1 Enkripsi, Dekripsi, dan Cipher
Enkripsi adalah proses membuat suatu informasi tidak dapat dibaca tanpa
pengetahuan khusus, terkadang disamakan dengan proses pengacakan. Dekripsi
adalah kebalikan enkripsi, yaitu proses untuk mengembalikan informasi yang
telah diacak dengan proses enkripsi ke kondisi semula sehingga dapat dibaca dan
diidentifikasikan.
Cipher adalah suatu algoritma untuk melakukan enkripsi atau dekripsi, merupakan sekumpulan langkah yang dapat diikuti sebagai suatu prosedur.
Umumnya prosedur tersebut bervariasi bergantung pada suatu kunci yang
mengubah operasi dalam algoritma tersebut. Suatu proses enkripsi atau dekripsi
enkripsi dan kemudian disimpan untuk proses dekripsi. Data yang akan dienkripsi
disebut dengan plaintext dan data yang telah dienkripsi disebut ciphertext.
Menurut Wikipedia, cipher dapat dikategorikan berdasarkan hal-hal sebagai berikut:
a. Apakah cipher tersebut bekerja pada suatu blok masukan yang ukurannya tetap (disebut dengan block cipher) atau apakah cipher tersebut bekerja pada suatu aliran masukan (disebut dengan stream
cipher).
b. Apakah cipher tersebut menggunakan kunci yang sama untuk
enkripsi dan dekripsi (disebut algoritma symmetric key) atau apakah menggunakan kunci yang berbeda untuk enkripsi dan
dekripsi (disebut algoritma asymmetric key).
3.1.2 Password, Kunci Enkripsi, dan Hash
Tiga istilah ini, walaupun amat berbeda dalam kriptografi, namun sering
salah ditafsirkan. Password ialah kata, gabungan kata, atau kumpulan karakter-karakter yang tidak berarti untuk menjawab input dari beberapa program yang
menanyakannya. Namun, program-program tersebut tidak menggunakan
password untuk melakukan proses enkripsi, melainkan hanya mengambil kunci enkripsi berdasar password yang dimasukkan. Kunci enkripsi adalah deretan bit
(0 atau 1) dengan panjang yang bervariasi, contohnya 40-bit, 64-bit, dan 128-bit.
Untuk mendapatkan kunci enkripsi dari password, fungsi hashing sering digunakan. Hashing adalah suatu fungsi kriptografi yang rumit yang meminta
masukan berupa string dengan panjang yang tidak ditentukan dan menciptakan suatu deretan bit dengan panjang tetap (hash) sebagai keluaran. Deretan bit hasil
hashing ini amat unik, sedikit perubahan pada string masukan akan menciptakan hasil hash yang amat berbeda dan secara praktis tidak dimungkinkan untuk mendapatkan string masukan hanya dengan mengetahui nilai hash.
3.1.3 Feistel Cipher dan XTEA
Untuk algoritma enkripsi, penulis memilih algoritma XTEA (eXtended Tiny
Encryption Algorithm) yang dirancang oleh David Wheeler dan Roger Needham dari University of Cambridge. Algoritma ini dipilih karena dapat
diimplementasikan dalam kode Assembly yang sangat kecil, kecepatan eksekusi enkripsi/dekripsi yang tinggi, dan tingkat keamanan yang tinggi pula (walau
tingkat keamanannya tidak setinggi algoritma-algoritma kandidat AES, namun
sangat tinggi untuk ukuran kode encryptor/decryptor yang begitu kecil). Algoritma XTEA ini bertipe block cipher, menggunakan algoritma symmetric
cipher, dan dioptimisasi kecepatan ekseksusinya pada prosesor x86 32-bit sehingga sangat cocok dengan penelitian ini, algoritma ini menggunakan ukuran
blok sebesar 64-bit dan ukuran key sebesar 128-bit.
Algoritma XTEA ini dikategorikan sebagai Feistel cipher, yaitu suatu jenis block cipher dengan struktur yang spesifik sebagai berikut:
a. Operasi enkripsi dan dekripsi sangat mirip, umumnya operasi dekripsi
b. Operasi enkripsi dan dekripsi dijalankan dalam beberapa prosedur yang
diulang-ulang. Prosedur tersebut mengandung operasi-operasi:
1. Penggeseran bit (disebut permutation boxes)
2. Fungsi-fungsi non-linear (disebut substitution boxes)
3. Pengacakan linear menggunakan XOR
Operasi dasar Feistel cipher adalah sebagai berikut:
Membagi tiap blok plaintext ke dalam dua pecahan yang sama (L0 dan R0).
Untuk setiap langkah dilakukan perhitungan
Li = Ri – 1
Dimana f adalah suatu fungsi dari prosedur tersebut, dan K adalah suatu
subkey dari kunci enkripsi. Ciphertext yang dihasilkan adalah (Ln dan Rn).
Operasi dekripsi dilakukan dengan
Ri-1 = Li
Satu putaran operasi cipher XTEA (terdiri dari dua langkah) digambarkan
Gambar 3.1 Operasi Cipher XTEA
Delta adalah suatu konstanta tetap bernilai 0x9E3779B9, “<< 4”
menandakan operasi pergeseran 4 bits ke kiri, “>> 5” menandakan operasi
pergeseran 5 bits ke kanan, dan subkey mewakili kunci enkripsi.
Algoritma enkripsi XTEA yang asli ditulis David Wheeler dan Roger Needham
dalam bahasa C, sebagai berikut:
void encipher(unsigned int num_rounds, unsigned long* v, unsigned long* k) { unsigned long v0=v[0], v1=v[1], i;
unsigned long sum=0, delta=0x9E3779B9; for(i=0; i<num_rounds; i++) {
v0 += ((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + k[sum & 3]); sum += delta;
v1 += ((v0 << 4 ^ v0 >> 5) + v0) ^ (sum + k[sum>>11 & 3]); }
v[0]=v0; v[1]=v1; }
Sedangkan algoritma dekripsinya adalah sebagai berikut:
unsigned long delta=0x9E3779B9, sum=delta*num_rounds; for(i=0; i<num_rounds; i++) {
v1 -= ((v0 << 4 ^ v0 >> 5) + v0) ^ (sum + k[sum>>11 & 3]); sum -= delta;
v0 -= ((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + k[sum & 3]); }
v[0]=v0; v[1]=v1; }
3.1.4 Algoritma Hashing MD5
MD5 (Message-Digest algorithm 5) adalah suatu fungsi hashing kriptografi yang menghasilkan nilai hash berukuran 128-bit. Penggunaan algoritma hashing dalam Tugas Akhir ini dimaksudkan untuk mendapatkan nilai kunci
enkripsi/dekripsi dari masukan password. Algoritma hashing MD5 diawali dengan menginisialisasi suatu konstanta 128-bit yang dibagi menjadi 4 bagian
32-bit yang dinamai A, B, C, dan D. Nilai A = 0x67452301, B = 0xEFCDAB89, C =
0x98BADCFE, dan D = 0x10325476. Algoritma utama memproses string masukan yang dibagi ke dalam blok-blok berukuran 512-bit. Pemrosesan
dilakukan blok demi blok, dan tiap pemrosesan blok terdiri dari 4 langkah yang
disebut round. Setiap round terdiri dari 16 operasi yang berdasar pada suatu fungi
non-linear F, G, H, dan I. Operasi fungsi-fungsi adalah sebagai berikut:
secara berturut-turut mewakili operasi XOR, AND, OR, dan
var int[64] r, k
append bit length of message as 64-bit little-endian integer to message
for each 512-bit chunk of message
3.2 Sistem Proteksi Password
Prinsip sistem proteksi password yang digunakan adalah tidak menyimpan
password asli di dalam file aplikasi yang bersangkutan. Prinsip ini pada dasarnya sama dengan proteksi password pada kebanyakan file archive seperti .ZIP, .RAR,
password pada archive memproteksi file archive, maka sistem proteksi password ini memproteksi aplikasi. Kekuatan proteksi password pada archive ini terlihat jika
suatu archive diproteksi dengan password yang baik (jumlah karakter panjang, case
berbeda-beda, dan dicampur dengan karakter spesial dan angka) dan suatu saat
pemilik archive tersebut lupa akan passwordnya maka tidak ada cara lain selain brute force, dictionary attack, atau cara-cara paksa lainnya untuk mengembalikan password karena aplikasi archiver memang tidak menyimpan password archive di
dalam archive yang bersangkutan, aplikasi archiver hanya menyimpan hash dari isi
archive tersebut, sehingga untuk membuka archive tersebut, yang perlu dilakukan
hanyalah melakukan dekripsi menggunakan password yang dimasukkan (program tidak melakukan pengecekan apakah password tersebut benar atau tidak) kemudian
melakukan perhitungan hash dari data yang telah didekripsi lalu
membandingkannya dengan hash yang asli, jika tidak cocok maka dianggap password yang dimasukkan salah. Sistem proteksi archive semacam ini hanya
menyediakan informasi hash di dalam archive, dan bagi seorang cracker tidak mungkin untuk menemukan password asli hanya dengan mengetahui nilai hash selain dengan brute force, sedangkan proses menemukan password yang baik
3.3 Sistem Operasi Windows 32-bit (Win32)
3.3.1 Dasar-dasar Win32
Win32 adalah lingkungan sistem operasi Windows yang berjalan pada modus Protected Mode dan menggunakan instruksi x86 32-bit sebagai instruksi utama. Beberapa sistem operasi Win32 adalah sebagai berikut:
1. Windows 3.1 dengan Win32s (Win32 subset)
2. Windows 95
3. Windows 98
4. Windows NT
5. Windows ME
6. Windows 2000
7. Windows XP
8. Windows Server 2003
9. Windows Vista
Win32 harus berjalan pada prosesor yang mendukung instruksi x86 32-bit
dan Protected Mode. Prosesor yang memenuhi kriteria ini adalah semua prosesor
kelas 80386 dan yang lebih baru.
Win32 mengadopsi sistem protection rings, yaitu mekanisme untuk melindungi data dan fungsionalitas dengan membagi hak akses berdasar level ring
secara hirarkis, dimana level ring terendah mempunyai prioritas tertinggi dan
mempunyai hak akses khusus terhadap hardware dan sistem operasi. Makin tinggi level ring, makin kecil prioritas dan makin terbatas hak aksesnya. Pada
dan lingkungan Ring-3. Lingkungan Ring-0 adalah lingkungan bagi aplikasi-aplikasi tingkat rendah seperti program inti sistem operasi (Kernel) dan device
driver. Pada lingkungan ini aplikasi-aplikasi mempunyai akses langsung ke hardware dan fungsi-fungsi tingkat rendah dari sistem operasi. Lingkungan
Ring-3 adalah lingkungan bagi aplikasi-aplikasi biasa dan aplikasi-aplikasi di lingkungan ini mempunyai lebih banyak keterbatasan dibandingkan aplikasi
Ring-0 terutama di bagian akses hardware, aplikasi di Ring-3 tidak dapat mengakses
disk sector secara langsung, tidak dapat mengalokasikan memori secara langsung, tidak dapat membunyikan speaker secara langsung, dan sebagainya.
Aplikasi-aplikasi pada Ring-3 biasanya selalu menggunakan fungsi-fungsi yang telah disediakan oleh Kernel atau aplikasi lain yang berjalan di Ring-0.
Di Win32 dikenal juga istilah DLL (Dynamic Link Library). DLL ini pada
dasarnya mirip dengan device driver yang bertugas menyediakan fungsi-fungsi yang dapat digunakan oleh aplikasi lain, namun perbedaannya adalah device
driver bekerja pada Ring-0 sementara DLL beroperasi pada Ring-3. Menggunakan fungsi dari suatu DLL dikenal dengan istilah importing, dan menyediakan fungsi untuk digunakan oleh aplikasi lain dikenal dengan istilah exporting. Suatu DLL
selalu melakukan exporting, namun dapat juga melakukan importing dari DLL lain. Suatu aplikasi biasa hanya melakukan importing dari DLL dan tidak
melakukan exporting sama sekali.
3.3.2 Memori di Lingkungan Win32
Win32 berjalan pada modus Protected Mode, oleh karena itu diterapkan
4 GB tanpa segmentasi, sehingga setiap aplikasi bisa melakukan pengalamatan
sebesar 4 GB namun tentunya tidak seluruh 4 GB tersebut dapat digunakan.
Memori pada Win32 dibagi-bagi dalam potongan-potongan blok memori ukuran tertentu, pada umumnya ukuran blok ini adalah 4 KB, sehingga suatu
operasi alokasi memori di Win32 selalu dilakukan pada kelipatan 4 KB, jika suatu
aplikasi memohon alokasi memori pada jumlah yang bukan kelipatan 4 KB maka
Windows secara otomatis akan membulatkan besar alokasi ke atas hingga dicapai
kelipatan 4 KB.
Setiap blok memori yang telah teralokasikan dalam lingkungan Win32
mempunyai atribut baca, tulis, dan eksekusi. Suatu blok memori yang hanya
membolehkan pembacaan tidak akan dapat ditulisi. Suatu blok memori yang tidak
membolehkan eksekusi program tidak akan dapat menjalankan kode program di
daerah blok memori tersebut.
3.3.3 Win32 API
API (Application Programming Interface) adalah interface yang disediakan sebuah sistem atau library dengan tujuan melayani permohonan
layanan dari satu atau banyak aplikasi. Win32 API ialah API yang disediakan oleh
sistem Windows di lingkungan Win32.
Setiap fungsi atau prosedur API dalam Win32 API dikenal dengan nama
yang unik satu sama lain. Nama ini terdiri dari huruf-huruf dan gabungan
kata-kata dalam bahasa Inggris yang ditulis secara case-sensitive. Contoh nama-nama fungsi Win32 API adalah sebagai berikut:
SendMessageA
CloseHandle
ExitProcess
GetFileSize
Beberapa fungsi Win32 API memproses argumen yang mengandung string. Dalam lingkungan Win32, string dibagi menjadi 2 tipe yaitu string dalam karakter ANSI dan string dalam karakter Widechar (Unicode), oleh karena itu
beberapa nama fungsi Win32 API mempunyai suffix “A” yang menandakan bahwa fungsi tersebut adalah fungsi yang memproses karakter ANSI, sementara
fungsi yang memproses karakter Unicode mempunyai suffix “W”. Contohnya adalah fungsi CreateFile, versi ANSI-nya mempunyai nama “CreateFileA”, dan versi Unicode-nya bernama “CreateFileW".
Seperti fungsi pada umumnya, Win32 API juga menerapkan suatu calling convention, yaitu suatu prosedur dan tata cara pemanggilan fungsi dan
pelimpahan argumen-argumen yang diperlukan. Calling convention yang dipakai dalam Win32 API adalah stdcall. Dalam stdcall, argumen-argumen yang diperlukan oleh fungsi tersebut dimasukkan ke dalam stack sebelum pemanggilan
fungsi. stdcall menganut aturan callee clean-up, yang berarti fungsi yang dipanggillah yang bertanggungjawab untuk membersihkan stack setelah fungsi
tersebut selesai beroperasi.
3.3.4 Process dan Thread
Suatu aplikasi Win32 yang telah dimuat ke memori disebut dengan
process diperbolehkan memiliki lebih dari 1 unit eksekusi yang disebut thread, sehingga suatu process dapat saja mempunyai 1 thread yang melakukan satu
pekerjaan dan thread lain yang melakukan pekerjaan lain pada waktu yang bersamaan secara asinkron.
Setiap process yang berjalan mendapat tempat memori virtual sebesar 4 GB yang privat dan tidak berhubungan secara langsung dengan memori dari
process lain, sehingga seakan-akan setiap process masing-masing memiliki
tempat sebesar 4 GB, namun tidak semuanya dapat digunakan karena pada
umumnya kebanyakan process tidak memerlukan memori sebesar itu sehingga
sebagian besar dari memori virtual tersebut tidak dialokasikan. Pengaksesan ke daerah memori yang tidak dialokasikan akan menyebabkan general protection fault atau fatal error, dan sistem operasi Windows biasanya akan segera
menganggap process yang menyebabkan error tersebut berjalan tidak normal dan
menutupnya.
3.3.5 Window dan Message
Window dalam sistem operasi Windows adalah suatu daerah persegi dari layar dan menjadi tempat aplikasi menerima masukan dari pengguna dan
menampilkan keluaran. Sebuah window berbagi daerah layar dengan window-window lain, termasuk window dari aplikasi lain. Hanya satu window dapat menerima masukan dari pengguna pada suatu waktu. Pengguna dapat
menggunakan mouse, keyboard, atau alat masukan lain untuk berinteraksi dengan
Aplikasi dalam sistem operasi Windows bekerja secara event-driven, yang
artinya aplikasi merespon kejadian (event) yang terjadi. Sistem operasi Windows
memberitahu aplikasi-aplikasi semua event yang terjadi melalui suatu pemberitahuan yang disebut Win32 Message. Banyak sekali event-event yang
terjadi ketika Windows sedang berjalan, beberapa contoh event adalah sebagai berikut:
a. Tombol mouse kiri di-klik oleh pengguna
b. Pengguna menekan tombol “A” di keyboard
c. Pengguna menekan tombol Minimize di suatu window
Hampir semua perubahan keadaan yang terjadi dianggap sebagai event dan diumumkan oleh sistem operasi Windows sebagai Win32 Message. Umumnya apa yang dikerjakan suatu aplikasi ketika dieksekusi adalah membuat
dan menampilkan window utama, kemudian menunggu Win32 Message yang dikirim kepadanya, memproses event-event yang perlu diperhatikan, dan
membiarkan event-event yang tidak perlu, semua ini berlangsung dalam loop yang
terus menerus hingga pengguna menutup window aplikasi tersebut.
3.3.6 File Mapping
File Mapping adalah suatu proses dalam Win32 yang mengasosiasikan isi suatu file dengan satu bagian blok memori. Sistem operasi Windows membuat
suatu obyek dari setiap File Mapping yang dibuat untuk mempertahankan asosiasi
ini hingga obyek tersebut dihapus. Daerah memori yang diasosiasikan untuk File
Mapping disebut File View, aplikasi mengakses file yang bersangkutan dengan
perubahan apapun dalam File View akan direfleksikan ke isi file asli di media penyimpanan jika File Mapping dibuka untuk penulisan.
File Mapping merupakan cara alternatif untuk mengakses dan memodifikasi suatu file dengan lebih mudah dibandingkan cara biasa yang
menggunakan suatu pointer baca/tulis dan membaca/menulis sejumlah data secara
manual. Pengaksesan file dengan metode File Mapping tidak memerlukan pointer
baca/tulis, aplikasi hanya perlu membaca File View seperti halnya membaca blok
memori biasa, dan menulis pada File View seperti halnya menulisi blok memori biasa. Selain keuntungan dalam kemudahan dan kecepatan akses, metode File
Mapping juga memungkinkan aplikasi-aplikasi dalam lingkungan Win32 berbagi daerah memori dengan menggunakan suatu obyek File Mapping, karena pada dasarnya setiap aplikasi Win32 diberi daerah memori sendiri yang bersifat privat
hingga tidak mungkin suatu aplikasi mengakses isi memori aplikasi lain secara
langsung.
Fungsi-fungsi Win32 API yang digunakan dalam File Mapping adalah sebagai berikut:
a. CreateFileMapping, digunakan untuk membuat obyek File Mapping.
b. OpenFileMapping, digunakan untuk membuka obyek File Mapping yang telah dibuat.
d. UnmapViewOfFile, digunakan untuk menutup suatu File View jika operasi pengaksesan file sudah selesai dilakukan.
e. FlushViewOfFile, digunakan untuk secara eksplisit menulis perubahan apapun yang terjadi dari isi File View langsung ke media penyimpanan.
3.3.7 Portable Executable
File-file aplikasi (.EXE, .SCR) dan library (.DLL) dalam Win32 memiliki
format Portable Executable (PE). Suatu struktur file PE didahului oleh struktur DOS .EXE sebagai berikut:
Offset dari awal file Ukuran (Bytes) Keterangan
00000000 2 String “MZ”
0000003C 4 Pointer ke PE header
Tabel 3.1 Standard EXE Header
Karakter “MZ” di awal file menandakan bahwa file tersebut adalah file
.EXE. Jika file .EXE tersebut adalah file PE maka 4 bytes pada offset 3C mengandung pointer ke PE header relatif terhadap awal file. Format PE header adalah sebagai berikut
Offset dari awal PE header Ukuran (Bytes) Keterangan
00000000 2 String “PE”
00000002 2 2 Bytes nol
00000004 2 ID target komputer
00000006 2 Jumlah sections
0000000C 4 Pointer ke tabel simbol
00000010 4 Jumlah simbol
00000014 2 Ukuran Optional Header
00000016 2 Karakteristik
Tabel 3.2 PE Header
Setelah struktur tersebut, langsung diikuti oleh struktur Optional Header
yang ukurannya dinyatakan di header utama di atas. Struktur Optional Header adalah sebagai berikut:
Offset dari awal PE header Ukuran (Bytes) Keterangan
00000018 2 Tidak digunakan
0000001A 1 Versi linker (major)
0000001B 1 Veri linker (minor)
0000001C 4 Ukuran code
00000020 4 Ukuran data yang telah
diinisialisasi
00000024 4 Ukuran data yang belum
dinisialisasi
00000028 4 Alamat entry point
0000002C 4 Alamat awal code
00000030 4 Alamat awal data
00000034 4 Image base
00000038 4 Ukuran pembulatan dari sections
0000003C 4 Ukuran pembulatan dari ukuran
00000040 2 Versi sistem operasi (major)
00000042 2 Versi sistem operasi (minor)
00000044 2 Versi image (major)
00000046 2 Versi image (minor)
00000048 2 Versi subsystem (major)
0000004A 2 Versi subsystem (minor)
0000004C 4 Tidak digunakan
00000050 4 Ukuran image
00000054 4 Ukuran keseluruhan header dan
tabel
00000058 4 Checksum
0000005C 2 ID dari subsystem
0000005E 2 DLL Characteristics
00000060 4 Ukuran stack reserve
00000064 4 Ukuran stack commit
00000068 4 Ukuran heap reserve
0000006C 4 Ukuran heap commit
00000070 4 Loader flags
00000074 4 Jumlah PEdirectories
Tabel 3.3 PE Optional Header
Setelah Optional Header ini, segera diikuti oleh suatu array dari informasi
offset relatif dan ukuran dari semua PE directories, di antaranya adalah imports,
sejumlah bagian yang disebut section, biasanya penggunaan section ini untuk memisahkan program, data, dan lain-lain sehingga program dan data menempati
daerah section tersendiri. Section yang umum dijumpai pada sebuah file PE adalah code section sebagai tempat program utama berada, initialized data section
sebagai tempat data yang telah terinisialisasi nilainya, unitialized data section sebagai tempat data yang belum terinisialisasi nilainya, copyright section sebagai
tempat informasi copyright dan versi dari file PE tersebut, resource section
sebagai tempat data tambahan seperti dialog box, icons, cursors, menu, dan mungkin terdapat section-section tambahan lainnya sesuai dengan keperluan
aplikasi PE tersebut. Struktur setiap section header adalah sebagai berikut:
Offset dari awal sectionheader Ukuran (Bytes) Keterangan
00000000 8 Nama section
00000008 4 Virtualsize, ukuran asli dari
section, pada umumnya informasi ini tidak digunakan.
0000000C 4 Virtualaddress, alamat memori
relatif dari section.
00000010 4 Ukuran raw data, ukuran dari
section setelah dibulatkan.
00000014 4 Pointer ke raw data, menunjuk ke
alamat section dalam file PE
00000018 4 Pointer ke relokasi
0000001C 4 Pointer ke jumlah baris,
00000020 2 Jumlah relokasi
00000022 2 Jumlah baris (debugging)
00000024 4 Karakteristik section
Tabel 3.4 PE Section Header
3.3.8 Teknik Infeksi Virus Pada File Portable Executable
Ada berbagai macam teknik infeksi virus komputer pada suatu file
Portable Executable (PE). Perbedaan utama dari teknik-teknik tersebut terletak
pada bagaimana menempelkan program virus ke file PE yang menjadi korban. Beberapa teknik yang sering dipakai di antaranya adalah sebagai berikut:
1. Penambahan section baru
2. Pembesaran section yang telah ada
3. Populasi pada ruang-ruang kosong antar section.
Pada Tugas akhir ini, untuk menyisipkan program proteksi ke dalam suatu
file PE, digunakan teknik yang sama dengan teknik infeksi virus tersebut dan
penulis memilih metode pembesaran section yang telah ada karena metode ini adalah metode yang lebih mudah diimplementasikan dan membutuhkan algoritma
yang lebih sederhana dan ukuran kode program yang lebih kecil dibanding
metode-metode lainnya.
Langkah-langkah yang perlu dilakukan dalam infeksi file PE dengan
metode pembesaran section yang telah adalah sebagai berikut:
2. Melakukan pemeriksaan apakah file sudah terinfeksi atau belum,
melanjutkan proses hanya jika file belum terinfeksi.
3. Menelusuri section headers, dan menentukan section terakhir dalam file PE tersebut.
4. Menambahkan kode program tepat di akhir section tersebut.
5. Memodifikasi section header untuk menyesuaikan perubahan yang terjadi, yaitu memperbesar ukuran section dan mengubah
karakteristik section agar dapat dieksekusi karena pada umumnya section terakhir pada file PE tidak mengandung program sehingga
karakteristik aslinya tidak membolehkan eksekusi dalam section tersebut.
6. Memodifikasi PE header, yaitu image size untuk menyesuaikan
penambahan ukuran file PE, lalu menghitung ulang checksum dari file PE tersebut, mengubah entry point untuk membelokkan
eksekusi program setelah sebelumnya menyimpan entry point yang asli.
7. Menutup obyek File Mapping dan File Handle.
3.4 Bahasa x86 Assembly
Bahasa Assembly adalah suatu bahasa pemrograman tingkat rendah yang
menggunakan mnemonics, yaitu singkatan kata-kata untuk mempermudah mengingat instruksi-instruksi yang kompleks. Mnemonics biasanya terdiri dari 1-5
biasanya terdiri dari opcode saja atau opcode dan operand, yaitu masukan atau argumen dari sebuah operator. Misalnya:
3 + 6 = 9
Karakter “+” merupakan operator, “3” dan “6” merupakan operand. Contoh
instruksi Assembly yang menggunakan opcode saja tanpa operand:
LEAVE
RET
LODSD
STOSD
CMPSD
SCASD
Contoh instruksi Assembly yang terdiri dari opcode dan operand:
MOV EAX,80808080
ADD EBX,12345678
ROL EDX,1
SUB ECX,EAX
OR EAX,00000003
Bahasa Assembly sangat bergantung pada arsitektur prosesor, oleh karena itu Bahasa Assembly dikategorikan berdasar tipe prosesornya, misalnya x86
Assembly untuk keluarga prosesor Intel x86, 68K Assembly untuk keluarga prosesor Motorola 68000, PowerPC Assembly untuk keluarga prosesor IBM PowerPC, dan lain sebagainya. Penulis menggunakan x86 Assembly pada tugas akhir ini karena
3.4.1 Win32 Assembly
Win32 Assembly adalah pemrograman bahasa Assembly di lingkungan Win32. Pemrograman Win32 Assembly pada dasarnya dibagi menjadi 2 bagian besar yaitu Kernel-level dan User-level.
Pemrograman Win32 Assembly jenis Kernel-level bekerja pada lingkungan
Ring-0 dan biasanya digunakan untuk membuat device driver yang biasanya
digunakan oleh aplikasi-aplikasi Win32 yang membutuhkan akses khusus ke hardware, misalnya partition manager, video card driver, disk defragmentation driver, dan sebagainya. Keuntungan pemrograman pada Kernel-level ini adalah
hak akses langsung ke hardware dengan perintah IN dan OUT. Kelemahannya adalah tidak banyak fungsi-fungsi yang tersedia sehingga sebagian besar fungsi
yang diperlukan harus diimplementasikan sendiri.
Pemrograman Win32 Assembly jenis User-level bekerja pada lingkungan Ring-3 dan biasanya digunakan untuk pemrograman aplikasi-aplikasi Win32 yang
tidak membutuhkan akses khusus ke hardware dan lebih ke arah interaksi dengan
pengguna. Keuntungan pemrograman pada User-level ini ialah lebih banyak
pilihan fungsi, API, dan library yang telah disediakan oleh Windows Kernel ataupun driver dan library yang telah dibuat oleh pihak lain. Kelemahannya adalah tidak dapat menggunakan instruksi-instruksi yang mengakses hardware
secara langsung, seperti IN dan OUT.
Dalam tugas akhir ini, pemrograman Win32 Assembly yang digunakan adalah user-level, sehingga sebagian besar operasi hanya berupa pemanggilan
pemanggilan Win32 API yang telah dijelaskan sebelumnya yaitu stdcall. Tata cara
stdcall dalam memasukkan argumen-argumen ke dalam stack adalah dari kanan
ke kiri, misalnya pada fungsi ini:
int function(int, int, int);
int a, b, c, x;
…
x = function(a, b, c)
Pada Win32 API, pemasukan argumen ke stack adalah dari kanan ke kiri,
sehingga pemanggilan fungsi di atas dalam Win32 Assembly adalah sebagai berikut:
push c
push b
push a
call function
Pada stdcall, fungsi yang dipanggil bertanggungjawab untuk membersihkan stack yang digunakan untuk menyimpan argumen (pada contoh di
atas, argumen adalah a, b, c) sehingga dalam pemrograman Win32 Assembly,
tidak diperlukan proses pembersihan stack setelah pemanggilan suatu fungsi.
3.4.2 Compiler dan Compiling
Compiler yang digunakan untuk mengkompilasi program dalam Tugas Akhir ini adalah Turbo Assembler versi 5.0o. (TASM32.EXE).
Syntax untuk proses compiling:
3.4.3 Linker dan Linking
Linker yang digunakan untuk linking file obyek dan resources dalam Tugas Akhir ini adalah Turbo Link versi 1.6.65.0 (TLINK32.EXE).
Syntax untuk proses linking:
TLINK32 SKRIPSI.OBJ, , , IMPORT32.LIB
BAB III
PERANCANGAN SISTEM
4.1 Perancangan Umum
4.1.1 Diagram UML
• Diagram Use Case
Gambar 4.1 Diagram Use Case
• Diagram Statechart
Diagram ini menggambarkan interaksi form utama dengan pengguna, dan menampilkan keadaan program sesuai dengan
respons terhadap tombol atau pilihan apa yang dipilih oleh
Gambar 4.2 Diagram Statechart
4.1.2 Data Flow Diagram
Sistem proteksi password ini dapat dimodelkan dengan menggunakan
1. Context Diagram
!
"
!
"
Gambar 4.3 Context Diagram
2. Diagram Zero (Level 1)
#
$ $
Gambar 4.4 Diagram Zero (Level 1)
3. Diagram Zero (Level 2)
4. Diagram Zero (Level 3)
% &
' $
# $
% &
' $
$ ( &
)
( &
)
Gambar 4.6 Diagram Zero (Level 3)
4.1.3 Diagram Alir
Tiap proses yang ada di dalam sistem dapat dijelaskan dengan
menggunakan diagram alir sebagai berikut:
a. Inisialisasi kunci enkripsi
Proses ini menunggu masukan berupa password dari pengguna, setiap pengguna selesai memasukkan password, proses ini
tidak, password dianggap baik jika password berukuran minimal 8
karakter, proses tidak akan melanjutkan eksekusi ke proses
selanjutnya selama password yang dimasukkan kurang dari 8 karakter dan atau password tidak sesuai dengan konfirmasi
password.
Gambar 4.7 Diagram Alir Inisialisasi kunci enkripsi
b. Verifikasi aplikasi (enkripsi)
password yang baik. Proses ini membuka file aplikasi yang telah dipilih oleh pengguna dengan metode File Mapping. Selanjutnya
dilanjutkan pemeriksaan struktur dari file tersebut, memeriksa apakah file tersebut adalah Portable Executable .EXE (PE) yang
valid. Setelah dipastikan bahwa file tersebut adalah file PE yang valid, maka proses dilanjutkan dengan memeriksa apakah file tersebut telah disisipi oleh kode proteksi sebelumnya, jika file
tersebut telah terproteksi, proses akan dibatalkan untuk mencegah
) $
$ *#+#
#, &
" $
Gambar 4.8 Diagram Alir Verifikasi Aplikasi (Enkripsi)
c. Enkripsi dan modifikasi aplikasi
Portable Executable .EXE (PE) yang valid dan belum terproteksi. Yang dilakukan pertama kali adalah mencari lokasi code section
yaitu section yang berisi kode program yang asli kemudian melakukan perhitungan hashing MD5 pada isi code section
tersebut, kemudian nilai hash yang dihasilkan disimpan. Selanjutnya menuliskan kode proteksi ke bagian akhir dari file PE,
lalu memodifikasi bagian-bagian section header dan optional
header yang perlu dimodifikasi untuk merefleksikan penambahan ukuran file PE oleh karena penyisipan kode proteksi. Bagian entry
point yang asli disimpan, lalu entry point dirubah untuk membelokkan eksekusi file PE tersebut sedemikian hingga ketika file PE tersebut dieksekusi maka kode proteksi akan dijalan
#
Gambar 4.9 Diagram Alir Enkripsi dan Modifikasi Aplikasi
d. Inisialisasi kunci dekripsi
ingin menghilangkan kode proteksi dari suatu aplikasi Portable Executable .EXE (PE) yang telah diproteksi sebelumnya. Proses
diawali dengan meminta masukan password dari pengguna, di sini
tidak dilakukan pengecekan ukuran password. Proses hashing
MD5 dilakukan pada password yang dimasukkan, nilai hash yang dihasilkan digunakan pada proses selanjutnya.
Gambar 4.10 Diagram Alir Inisialisasi Kunci Dekripsi
e. Verifikasi aplikasi (dekripsi)
adalah file Portable Executable .EXE (PE) yang valid, jika ya proses melakukan pemeriksaan apakah file tersebut benar-benar
telah terproteksi atau tidak, jika tidak maka proses akan dibatalkan
dan file ditutup untuk mengantisipasi kesalahan pengguna yang
"
#
Gambar 4.11 Diagram Alir Verifikasi Aplikasi (Dekripsi)
f. Dekripsi dan modifikasi aplikasi
kunci dekripsi yang didapatkan dari kunci hash MD5 yang berasal
dari password yang dimasukkan oleh pengguna sebelumnya.
Setelah proses dekripsi selesai, dilakukan perhitungan hashing MD5 lagi terhadap code section tersebut lalu membandingkan nilai
hash MD5-nya dengan nilai hash asli yang telah disimpan dalam file tersebut. Apabila kedua nilai hash tersebut tidak sama, itu berarti password yang telah dimasukkan oleh pengguna adalah
password yang salah, sehingga pesan error akan ditampilkan untuk memberitahu pengguna bahwa password yang dimasukkannya
salah, lalu proses akan membatalkan semua perubahan yang terjadi
pada file PE tersebut dan menutupnya. Jika kedua nilai hash tadi sama, berarti pengguna telah memasukkan password yang benar
dan proses dilanjutkan dengan menghapus kode proteksi dari file PE tersebut lalu mengembalikan struktur section header dan
- # &
$
#
" $
. - #
&
"
)
- #
&
4.2 Perancangan Sistem
4.2.1 Perancangan User Interface
Ada dua form utama yang dibuat untuk sistem, yaitu form utama
dan form password dialog box.
a. Form Utama
Form ini adalah form yang ditampilkan ketika program utama
dijalankan. Rancangannya adalah sebagai berikut:
Gambar 4.13 Rancangan Form Utama
Tombol “Browse” digunakan untuk memilih file aplikasi.
Tombol “Install” digunakan untuk memasang sistem proteksi.
Tombol “Remove” digunakan untuk mengembalikan suatu aplikasi
yang terproteksi ke kondisi semula.
Tombol “Help” digunakan untuk menampilkan bantuan singkat
cara menggunakan program.
D:\TMP\NOTEPAD.EXE
*********
*********
Help
About Browse
Tombol “About” digunakan untuk menampilkan informasi
pembuat program.
Tombol “Quit” digunakan untuk menutup program.
Field file menampilkan path dari file yang akan diproses, field ini
bisa diedit secara manual maupun menggunakan tombol “Browse”.
Field password1 digunakan untuk menerima input password dari pengguna.
Field password2 digunakan untuk menerima input konfirmasi password dari pengguna.
b. Form Password Dialog Box
Form ini adalah form yang ditampilkan ketika aplikasi yang
diproteksi dijalankan. Rancangannya adalah sebagai berikut:
Gambar 4.14 Rancangan Password Dialog Box
Field password digunakan untuk menampung input password.
Tombol “OK” digunakan untuk melanjutkan eksekusi ke proses ********
dekripsi aplikasi.
Tombol “Cancel” digunakan untuk membatalkan eksekusi aplikasi
yang diproteksi.
4.2.2 Perancangan Proses Utama
Rancangan form utama seperti yang telah ditampilkan di atas dirancang dengan beberapa aplikasi resource editor, yaitu ResEdit, XN
Resource Editor, dan Resource Hacker. Hasil rancangan tersebut
dikompilasi menjadi resource file (file .RES) kemudian nantinya digabungkan dengan program utama pada proses linking.
Sistem proteksi aplikasi ini melakukan perubahan pada struktur
header Portable Executable guna menyisipkan sistem proteksi ke dalam
aplikasi dan membuat sistem proteksi dieksekusi terlebih dahulu sebelum
aplikasi itu sendiri.
Bagian-bagian header Portable Executable yang perlu
dimodifikasi adalah sebagai berikut:
1. Address of Entry Point
2. Size of Image (Perubahan hanya dilakukan apabila diperlukan) 3. Checksum
4. Bagian-bagian Header dari Section terakhir:
4.2.3 Penggunaan Fungsi-Fungsi API
Fungsi-fungsi API yang digunakan untuk membuat program dikategorikan
dalam beberapa bagian berdasarkan tujuan penggunaannya sebagai berikut:
1. Tampilan Form Utama
a. BeginPaint
Digunakan untuk memulai menggambar pada layar.
b. CopyRect
Digunakan untuk menyalin struktur koordinat posisi window.
c. CreateWindowEx
Digunakan untuk menggambar form utama dan komponen-komponen di dalamnya seperti text, button, dan sebagainya.
d. DialogBoxParam
Digunakan untuk menampilkan dialog box dari resource yang telah dikompilasi sebelumnya.
e. DrawText
Digunakan untuk menggambar text di layar.
f. EndDialog
Digunakan untuk mengakhiri prosedur pemrosesan message dari hasil pemanggilan DialogBoxParam.
g. EndPaint
h. GetClassInfoEx
Digunakan untuk mendapatkan window-window yang telah
dibuat oleh sistem seperti button dan edit box.
i. GetDesktopWindow
Digunakan untuk mendapatkan handle dari desktop.
j. GetWindowRect
Digunakan untuk mendapatkan koordinat posisi window untuk
keperluan menghitung koordinat posisi window.
k. LoadCursor
Digunakan untuk memilih cursor untuk form utama.
l. LoadIcon
Digunakan untuk memilih icon untuk form utama.
m. OffsetRect
Digunakan untuk melakukan perhitungan koordinat posisi
window, khususnya untuk menghitung posisi suatu window agar window tersebut terletak persis di tengah layar.
n. SetDlgItemText
Digunakan untuk merubah text pada komponen dialog box.
o. SetFocus
Digunakan untuk menentukan window mana yang mendapat fokus masukan.
p. SetWindowPos
q. RegisterClassEx
Digunakan untuk membuat window class yang digunakan
untuk membuat window-window yang serupa.
2. Pemrosesan Message pada Form Utama
a. CallWindowProc
Digunakan untuk melakukan pemanggilan terhadap prosedur
window.
b. DefWindowProc
Digunakan untuk melakukan pemanggilan terhadap prosedur
default dari suatu window
c. DispatchMessage
Digunakan untuk melakukan pemrosesan default terhadap
suatu message.
d. GetMessage
Digunakan untuk menunggu message dalam loop utama pada pemrosesan message form utama.
e. PostQuitMessage
Digunakan untuk mengirim pesan ke sistem bahwa window akan ditutup (close).
f. SendMessage
g. TranslateMessage
Digunakan untuk menerjemahkan tombol keyboard ke dalam
karakter.
3. Pemrosesan File untuk Proteksi dan Membuka Proteksi
a. ChecksumMappedFile
Untuk menghitung nilai checksum suatu file Portable Executable karena checksum akan berubah setelah file
dimodifikasi.
b. CreateFile
Digunakan untuk membuka file yang akan diproses.
c. CreateFileMapping
Digunakan untuk membuat file mapping untuk keperluan
modifikasi file.
d. MapViewOfFile
Digunakan untuk membuat file view dari suatu file mapping.
e. SetEndOfFile
Digunakan untuk menentukan akhir dari suatu file.
f. SetFilePointer
Digunakan untuk merubah posisi file pointer.
g. UnmapViewOfFile
4.2.4 Algoritma Enkripsi dan Dekripsi XTEA
Algoritma enkripsi dan dekripsi XTEA yang asli tertulis dalam
bahasa C tersebut dikonversikan ke bahasa Assembly sebagai berikut:
pushad
4.2.5 Algoritma Hashing MD5
Fungsi-fungsi F, G, H, dan I seperti yang telah disebutkan dalam
bab Landasan Teori diimplementasikan ke dalam bahasa Assembly dengan
mewakilkan nilai X, Y, dan Z pada register EBX, ECX, dan EDX adalah
FF: ; eax= ( (b)&(c) | (~b)&(d) )
BAB IV
IMPLEMENTASI SISTEM
5.1 Lingkungan Implementasi
5.1.1 Lingkungan Perangkat Keras
Perangkat keras yang digunakan dalam mengimplementasikan Sistem
Proteksi Aplikasi ini adalah:
a. Prosesor : AMD Athlon64 3000+
b. RAM : 1024 MB
c. Harddisk : 80 GB d. Video Card
e. Sound Card
f. Monitor : 15”, resolusi 1024x768 g. Perangkat Input : Keyboard dan Mouse
5.1.2 Lingkungan Perangkat Lunak
Perangkat lunak yang digunakan dalam mengimplementasikan Sistem
Proteksi Aplikasi ini adalah
a. Sistem Operasi : Windows XP Professional SP 2
c. Resources : ResEd, Microsoft Resource Compiler d. Editor pemrograman : EDIT
e. Program Bantu : Turbo Debugger, OllyDbg, LordPE
5.2 Implementasi User Interface
Dari perancangan sistem, maka dapat dibuat implementasi user interface
dengan resources source code (file .RC) sebagai berikut
#define IDR_MENU1 3003
EXEPROTECTORMAINICON ICON DISCARDABLE "Lock.ico" EXEPROTECTORMAINDIALOG DIALOGEX 13,10,338,178
CONTROL "Install
Protection!",1007,"Button",0x50010000,24,133,80,15,0x000 00004
CONTROL
"About",1008,"Button",0x50010001,234,103,80,15,0x0000000 4
CONTROL "Application to protect/unprotect...",-1,"Button",0x50000007,15,10,309,42,0x00000004 CONTROL "Protection
password...",-1,"Button",0x50000007,15,57,201,99,0x00000004 CONTROL
"",1003,"Edit",0x50010021,24,72,182,15,0x00000204 CONTROL "Verify
"",1004,"Edit",0x50010021,24,109,182,15,0x00000204 CONTROL
"Help",1005,"Button",0x50010000,234,72,80,15,0x00000004 CONTROL "Remove
Protection!",1006,"Button",0x50010000,126,133,80,15,0x00 000004
CONTROL "",IDC_GRP,"Button",0x50000007,226,57,98,99 CONTROL
"",IDC_SBR1,"msctls_statusbar32",0x50000004,0,165,337,11 END
“Lock.ico” ialah nama file icon yang akan digunakan untuk Sistem
Proteksi Aplikasi ini. File .RC ini kemudian di-compile dengan Microsoft
Resource Compiler menjadi suatu file .RES yang kemudian di-link bersama file
.OBJ program utama untuk menjadi file .EXE.
5.3 Implementasi Program
5.3.1 Menampilkan Dialog Box Utama
User Interface yang telah dibuat di atas, akan ditampilkan dengan kode
sebagai berikut:
Push 0
call GetModuleHandleA mov [hInstance],eax push 0
push offset DialogFunc push 0
push offset MainDialog push eax
call DialogBoxParamA
“EXEPROTECTORMAINDIALOG”. Tampilan Dialog Box utama di layar adalah sebagai berikut:
Gambar 5.1 Dialog Box Utama
5.3.2 Prosedur Dialog Box Utama
Prosedur Dialog Box Utama, yaitu DialogFunc, berisi kode untuk menangani masukan dari pengguna (misalnya pengguna mengklik suatu tombol)
ataupun masukan dari sistem (misalnya sistem memberitahu bahwa inisialisasi
dialog box sedang dilakukan). Kode dari prosedur dialog box utama adalah sebagai berikut:
DialogFunc: push ebp mov ebp,esp
mov eax,[ebp+0Ch]
pop ebp ret 0010h
Prosedur tersebut mengantisipasi beberapa window message, yaitu melakukan proses inisialisasi ketika dialog box siap ditampilkan (WM_INITDIALOG), mengantisipasi jika pengguna menutup dialog box
(WM_CLOSE), dan mengantisipasi jika pengguna melakukan sesuatu pada
dialog box (WM_COMMAND), jika ya akan diperiksa apakah pengguna
melakukan suatu klik pada salah satu tombol di dialog box (BN_CLICKED).
5.3.3 Menampilkan Open File Dialog Box
Ini merupakan dialog box yang ditampilkan agar pengguna bisa memilih file yang akan di-protect/unprotect. Kode untuk menampilkan Open File dialog
box ini adalah sebagai berikut:
BrowseFile:
mov edi,offset OPENFILENAME push edi
mov eax,[ebp+08h] mov [edi+04h],eax call GetOpenFileNameA xchg ecx,eax
jecxz Processed
push offset FileNameBuffer push 1000
push dword ptr [ebp+08h] call SetDlgItemTextA
sebelah tombol “Browse…”. Tampilan Open Dialog Box di layar adalah sebagai
berikut:
Gambar 5.2 Open Dialog Box
5.3.4 Menampilkan About Dialog Box
Ini merupakan dialog box yang ditampilkan jika pengguna mengklik tombol “About”. Kode untuk menampilkan About Dialog Box adalah sebagai berikut:
AboutDialog: push 0
push offset ShellOtherStuff push offset ShellApp
push dword ptr [ebp+08h] call ShellAboutA
Dengan ShellOtherStuff mengacu pada pesan yang akan ditampilkan pada
About dialog box, dan ShellApp mengacu pada nama aplikasi. Tampilan About
Dialog Box di layar adalah sebagai berikut:
Gambar 5.3 About Dialog Box
5.3.5 Menampilkan Help Dialog Box
Ini merupakan dialog box yang ditampilkan jika pengguna mengklik tombol “Help”. Kode untuk menampilkan Help Dialog Box adalah sebagai berikut:
HelpFile: push 0
push 0000000Bh ; HELP_FINDER call overHelpFileName
db 'ExeProtector.HLP',0
push dword ptr [ebp+08h] call WinHelpA
jmp Processed
Tampilan Help Dialog Box di layar adalah sebagai berikut:
Gambar 5.4 Help Dialog Box
5.3.6 Membuat Rutin Penghitung Nilai Hash MD5
Rutin ini digunakan untuk kalkulasi nilai hash MD5 dari sebuah string, rutin ini digunakan untuk verifikasi password dan verifikasi hasil dekripsi. Kode
kalkulasi nilai hash MD5 adalah sebagai berikut:
push edi
lea edi,[ebp+buff1]
mov eax,[ebp-0Ch]