Kamis, 26 April 2012

SYSTEM PROTEKSI FILE

stmik mercusuar




PROTEKSI FILE BERBASIS. PE
DI SUSUN
OLEH
SUPRAPTO
1055201194

DOSEN
AGUS SUMARYANTO,S Kom

 Stmik.mercusuar bekasiJalan  jati waringin pondok gede bekasiE-mail : mercusuar.ac.id


PEMROGRAMAN  APLIKASI PROTEKSI FILE
Berbasis Pe
Oleh
SUPRAPTO
Nim:1055201194
Departemen Teknik Informatika
Stmik.mercusuar bekasi
Jalan jati waringin pondok gede bekasi
E-mail : mercusuar.ac.id/supraptolampoeng@gmail.com
---
Abstraksi
Dewasa ini banyak sekali program-program aplikasi yang beredar di kalangan pengguna komputer,
baik didistribusikan melalui media compact disk (CD) maupun dapat diambil secara langsung melalui
jaringan internet dengan terlebih dahulu men-dowload-nya. Program-program aplikasi yang beredar tersebut
sebagian besar didistribusikan sebagai produk yang diperdagangkan (shareware), serta sebagian kecil lagi
diberikan secara gratis (freeware). Program aplikasi yang diperdagangkan tersebut pada umumnya memiliki
teknik proteksi yang sangat lemah terhadap teknik–teknik debugging, disassambing serta patching. Teknikteknik
tersebut biasanya didukung oleh berbagai program debugger dan disassambler seperti SoftIce, URSoft
W32Dasm serta program lainnya yang banyak beredaran di internet.
Sehingga tujuan dari Tugas Akhir ini adalah untuk menghasilkan program yang memberikan
berbagai sistim proteksi bagi file executable dari kegiatan debugging, disassambing serta patching
(pengubahan kode) tanpa perlu mengkompilasi ulang program executable tersebut. Teknik yang digunakan
adalah dengan menyisipkan/menginjeksikan sekumpulan rutin fungsi ke dalam badan program yang memiliki
format PE (Portable Executable), yaitu suatu bentuk standarisasi format executable yang berjalan di sistim
operasi Microsoft Windows 95/98 dan Windows NT/2000.
File PE yang telah diinjeksi akan bertambah besar ukurannya sebesar 2 sampai 3 KByte, disertai
dengan pengenkripsian semua data (Raw Section Data) pada direktori seksi (Section Directory). Akan tetapi
kecepatan proses eksekusi dari file PE hasil injeksi tidak mengalami perubahan yang signifikan oleh karena
pertambahan ukuran memori virtual hanya sebesar 2 KByte. Ukuran memori virtual sebesar 2 Kbyte tersebut
diperuntukkan bagi eksekusi program loader beserta rutin-rutin proteksi yang diinjeksikan
---

I PENDAHULUAN
1.1 Latar Belakang
Dewasa ini banyak sekali programprogram
aplikasi yang beredar di kalangan
pengguna komputer, baik didistribusikan melalui
media compact disk (CD) maupun dapat diambil
secara langsung melalui jaringan internet dengan
terlebih dahulu men-dowload-nya. Sebagian besar
program aplikasi tersebut berjalan di sistim operasi
Windows. Hal ini didukung oleh sebagian besar
pengguna komputer di seluruh dunia yang
menggunakan sistim operasi tersebut.
Program-program aplikasi yang beredar
tersebut sebagian besar didistribusikan sebagai
produk yang diperdagangkan (shareware), serta
sebagian lagi diberikan secara gratis (freeware).
Produk – produk shareware tersebut pada
umumnya memiliki pola-pola proteksi berupa :
1. Adanya mekanisme form registrasi
(pendaftaran) dari nama user serta nomor serial
atau password (serial number), dimana hal
tersebut diperoleh setelah pengguna membayar
lisensinya melalui media internet atau
electronic data exchange seperti kartu kredit.
2. Adanya fasilitas pembatasan jangka waktu
pemakaian pada program aplikasi yang bersifat
uji coba (demo version). Sehingga apabila
pengguna telah melewati batas waktu
penggunaan, maka perangkat lunak
(shareware) tersebut tidak dapat berfungsi
lagi. Program shareware akan berfungsi
kembali setelah pengguna membeli lisensi dari
pembuat perangkat lunak tersebut.
3. Adanya mekanisme pembatasan beberapa
fungsi utama program. Sehingga agar program
dapat berfungsi secara penuh, pengguna perlu
meregistrasinya terlebih dahulu.
Pada kenyataannya berbagai sistim
proteksi diatas yang diberikan oleh berbagai
program shareware tersebut dapat dengan mudah
ditembus oleh cracker. Umumnya seorang cracker
menggunakan teknik debugging dan disassambling
untuk menganalisa berbagai sistim proteksi
tersebut. Penganalisaan program dengan
menggunakan teknik debugging dan disassambling
pada umumnya dalam bentuk bahasa assembly 32
bit atau lebih dikenal dengan bahasa pemrograman
Win32Asm. Sayangnya, sebagian besar
pengembang perangkat lunak bekerja pada
lingkungan pemrograman tingkat tinggi (High
Level Language) serta tidak memiliki pengetahuan
yang cukup mengenai sistim proteksi file PE
terhadap segala teknik rekayasa balik (debugging,
disassambling, code editing) yang bekerja dalam
lingkungan bahasa tingkat rendah (assembly).
2
Oleh sebab itu perlu adanya mekanisme
sistem proteksi yang handal yang dapat mencegah
teknik-teknik rekayasa balik yang digunakan oleh
cracker, serta dapat memberikan kemudahan bagi
para pengembang perangkat lunak tanpa perlu
mempelajari segala teknik rekayasa balik yang
dilakukan oleh cracker. Sehingga para pengembang
perangkat lunak (shareware) dapat lebih
memusatkan pada kualitas produknya (shareware),
tanpa perlu dipusingkan dengan sistim proteksi file
executable yang harus diberikan.
Kemudahan inilah yang diberikan oleh
hasil dari Tugas Akhir ini, yaitu dengan
memasukkan atau menginjeksikan secara langsung
sejumlah fungsi proteksi terhadap berbagai teknik
rekayasa balik, pada program executable yang telah
dikompilasi, tanpa perlu melakukan proses
kompilasi ulang program executable tersebut.
Berbagai penelitian tentang sistim proteksi
file PE telah banyak dilakukan oleh sejumlah
pengembang perangkat lunak antara lain, teknik
Dongle[13] yang dikembangkan oleh Rainbow
Technologies (USA) dengan nama produk Sentinel
dan Aladin Software (Israel) dengan nama produk
HASP, teknik MeltIce[13] oleh David Eriksson,
teknik FLEXcrypt[13] yang dibuat oleh Globetrotter
dengan algoritma XOR berputar, serta berbagai
teknik kompresi file PE (EXE Packer[13]) yang
ditunjukkan pada program-program seperti
Shrinker, WWPack32, NeoLite, ASPack.
1.2 Tujuan Penulisan
Tujuan pembuatan Tugas Akhir ini adalah
sebagai berikut:
1. Menjelaskan struktur PE (Portable
Executable) yang berhubungan dengan teknik
penyisipan kode pada file executable dengan
menggunakan bahasa pemrograman MASM
32 (Microsoft Macro Assembler 32).
2. Mengaplikasikan beberapa metoda proteksi
file PE, yaitu diantaranya anti debugger
SoftIce (metoda MeltIce, Bounds Checker ),
anti disassembler W32Dasm (API
Redirection, menghapus Image Import
Descriptors), anti pengubahan kode (teknik
ceksum / Cyclic Redudancy Code check),
yang masing-masing dapat berguna dalam
pencegahan teknik rekayasa balik (reverse
engineering) yang biasa dilakukan cracker.
1.3 Pembatasan Masalah
Dalam Tugas Akhir ini penulis akan
membuat batasan permasalahan agar tidak
menyimpang dari pokok pembahasan yang
sebenarnya. Hal-hal yang dibuat dan dibahas dalam
tugas akhir ini adalah sebagai berikut :
1. Pembahasan struktur Portable Executable (PE)
sebagai format binary dasar bagi program
aplikasi (baik berupa executable / EXE
maupun library / DLL) yang berjalan di atas
sistim operasi MS Windows, khususnya berplatform
Win32.
2. Pembuatan program dalam bahasa Assembly
32 bit dengan menggunakan kompiler MASM
32 (Microsoft Macro Assembler 32) versi 7.
3. Pembahasan teknik – teknik proteksi file
executable dari segala bentuk kegiatan
debugging, disassambling serta patching
(pengubahan kode program).
4. Pengujian program dilakukan pada programprogram
debugger atau disassambler yang
banyak digunakan oleh cracker, yaitu SoftIce
versi 4.05 serta URSoft W32Dasm versi 8.93.
II LANDASAN TEORI
Portable Executable (PE)
Portable Executable (PE) adalah format
binari dasar bagi program aplikasi (baik berupa
executable / .EXE maupun library / .DLL) yang
berjalan di atas sistim operasi Microsoft Windows
95/98 serta Windows NT/2000, khususnya yang
ber-platform Win32 serta didalamnya memiliki
format COFF (Common Object File Format).
COFF adalah bentuk dasar dari file obyek (OBJ file
/ object file) dan executable yang digunakan oleh
beberapa sistim operasi seperti Microsoft, UNIX,
VAX serta VMS. Format PE tersebut merupakan
disain dasar dari produk Microsoft Corp. serta
didukung oleh berbagai perusahaan perangkat
lunak lainnya yang tergabung dalam suatu komite
bernama TIS (Tool Interface Standard) Committee,
yang beranggotakan Microsoft, Intel, Borland,
Watcom, IBM, serta perusahaan lainnya.
Gambar 1.1. Struktur Portable Executable
Format PE tersebut pertama kali
diperkenalkan oleh Microsoft pada sistim operasi
Windows Nt™ versi 3.1. Kata Portable memiliki
arti bahwa format PE tersebut memiliki
implementasi yang sama untuk bermacam-macam
prosesor seperti DEC Alpha AXP, INTEL x86,
3
MIPS, Motorola 68000 series, IBM Power PC.
Dengan kata lain format PE dibuat oleh Microsoft
dengan tujuan utama yaitu multiplatform. Berikut
ini akan dijelaskan secara lengkap struktur
Portable Executable (PE).
2.1.1 MS-DOS Header
(IMAGE_DOS_HEADER)
Konsep dasar MS-DOS telah lama
digunakan pada program-program aplikasi
Windows 16 bit. Pada pemrograman Win32, MSDOS
header hanya digunakan sebagai validasi
bahwa program aplikasi tersebut kompatibel
dengan MS-DOS versi 2.0. Walaupun demikian
program tersebut tidak dapat dijalankan dalam
mode MS-DOS dan akan menampilkan pesan
This program must be run under Win32” atau
This program cannot be run in DOS mode”. MSDOS
header merupakan suatu struktur dari
IMAGE_DOS_HEADER. Berikut ini adalah
bentuk struktur dari IMAGE_DOS_HEADER
dalam format bahasa C :
typedef struct _IMAGE_DOS_HEADER {
USHORT e_magic; // nilai
identitas
USHORT e_cblp; // jumlah BYTE
pada page terakhir file
USHORT e_cp; // jumlah page
pada file
USHORT e_crlc; // relokasi
USHORT e_cparhdr; // ukuran header
pada paragraf
USHORT e_minalloc; // nilai minimum
ekstra paragraf
USHORT e_maxalloc; // nilai
maksimum ekstra paragraf
USHORT e_ss; // inisialisasi
(relatif) nilai SS (Stack Segment)
USHORT e_sp; // inisialisasi
nilai SP (Stack Pointer)
USHORT e_csum; // checksum
USHORT e_ip; // inisialisasi
nilai IP (Index Pointer)
USHORT e_cs; // inisialisasi
(relatif) nilai CS (Code Pointer)
USHORT e_lfarlc; // alamat file
dari tabel relokasi
USHORT e_ovno; // nilai overlay
USHORT e_res[4]; // nilai
reserved 1 WORD
USHORT e_oemid; // identitas OEM
USHORT e_oeminfo; // informasi OEM
USHORT e_res2[10]; // nilai
reserved 1 WORD
LONG e_lfanew; // alamat file
dari header executable baru
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
Baris pertama dari struktur MS-DOS
header diatas diawali oleh suatu nilai identitas
(e_magic) yang selalu bernilai heksadesimal
0x54AD atau dalam bentuk ASCII (American
Standard Code for Information Interchange) yaitu
“MZ” (berukuran 2 BYTE). Baris terakhir dari
struktur MS-DOS header (e_lfanew) adalah suatu
identitas bagi validasi program executable yang
berbasiskan PE dengan nilai berukuran 32 bit (1
DWORD) serta lebih dikenal sebagai
IMAGE_NT_SIGNATURE. Identitas tersebut
dalam bilangan heksadesimal bernilai 0x00004550
atau dalam bentuk ASCII yaitu string “PE..”.
2.1.2 File Header (IMAGE_FILE_HEADER)
File Header merupakan bentuk struktur
dari IMAGE_FILE_HEADER yang berada tepat
setelah IMAGE_NT_SIGNATURE teridentifikasi.
Berikut ini adalah struktur dari
IMAGE_FILE_HEADER :
typedef struct _IMAGE_FILE_HEADER {
USHORT Machine;
USHORT NumberOfSections;
ULONG TimeDateStamp;
ULONG PointerToSymbolTable;
ULONG NumberOfSymbols;
USHORT SizeOfOptionalHeader;
USHORT Characteristics;
}IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;
Keterangan dari masing-masing adalah sebagai
berikut :
a. Machine.
- Berupa bilangan heksadesimal berukuran 16
bit (1 WORD) yang menunjukkan jenis
prosesor yang dipakai oleh program
executable tersebut. Angka ini berhubungan
dengan kompatibilitas program, yaitu di
lingkungan mana program tersebut dapat
dijalankan.
b. NumberOfSections.
- Berupa bilangan heksadesimal berukuran 16
bit (1 WORD) yang merupakan jumlah
daripada Section Header yang terdapat pada
file PE. Jumlah Section Header juga
menyatakan jumlah Section Directory yang
merupakan pusat data sesungguhnya dari
sebuah file PE.
c. TimeDateStamp.
- Bilangan heksadesimal berukuran 32 bit (1
DWORD) yang menyatakan waktu dan
tanggal executable tersebut dihasilkan.
d. PointerToSymbolTable.
- Bilangan heksadesimal berukuran 32 bit (1
DWORD) yang menyimpan informasi
tentang debugging proses.
e. NumberOfSymbols.
- Sama seperti PointerToSymbolTable, yaitu
berupa bilangan heksadesimal berukuran 32
bit (d1 WORD) yang menyimpan informasi
tentang debugging.
f. SizeOfOptionalHeader.
- Bilangan heksadesimal berukuran 16 bit (1
WORD) yang merupakan ukuran dari
IMAGE_OPTIONAL_HEADER.
- Dapat digunakan untuk mengecek apakah
file executable sudah memenuhi struktur PE
yang benar.
g. Characteristics.
- Bilangan heksadesimal berukuran 16 bit (1
WORD) yang terdiri dari serangkaian flag
serta valid apabila digunakan pada object
file dan library.
4
2.1.3 RVA (Relative Virtual Address)
RVA (Relative Virtual Address) adalah
suatu nilai alamat memori virtual dimana nilai
tersebut belum ditambahkan dengan nilai alamat
Image Base jika ingin di-load di memori. Image
Base adalah alamat awal suatu image PE yang akan
dimuat ke dalam memori. Dengan kata lain alamat
linear / VA (Virtual Address) adalah alamat RVA
ditambahkan dengan alamat Image Base.
Sebagai contoh alamat image PE yang dimuatkan
ke dalam ruang alamat memori bernilai 401000h,
serta alamat Image Base sebesar 400000h. Maka
alamat RVA dari PE tersebut adalah sebesar 1000h.
2.1.4 Optional Header
(IMAGE_OPTIONAL_HEADER)
Struktur berikutnya dalam format PE
adalah Optional Header yang didefinisikan sebagai
IMAGE_OPTIONAL_HEADER serta berukuran
224 BYTE. Image tersebut diatas berisi informasi
penting mengenai rancangan logika dari sebuah file
PE yang sangat dibutuhkan oleh loader.
Struktur Optional Header memiliki 31
bagian (field). Akan tetapi tidak semua bagian dari
struktur Optional Header yang dipergunakan.
Hanya beberapa bagian saja yang sangat penting
sedangkan lainnya tidak begitu dibutuhkan. Berikut
ini adalah struktur dari
IMAGE_OPTIONAL_HEADER :
typedef struct _IMAGE_OPTIONAL_HEADER {
//
// Standard fields.
//
USHORT Magic;
UCHAR MajorLinkerVersion;
UCHAR MinorLinkerVersion;
ULONG SizeOfCode;
ULONG SizeOfInitializedData;
ULONG SizeOfUninitializedData;
ULONG AddressOfEntryPoint;
ULONG BaseOfCode;
ULONG BaseOfData;
//
// NT additional fields.
//
ULONG ImageBase;
ULONG SectionAlignment;
ULONG FileAlignment;
USHORT MajorOperatingSystemVersion;
USHORT MinorOperatingSystemVersion;
USHORT MajorImageVersion;
USHORT MinorImageVersion;
USHORT MajorSubsystemVersion;
USHORT MinorSubsystemVersion;
ULONG Win32VersionValue;
ULONG SizeOfImage;
ULONG SizeOfHeaders;
ULONG CheckSum;
USHORT Subsystem;
USHORT DllCharacteristics;
ULONG SizeOfStackReserve;
ULONG SizeOfStackCommit;
ULONG SizeOfHeapReserve;
ULONG SizeOfHeapCommit;
ULONG LoaderFlags;
ULONG NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY
DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTR
IES];
} IMAGE_OPTIONAL_HEADER,
*PIMAGE_OPTIONAL_HEADER;
Tampak bahwa pada struktur diatas
terdapat dua sub kelompok field, yaitu kelompok
Standard field dan kelompok NT additional field.
Standard field biasanya merupakan file obyek
(object file) yang berguna untuk memenuhi struktur
COFF (Common Object File Format), serta
biasanya banyak digunakan oleh file-file
executable UNIX. Standard field berisi informasi
yang sangat penting bagi file PE, yaitu bagaimana
file PE tersebut di-load serta berjalan di memori.
Sedangkan NT additional field berisi informasi
yang dibutuhkan oleh linker (penggabung kode)
dan loader (pembangkit kode) pada Windows NT.
2.1.5 Direktori Seksi (Section Directory)
Direktori seksi adalah bagian dari PE yang
merupakan sumber data program sesungguhnya,
serta berada setelah Optional Header. Direktori
seksi terdiri dari dua bagian utama, yaitu sebuah
deskripsi seksi (IMAGE_SECTION_HEADER)
serta bagian data (Raw Section Data). Deskripsi
seksi (IMAGE_SECTION_HEADER) untuk
berikutnya dikenal sebagai Section Header.
Seperti yang sudah dijelaskan sebelumnya
pada File Header bahwa jumlah daripada
keseluruhan seksi disimpan dalam field
NumberOfSections yang mengacu pada jumlah
daripada Section Header. Struktur bagian daripada
Section Header adalah sebagai berikut :
#define IMAGE_SIZEOF_SHORT_NAME 8
typedef struct _IMAGE_SECTION_HEADER {
UCHAR
Name[IMAGE_SIZEOF_SHORT_NAME];
union {
ULONG PhysicalAddress;
ULONG VirtualSize;
} Misc;
ULONG VirtualAddress;
ULONG SizeOfRawData;
ULONG PointerToRawData;
ULONG PointerToRelocations;
ULONG PointerToLinenumbers;
USHORT NumberOfRelocations;
USHORT NumberOfLinenumbers;
ULONG Characteristics;
} IMAGE_SECTION_HEADER,
*PIMAGE_SECTION_HEADER;
Penjelasan untuk masing-masing bagian adalah
sebagai berikut :
1. Name.
- Merupakan larik dari
IMAGE_SIZEOF_SHORT_NAME yang
menghasilkan sebuah nama seksi (Section
Name) dalam format string ASCII. String
tersebut berukuran 8 Byte serta tidak diakhiri
oleh 00h (zero / null terminated). Apabila lebih
dari 8 Karakter maka nama seksi tersebut akan
terpotong. Format Section Name pada
umumnya diawali dengan tanda titik seperti
“.idata, “.text”, “.data”, “.bss”. Akan tetapi
tidak semua nama seksi diawali oleh tanda
titik, contoh “CODE”, “IAT”.
2. PhysicalAddress, Virt

kegiatan debugging, disassambing serta

patching
(pengubahan kode) tanpa perlu mengkompilasi ulang program executable tersebut. Teknik yang digunakan
adalah dengan menyisipkan/menginjeksikan sekumpulan rutin fungsi ke dalam badan program yang memiliki
format PE (Portable Executable), yaitu suatu bentuk standarisasi format executable yang berjalan di sistim
operasi Microsoft Windows 95/98 dan Windows NT/2000.
File PE yang telah diinjeksi akan bertambah besar ukurannya sebesar 2 sampai 3 KByte, disertai
dengan pengenkripsian semua data (Raw Section Data) pada direktori seksi (Section Directory). Akan tetapi
kecepatan proses eksekusi dari file PE hasil injeksi tidak mengalami perubahan yang signifikan oleh karena
pertambahan ukuran memori virtual hanya sebesar 2 KByte. Ukuran memori virtual sebesar 2 Kbyte tersebut
diperuntukkan bagi eksekusi program loader beserta rutin-rutin proteksi yang diinjeksikan 

8. Referensi
[1] http://en.wikipedia.org/wiki/Phishing, diakses pada tanggal  26 maret 2012 pukul 10.00
[2] http://www.antiphishing.org/, diakses pada tanggal 26 maret 2012 12.00
[3] http://www.itpapers.com/whitepaper.aspx?scname=Digital+Signatures&docid=130185, diakses
pada tanggal 29 maret 2012 pukul 18.00

Tidak ada komentar:

Posting Komentar