• Tidak ada hasil yang ditemukan

SISTEM PROTEKSI APLIKASI WINDOWS MENGGUNAKAN PASSWORD DENGAN BAHASA ASSEMBLY SKRIPSI

N/A
N/A
Protected

Academic year: 2019

Membagikan "SISTEM PROTEKSI APLIKASI WINDOWS MENGGUNAKAN PASSWORD DENGAN BAHASA ASSEMBLY SKRIPSI"

Copied!
129
0
0

Teks penuh

(1)

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

(2)

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

(3)
(4)
(5)
(6)
(7)

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

(8)

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.

(9)

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).

(10)

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.

(11)

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

(12)

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

(13)

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

(14)

TABEL 2.1STANDARD EXEHEADER... 22

TABEL 2.2PEHEADER... 23

TABEL 2.3PEOPTIONAL HEADER... 24

(15)
(16)

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

(17)

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

(18)

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

(19)

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

(20)

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

(21)

BAB VI: PENUTUP

(22)

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

(23)

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.

(24)

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

(25)

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

(26)

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:

(27)

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

(28)

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,

(29)

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

(30)

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

(31)

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

(32)

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:

(33)

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

(34)

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

(35)

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

(36)

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.

(37)

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

(38)

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

(39)

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,

(40)

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,

(41)

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:

(42)

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

(43)

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

(44)

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

(45)

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:

(46)

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

(47)

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

(48)

Gambar 4.2 Diagram Statechart

4.1.2 Data Flow Diagram

Sistem proteksi password ini dapat dimodelkan dengan menggunakan

(49)

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)

(50)

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

(51)

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)

(52)

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

(53)

) $

$ *#+#

#, &

" $

Gambar 4.8 Diagram Alir Verifikasi Aplikasi (Enkripsi)

c. Enkripsi dan modifikasi aplikasi

(54)

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

(55)

#

Gambar 4.9 Diagram Alir Enkripsi dan Modifikasi Aplikasi

d. Inisialisasi kunci dekripsi

(56)

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)

(57)

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

(58)

"

#

Gambar 4.11 Diagram Alir Verifikasi Aplikasi (Dekripsi)

f. Dekripsi dan modifikasi aplikasi

(59)

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

(60)

- # &

$

#

" $

. - #

&

"

)

- #

&

(61)

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

(62)

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 ********

(63)

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:

(64)

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

(65)

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

(66)

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

(67)

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

(68)

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:

(69)

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

(70)

FF: ; eax= ( (b)&(c) | (~b)&(d) )

(71)

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

(72)

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

(73)

"",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

(74)

“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]

(75)
(76)

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

(77)

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

(78)

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

(79)

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:

(80)

push edi

(81)
(82)

lea edi,[ebp+buff1]

(83)
(84)

mov eax,[ebp-0Ch]

Gambar

Gambar 3.1 Operasi Cipher XTEA
Tabel 3.1 Standard EXE Header
Tabel 3.2 PE Header
Tabel 3.4 PE Section Header
+7

Referensi

Dokumen terkait

Penelitian yang dilakukan Wiyono (2008) terhadap para Wajib Pajak yang telah mencoba atau menggunakan e-filling di Indonesia menunjukkan hasil bahwa tidak signifikannya

Katoda ialah elektroda negatif yang merupakan benda kerja yang akan dilapisi. Katoda atau benda kerja dapat memiliki bentuk dan dapat terbuat dari beraneka logam, yang

[r]

Mexico’s General Law of sustainable Forestry Development (2003) defines a community forest enterprise as “a productive organisation of communities or ejidos with permanently

LSP dalam mengembangkan skema sertifikasi KKNI dan Okupasi Nasional harus berdasarkan kemasan KKNI dan / atau Okupasi Nasional yang terdapat didalam Standar Kompetensi Kerja

[r]

Dalam melaksanakan pembinaan, pendampingan, dan pemulihan sebagaimana dimaksud dalam Pasal 2, Pemerintah, pemerintah daerah, lembaga sosial, lembaga pendidikan, lembaga

Makalah Ini Disampaikan dalam Kegiatan Pendidikan dan Pelatihan dengan Tema “Upaya Peningkatan Kompetensi TIK Guru Kimia SMA/MA/SMK di Era Digital Melalui Insert-CT” yang