Teknik Elektro LinksBarrier-Gate & Turnstile Interface, Thermostat, Relay Driver, Microcontroler Board

Eksperimen Proteksi Software Menggunakan Modul USB-KEY

Bagi seorang pengembang software, masalah proteksi adalah hal yang sangat penting bagi kelangsungan usaha. Software berbayar tanpa proteksi akan dengan mudah digandakan oleh pihak-pihak yang tidak bertanggung-jawab. Pengembang yang sudah susah-payah menciptakan software aplikasi akan sangat dirugikan.

Pada kesempatan ini saya akan berbagi ide tentang proteksi software atau sistem menggunakan sebuah piranti USB yang saya sebut sebagai USB-KEY.

USB-KEY

USB-KEY adalah sebuah sistem mikrokontroler yang telah ditanami program implementasi protokol komunikasi USB dan menyimpan data-data seperti USER_NAME, USER_ID, dan USER_PASSWORD. Tentunya tidak hanya data-data tersebut yang dapat disimpan dalam sebuah USB Dongle atau USB Key. Ketiga data tersebut hanyalah contoh yang saya gunakan pada eksperimen ini.

Rangkaian yang saya gunakan pada eksperimen ini adalah rangkaian yang sederhana menggunakan mikrokontroler AVR ATtiny2313 yang dilengkapi dengan rangkaian interface port USB dan sebuah LED berwarna merah yang berfungsi sebagai perwakilan output yang dikontrol oleh software melalui port USB.

usbdongle

Skenario Program

Ketika program aplikasi dijalankan, pertama-tama program akan mendeteksi adanya piranti USB yang dalam eksperimen ini adalah rangkaian USB-KEY. Jika piranti ini tidak ditemukan, maka program akan menampilkan pesan seperti pada screenshot berikut ini.

usbkey_locked

Jika program menemukan piranti yang dimaksud, yakni USB-KEY, maka program akan meminta user untuk memasukkan password. Sesaat setelah user mengetikkan password dan meng-klik button OK atau menekan ENTER, maka program akan meminta data USER_PASSWORD dari USB-KEY dan membandingkannya dengan password yang dimasukkan oleh user.

usbkey_password

Jika password salah, maka program akan menampilkan pesan kesalahan dan program pun diakhiri (exit). Jika password benar, maka program akan menampilkan form tampilan utama program aplikasi. Program akan meminta data USER_NAME dan USER_ID dan menampilkannya pada form utama program.

Sekedar sneakpeek saja, berikut ini adalah penggalan program yang berfungsi memroses dialog Password Entry.

/* 
  PasswordDlgProc 
  Fungsi pemroses pesan Password Entry Dialog 
*/ 
static INT_PTR CALLBACK PasswordDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
  char pwd[10]; 
  HWND hwndEdit; 
  int nBytes; 
  char buffer[10];
switch (uMsg) 
{ 
    case WM_SHOWWINDOW: 
      hwndEdit = GetDlgItem(hwndDlg, 4002); 
      SetFocus(hwndEdit); 
      return TRUE;
   case WM_COMMAND: 
      switch(GET_WM_COMMAND_ID(wParam, lParam)) 
      { 
        case IDOK: 
          nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, 
            PSCMD_GETPASSWORD, 0, 0, (char *)buffer, sizeof(buffer), 5000);
          GetDlgItemText(hwndDlg, 4002, pwd, 10);
          if (strcmp(pwd, buffer)!=0) 
          { 
            MessageBox(hwndDlg, "Sorry, wrong password!", "Error!", MB_ICONERROR); 
            exit(1); 
          } 
          EndDialog(hwndDlg, 0); 
          return TRUE;
    case IDCANCEL: 
          exit(1); 
          return TRUE; 
      } 
  } 
  return FALSE; 
}

Kita juga dapat mengubah skenario di atas sehingga user tidak hanya diharuskan untuk memasukkan password saja, akan tetapi juga diharuskan memasukkan user-id.

usbkey_apprun1

Gambar di atas ini adalah form utama program aplikasi yang saya buat pada eksperimen ini. Program menyediakan 2 buah button yakni START ENGINE danSTOP ENGINE. Button START ENGINE berfungsi untukmenyalakan LED, sedangkan button STOP ENGINE berfungsi untuk mematikan LED.

USB-KEY juga dapat digunakan pada aplikasi sistem check-log karyawan. Aplikasi lainnya adalah sebagai dongle software aplikasi yang selain menyimpan data USER_NAME, USER_ID, dan USER_PASSWORD, piranti ini juga memiliki fungsi sebagai pengacak data. Karena pengacakan data dilakukan oleh USB-KEY secara eksternal, maka tentunya akan lebih aman jika dibandingkan yang hanya menggunakan software saja. Dan tentunya masih banyak lagi aplikasi-aplikasi yang dapat memanfaatkan teknologi ini sebagai pendukung sistemnya.

Library Dan Kompiler

Pada eksperimen ini saya menggunakan V-USB untuk implementasi protokol USB pada mikrokontroler ATtiny2313, libusb-win32 sebagai driver piranti USB dan library pemrograman USB, serta freeware Pelles C sebagai IDE dan kompiler bahasa C untuk program contoh aplikasi.

Dari hasil eksperimen yang telah saya lakukan, kita dapat meningkatkan proteksi software aplikasi dengan menambahkan unit USB-KEY.

Nah, sekian dulu mengenai ide proteksi software atau sistem menggunakan piranti USB-KEY. Jika Anda tertarik untuk menggunakan USB-KEY sebagai salah satu benteng proteksi software Anda dari pembajakan, silakan menghubungi saya untuk berdiskusi lebih lanjut.

Terima kasih sudah membaca dan selamat berkarya.

Add a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>