Saya memiliki beberapa pertanyaan tidak bersalah / pemula:
- Apa gunanya reverse engineering?
- Sebagai seorang programmer, haruskah saya mempelajari seni teknik reverse?
- Apa manfaatnya bagi seorang programmer yang berpengalaman dengannya?
c
assembly
low-level
reverse-engineering
kaus kaki
sumber
sumber
Jawaban:
Reverse Engineering terutama baik untuk cracking dan hacking (menghapus perlindungan nomor seri atau kata sandi), tetapi juga untuk memahami virus atau keajaiban yang dapat dilakukan oleh perangkat lunak lain. Terkadang ini adalah keterampilan yang berguna untuk menemukan bug dalam program yang Anda tidak punya sumbernya dan untuk menambalnya.
Ya, coba pelajari assembler dan gunakan debugger yang layak. Ini akan membuat Anda menjadi pengembang yang lebih baik dengan memahami hal-hal di tingkat yang lebih rendah, yang lebih dekat dengan logam.
Anda akan menjadi peretas / cracker yang baik. Anda dapat bekerja untuk produsen anti virus lainnya. Sebagai contoh pribadi: Saya pernah membalikkan rekayasa perangkat lunak untuk melacak kesalahan yang terjadi saat membuat koneksi oracle. Tidak ada orang lain yang bisa menyelesaikan masalah ini, jadi saya mendapat ketenaran.
Selain itu, saya juga ingin mengutip komentar johannes @ , karena ia memang benar:
sumber
Saya suka jawaban Falcon , tetapi saya ingin menambahkan bahwa pada beberapa aplikasi bisnis dunia lama yang membosankan, rekayasa balik dapat membuat Anda keluar dari beberapa masalah buruk.
Di tempat kerja kita sering melakukannya ketika melakukan integrasi data dengan sistem pihak ke-3 yang tidak memiliki pemeliharaan baru, sehingga kita dapat mengetahui di mana seharusnya atau tidak boleh rusak.
Kami juga menggunakan reverse engineer untuk memeriksa kualitas kode (dengan batasan tertentu, tentu saja) pada komponen pihak ketiga yang kami beli, jika kode sumber tidak termasuk.
Poin saya yang sebenarnya adalah: rekayasa balik tidak terikat pada satu teknologi atau bahasa, tetapi merupakan proses di mana Anda mempelajari bagian dalam "kotak hitam" . Jika Anda memiliki kode yang Anda andalkan, tetapi Anda tidak atau tidak percaya, Anda harus mengintipnya dan melihat apa yang dilakukan kode itu.
sumber
Ada juga sisi membosankan drop-dead dari rekayasa terbalik. Ini adalah saat perusahaan tempat Anda memiliki sedikit kode atau program yang masih digunakan, tetapi tidak ada yang mengklaim tahu tentang hal itu. Jadi Anda memeriksanya, mendokumentasikannya, menulis tes, dan semua hal-hal teknik yang harus dilakukan sebelum proyek dimulai. Anda melakukan ini untuk perangkat lunak yang sudah ditulis, maka "reverse engineering".
Ini jauh lebih mudah ketika Anda memiliki kode, tetapi masih secara teknis rekayasa terbalik. Ini adalah salah satu istilah yang banyak muncul dalam pertemuan bisnis ketika mereka berbicara tentang proyek-proyek warisan.
sumber
Hanya untuk memperluas nilai bisnis reverse engineering - lebih dari setengah pelanggan baru yang kami temui memiliki sistem / aplikasi yang sudah ada (tidak selalu dalam produksi, ingatkan Anda), tetapi di mana hubungan dengan vendor pengembangan perangkat lunak sebelumnya mengalami kegagalan.
Dalam sekitar 30% dari kasus pelanggan sama sekali tidak mendapatkan sumber untuk sistem mereka, dan dalam banyak kasus, banyak dari proses bisnis nyata, aturan dan pengetahuan terkunci dalam kode.
Dan dalam beberapa kasus di mana vendor sebelumnya telah menjadi sangat jahat, mengaburkan binari, mengunci kode dll, untuk menjerat pelanggan tanpa batas waktu.
Jadi untuk menjawab pertanyaan Anda, reverse engineering sering kali merupakan titik awal untuk keterlibatan baru dengan pelanggan yang agak putus asa (dan terbakar), dan itu bisa menjadi faktor sukses 'kritis bisnis' untuk mengekstraksi pengetahuan yang terlupakan dari kode yang ada.
sumber
Saya berpendapat bahwa skill-set untuk reverse-engineering dan skill-set untuk debugging persis sama - jika Anda seorang debugger yang fantastis, Anda juga adalah reverse-engineer yang fantastis, dan sebaliknya.
sumber
Kadang-kadang digunakan untuk mendapatkan beberapa bagian / perangkat lunak untuk beroperasi sejauh yang saya mengerti. Beberapa antarmuka aneh, bug dalam implementasi, dll.
Tapi dari apa yang saya pahami, ini adalah subjek yang sangat licin, jadi, hukum pengembangan perangkat lunak yang sudah rumit dibawa ke ekstrem dengan rekayasa balik.
sumber
Nah, dengan reverse engineering Anda dapat menggunakan kembali kode yang meminimalkan pekerjaan Anda. Misalnya, di Symfony2, Anda dapat mengonversi database yang dibuat dari MySQL normal dan mengonversinya ke format doktrin dan ini adalah proses rekayasa balik yang dimungkinkan di Symfony .... dan dengan rekayasa terbalik, Anda dapat melihat kode katakanlah 'dalam 2D'
sumber
Saya hanya memberikan contoh dunia nyata dari pengalaman saya.
Setelah perusahaan kami mengambil alih proyek dari perusahaan lain. Sekitar setengah tahun dalam proyek kami menyadari bahwa sub proyek tanpa kode. Ketika kami meminta mantan perusahaan untuk mengirimkan kode, mereka dengan sopan menjawab bahwa mereka tidak dapat menemukan kode untuk sub proyek. Kami membutuhkan kode itu karena kami ingin mengubah sesuatu dalam subproyek itu.
Saya harus merekayasa balik proyek.
Pertama saya mendekompilasi majelis (ya, itu adalah proyek .NET). Hasil perakitan yang didekompilasi adalah kode hambar dan membingungkan tanpa nama variabel lokal dan struktur kontrol yang rumit. Ini karena kompilasi membuang informasi penting yang tidak dapat didekompilasi.
Lalu saya mencoba mencari tahu di mana harus mengubah kode itu. Untuk melakukan ini, saya merampingkan kode untuk berperilaku sama tetapi dengan cara yang lebih ringkas. Saya juga menebak nama variabel dari perilakunya. Saya tunggal melangkah melalui kode berkali-kali sampai saya tahu apa yang dilakukannya.
Saya tidak merekayasa balik segalanya, hanya bagian yang harus kami ubah. Itu tidak terlalu buruk, sekitar 200 baris kode VB. Butuh waktu sekitar lima hari waktu kerja.
sumber