Senin, 19 Oktober 2015

Pemeliharaan perangkat Lunak computer

BAB 1
PENDAHULUAN
A.   Reverse Engineering

Reverse Engineering adalah adalah suatu teknik atau proses untuk menemukan prinsip-prinsip teknologi dari suatu perangkat, obyek, atau sistem melalui suatu analisis terhadap struktur, fungsi dan operasi. Ini sering melibatkan pengambilan terhadap sesuatu, misalnya dalam hal ini adalah perangkat lunak untuk dilakukan analisis, penelitian untuk berbagi tujuan seperti menciptakan sesuatu yang baru tanpa mengubah yang aslinya atau untuk melakukan pengembangan dan penyempurnaan terhadap sesuatu yang sudah ada.

Dalam pembahasan kita akan lebih banyak membahas reverse engineering pada bidang IT atau teknologi informasi. Reverse engineering pada perangkat lunak dilakukan untuk berbagi tujuan diantaranya adalah untuk mempelajari bagaimana program bekerja dan melakukan operasi tertentu, untuk kemudian menciptakan program baru yang serupa dengan aslinya, untuk meningkatkan kinerja suatu program dengan memperbaiki bug atau mengidentifikasi konten berbahaya dalam sebuah program. Reverse engineering juga bertujuan untuk memodifikasi suatu program agar bisa digunakan di hardware yang lain. Reverse engineering juga dilakukan karena tidak semua program dilengkapi dengan dokumentasi yang baik. Oleh karena itu, penelusuran source code dari sebuah program merupakan bagian dari reverse engineering. Tetapi perlu diketahui, reverse engineering dengan tujuan untuk menyalin atau men-duplicate sebuah program dapat melanggar hak cipta. Dalam beberapa kasus, beberapa perangkat lunak yang berlisensi melarang adanya reverse engineering.
Dalam melakukan reverse engineering, dapat menggunakan alat bantu atau tools untuk membongkar sebuah program. Tools ini dapat membantu untuk menampilkan binary dari sebuah program dalam format heksadesimal yang tentunya lebih mudah dimengerti dan mudah dibaca.






Beberapa Tools yang di gunakan dalam reverse engineering

1.1  Disassembler/Debuggers
Program disassembler akan mentranslasikan binary program ke bahasa assembly. Bahasa Assembly yang dihasilkan sudah dapat dibaca oleh user tetapi tidak semudah source code aslinya.
Sedangkan Debugger digunakan untuk memantau proses eksekusi sebuah aplikasi yang dapat dihentikan pada kondisi dan status tertentu, untuk lebih jelasnya bisa dilihat dari skema cara kerja dari disassembler dan debugger dibawah ini
Description: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA1bnv8zB_TbiGKyvnBd-idjU8H-yrWiiJOUV2Mo_VeX7bvvEIl182xI8_Frv1kvi-WVb4qPr9bvoauJRqqtw4ecT0jkK4IU2hKMl7pNerz8hQXKFqC0eA0YGti0D50_a6LgNELbZzR9sD/s1600/DisassemblerDebuggerSchemes.gif
  
untuk software software yang biasanya digunakan sebagai debugger atau disassembler yaitu
-Debugger: SoftICE, OllyDbg, W32Dasm
-Disassembler: IDA Pro, W32Dasm, Phoenix Disassembler / DSM, Studio
1.2  Hex Editor
Hex Editor adalah Program yang memfasilitasi pengubahan sebuah binary program melalui representasi hexadesimal suata data binary, selain itu Hex editor juga dapat menampilkan bentuk ASCII dan Unicode dari suatu file binary, untuk lebih jelasnya bisa dilihat pada skema
Description: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk60LUHVq-bLvNiO_RMafxrSyj2B0WaH1nh7Re4UnFpO2_8RO4q8aTr8a6DkQwSTC161EGdIeh00OZp4cz-GjuDKzjnTA_UH7hwnOeGW7-j4aYY4ujIa0gBU1NteH4_OVN8bOS4I1fjmIK/s1600/HexEditorScheme.gif



Software yang biasa digunakan sebagai Hex Editor diantaranya :
WinHex, Hex Workshop, Hiew (Hacker View), HEdit
1.3  Decompiler
Dari namanya pun sudah jelas kegunaanya, yaitu guna Me DeCompile program, DeCompile sendiri adalah kegiatan dimana kita merubah executable program ke source code dari program tersebut. untuk lebih jelasnya bisa dilihat skema kerja dari decompiler
Description: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir8D8JO_aA8EmYRSPBYdxQBnuhiw8tjCgHEP04BnmVVO3RcUUisHTfrKP7k5soNLQwGdm1BlwDIBBmIVhMGHqYQzIEjvYfKPjaK6bi7EY20jSt2c5Zpx5Wy9mtkiCTQZsCPhJQAF8017Ue/s1600/decompilerSchemes.gif

contoh beberapa software yang bisa digunakan sebagai decompiler :
- C Decompiler : DCC, REC
- C# Decompiler : Salamander
- Java Decompiler: DJ 

B. Aplikasi yang berhubungan dan berguna untuk kegiatan reverse engineering

Contoh aplikasi tersebut yaitu seperti code obfuscators, PE editors, memory dumpers dan unpacker, ke 4 program ini membantu kegiatan reverse engineering menjadi lebih ringan dan praktis, sehingga dapat mendapatkan pekerjaan dengan hasil yang efektif dan waktu yang efisien.
Reverse engineering adalah suatu proses  menganalisa sistem dari suatu subjek ( dalam hal ini software ) untuk mempelajari cara kerja, teknik apa yang digunakan, dll. Sehingga bisa mencapai target yang di inginkan oleh teknisi.

BAB II
TEORI
A.   Forward engineering
Reverse Engineering sebenarnya merupakan konsep yang telah lama, yakni sebuah proses analisis suatu sistem guna mendapatkan informasi mengenai identifikasi sistem, komponen sistem, dsb yang goalnya adalah menyajikan informasi tsb ke dalam bentuk abstraksi yang lebih tinggi, yakni lebih dimengerti oleh manusia. Nah  yang menjadi menarik adalah ketika beberapa litelatur menyajikan teknik reverse engineering dalam konsep masing-masing dengan segala kelebihan dan kekuranganya. artikel ini saya tulis bersumber pada papper Chih-Wei Lu tentang reverse engineering. paper ini menggambarkan proses reverse engineering dalam empat tahapan yakni : diawali proses context parsing, componenn analyzing, design recovery dan design recontructing, dimana masing-masing proses memiliki fungsi dan tujuan yang nantinya akan berkesinambungan dengan proses selanjutnya. agar lebih jelasnya silahkan baca artikel ini.
Software System telah menjadi bisnis penting bagi banyak perusahaan. Sekarang perusahaan mengandalkan lebih pada layanan yang diberikan oleh perangkat lunak, dan setiap kegagalan layanan ini akan memiliki konsekuensi serius pada operasi bisnis sehari-hari. Sistem ini biasanya besar dan kompleks, serta telah berevolusi selama puluhan tahun. Sehingga system yang demikian dikenal sebagai sistem warisan (Legacy System).
Sistem warisan perlu dipelihara dan dikembangkan karena berbagai faktor, termasuk kesalahan, koreksi, perubahan persyaratan, perubahan aturan bisnis, struktur organisasi yang berubah, dsb. masalah mendasar dalam mempertahankan dan mengembangkan sistem warisan adalah untuk memahami subjek sistem. Namun, sebagian besar sistem warisan tidak didokumentasikan dengan baik. Sebagai sistem yang telah lama dikembangkan kebutuhan untuk dokumentasi yang sesuai dan pemahaman desain asli sangat penting sehingga modifikasi perangkat lunak dapat dibuat dengan benar.
Reverse engineering adalah proses menganalisis sistem subjek untuk mengidentifikasi sistem, komponen dan antar hubungan mereka, dan menciptakan representasi sistem dalam bentuk lain atau tingkat abstrasksi yang lebih tinggi. Reverse engineering melibatkan identifikasi atau recovery dari kebutuhan program dan / atau spesifikasi desain yang dapat membantu dalam memahami dan memodifikasi program.
 Tujuan utama adalah untuk menemukan fitur yang mendasari sistem, termasuk persyaratan, spesifikasi, desain dan implementasi. Dengan kata lain, reverse engineering itu ditujukan untuk memulihkan dan mencatat informasi tingkat tinggi tentang sistem, termasuk:
·   Struktur sistem - komponen dan antar hubungan mereka, seperti yang diungkapkan oleh antarmuka;
1.      fungsionalitas - operasi apa yang dilakukan pada komponen apa;
perilaku dinamis - Sistem pemahaman tentang bagaimana input diubah menjadi output;
2.      Alasan - desain melibatkan pengambilan keputusan antara sejumlah alternatif pada  setiap langkah desain
3.      konstruksi - modul, dokumentasi, test suite, dll.

Beberapa tujuan untuk melakukan reverse engineering dapat diklasifikasikan ke dalam beberapa klasifikasi
masalah kualitas (quality issues), seperti penyederhanaan perangkat lunak yang rumit, meningkatkan kualitas perangkat lunak yang mengandung kesalahan, penghapusan efek samping dari perangkat lunak, dll.
masalah pengelolaan (management issues), seperti membuat standar pemrograman, memfasilitasi teknik manajemen pemeliharaan perangkat lunak dengan lebih baik, dan sebagainya.
Masalah teknis (technical issues), seperti memungkinkan perubahan dalam perangkat lunak, menemukan dan merekam desain sistem,  menemukan dan merepresentasikan model bisnis yang ada dalam perangkat lunak, dll.

Tanpa dukungan Sarana yang tepat, biaya reverse engineering sistem perangkat lunak sangat tinggi. Tools Reverse engineering menyediakan mekanisme untuk ekstraksi data, Penciptaan model, visualisasi, dan penjelasan untuk membantu pemrogram untuk memahami sebuah sistem software.


Karakteristik / Masalah
Reverse Engineering adalah sebuah proses yang merupakan kebalikan dari Forward Engineering, untuk memahami kegiatan reverse engineering terlebih dahulu kita harus memahami tentang forward engineering, sebagai contoh forward engineering dapat kita lihat pada model pengembangan waterfall dimana pengembangan perangkat lunak disusun melalui proses analisa persyaratan, arsitektur desain, desain system, implementasi system.
Selama proses pengembangan system kemungkinan dapat terjadi bahwa suatu informasi dalam desain yang mungkin tidak didukung oleh bahasa pemrograman tertentu menjadi hilang dalam arti system menjadi kehilangan informasi tertentu. kesulitan utama dalam pemeliharaan dan evolusi sistem warisan adalah memulihkan informasi yang hilang
tersebut.
Forward Engineering selalu diakhiri dengan sebuah produk sedangkan reverse engineering dimulai dengan produk dalam hal ini perangkat lunak seperti system warisan (legacy system). Suatu system perlu di reverse kembali ketika sistem tidak dapat meminimalkan biaya, tidak mampu mengakomodasi perubahan fungsional sehingga apabila tidak segera diperbaiki akan menimbulkan resiko baru, atau karena kebutuhan lingkungan. Kita melakukan reverse engineering dapat dikarenakan beberapa hal sebagai berikut :
System Understanding (pemahaman thd system)
Basis for maintenance and redevelopment (dasar untuk pemeliharaan dan pembangunan kembali)
Reuse of component (penggunaan kembali komponen)
Yang pasti bahwa titik awal untuk reverse engineering adalah untuk memahami kode, berlawanan dengan proses pengembangan dan perbaikan, reverse engineering mencoba menelusuri kembali rute dan menemukan data asli yang telah hilang selama implementasi. Source code dan dokumentasi system yang ada merupakan sumber lain yang dapat memberikan informasi desain penting. Baru baru ini notasi visual seperti kelas diagram dalam UML merupakan representasi dokumen selama pengembangan sistem menggunakan teknologi yang lebiah modern seperti paradigma berorientasi objek atau pemrograman berorientasi objek. Namun sebagian besar system warisan sangat miskin dokumentasi atau memiliki dokumentasi yang kurang lengkap, jika tidak ada maka reverse engineering akan memakan waktu. Beberapa hal yang menyebabkan reverse engineering dari system warisan sangat sulit antaralain : pemrograman yang tidak konsisten, kurangnya staff yang mengerti computer atau bahasa pemrograman, dokumentasi yang kurang memadahi atau out of date, data  tidak akurat atau tidak lengkap
Factor yang mempengaruhi biaya reverse engineering antaralain :
1.      kualitas perangkat lunak yang akan di reverse
2.      ketersediaan alat dan dukungan
3.      apabila diperlukan konversi data
reverse engineering memungkinkan kita untuk mengidentifikasi komponen sistem dan menciptakan representasi ke tingkat yang lebih tinggi dari system. Kita bisa melihat hal ini lebih baik dengan menggambarkan proses yang digunakan dalam reverse engineering.

2.1 Proses Reverse Engineering
Dalam bagian ini akan dibahas tentang proses reverse engineering dan kegiatan dari setiap tahapan proses. Proses reverse engineering dapat dibagi menjadi empat fase : Context Parsing, Component Analyzing, Design Recovering dan Design Reconstructing.
2.2 Context Parsing
Tahap pertama adalah analisis source code, ekstrak sintaksis dan semantik informasi program. Dalam tahap ini teknik yang dilakukan adalah mem-parsing kode sumber dan kemudian mengubah kode ke representasi yang lebih terstruktur sebagai bentuk peralihan misalkan pengubahan source code dari bahasa mesin ke bahasa tingkat rendah.




2.3 Component Analyzing Phase
Fase ini mengambil struktur intermediate program untuk memperlihatkan artifak komponen. Artifak termasuk bagan struktur, variabel / attribut, fungsi informasi, program slice, grafik, data flow, dan kontrol dependensi. Banyak peneliti telah menyediakan pendekatan dan tools untuk berhasil memperoleh data flow diagram, diagram alir / flowchart dan informasi terkait selama tahap ini. Namun informasi tingkat tinggi yang tertanam pada source code aslinya tidak mudah untuk ditemukan. Sebagian besar teknologi reverse engineering menyediakan alat atau metodologi yang sistematis untuk mendukung tahap ini.

2.4 Design and Recovering Phase
Salah satu hambatan utama untuk membangun tools otomatis untuk ekstraksi desain dan domain pengetahuan dari program adalah pengetahuan yang implisit dari penyebaran informasi di seluruh kode. Pendek kata mengekstraksi original requirement dan atau design knowledge dari source code selalu menjadi masalah yang sulit. Dan biasanya untuk hal ini ditangani dalam domain para ahli. Saat ini dengan teknik yang menggabungkan struktural dan representasi, penganalisa dapat menyimpulkan beberapa informasi dalam level yang lebih tinggi,

2.5 Design Reconstructing phase
Pada tahap ini, model sistem dan spesifikasi desain yang diperoleh dari fase terakhir dapat dilihat lebih jauh dan terpadu untuk merekonstruksi pandangan yang tepat dari model desain. Desain model tidak hanya menawarkan fungsi dan perilaku sistem, tetapi juga arsitektur yang benar yang dapat terdistorsi dalam implementasi. Dengan struktur desain model yang baik, pemeliharaan perangkat lunak yang efektif dan pengembangan ulang perangkat lunak dapat diproses.

2.6 Teknik dan Tools
Bagian selanjutnya  akan membahas beberapa teknik dan peralatan / tools yang digunakan untuk melaksanakan proses reverse engineering. Tema-tema tersebut akan dibagi dalam tiga bagian : 1. meyajikan skenario dalam penelitian dan teknik reverse engineering, 2. memilih dan mengenalkan aplikasi atau tools yang akan digunakan, 3. mengindikasikan kemungkinan penelitian di masa mendatang yang akan menghasilkan teknik baru dan tools untuk reverse engineering.




Tidak ada komentar:

Posting Komentar