Reverse engineering: apa manfaatnya? [Tutup]

15

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?
kaus kaki
sumber
5
Apakah pertanyaan ini semata-mata tentang jenis pembongkaran rekayasa terbalik, atau yang lainnya juga? (karena "majelis" dan "tingkat rendah" ada di tag ..)
Izkata

Jawaban:

14

Untuk apa reverse engineering itu baik?

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.

Sebagai seorang programmer, haruskah saya mempelajari seni teknik reverse?

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.

Apa manfaat dari seorang programmer yang berpengalaman dengan teknik reverse?

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:

Saya tidak akan membatasi untuk crack "buruk". Membongkar dapat berguna untuk mengetahui apakah kompiler menjadi gila (biasanya itu kode Anda, meskipun), dari sudut pandang yang lebih sysadmin itu bisa menarik untuk melihat di mana aplikasi gagal

Elang
sumber
8
Saya tidak akan membatasi untuk crack "buruk". Membongkar dapat berguna untuk mengetahui apakah kompiler menjadi gila (biasanya itu kode Anda, meskipun), dari sudut pandang yang lebih sysadmin itu dapat menarik untuk melihat di mana aplikasi gagal, ...
johannes
@johannes: Ya, Anda benar. Bolehkah saya menuliskannya dalam jawaban saya?
Falcon
tentu, lakukan sesuka Anda, saya tidak mengklaim hak cipta atas hal itu ;-)
johannes
7
Maaf, tapi ini jawaban yang sangat mengerikan. Reverse Engineering sama sekali bukan "terutama untuk ... cracking dan hacking" sebagaimana didefinisikan, dan siapa pun yang tidak berurusan dengan pemrograman sistem sedang dikhianati dengan diperkenalkan kepadanya dari perspektif ideologis itu.
Chuu
1
Saya tidak berpikir itu telah disebutkan, tetapi hati-hati jika Anda melakukan ini pada perangkat lunak yang bukan milik Anda (atau jangan bilang siapa-siapa). Hampir semua EULA komersial melarang rekayasa balik. Anda tidak ingin mendapatkan surat berhenti dan berhenti dengan salinan ke seseorang pengacara IP.
Awal
25

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.

Machado
sumber
Heck, kita bahkan melihat ke dalam prosedur tersimpan SQL dari sistem pihak ke-3 yang kita sewa hanya untuk memeriksa apakah mereka kadang-kadang memenuhi persyaratan kita dengan benar.
Machado
3
+1. Bahkan produk perangkat lunak yang laris dari sebuah perusahaan besar kadang-kadang bisa menjadi kotak hitam, apalagi dengan dokumentasi yang tidak memadai, ketinggalan zaman, hanya salah, terkadang dokumentasi on-line yang tidak ada dan semacamnya.
RalphChapin
13

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.

Philip
sumber
+1, khususnya berlaku untuk saya. Saya telah bekerja di beberapa bank di mana sistem lama tidak memiliki dokumen teknis tunggal.
Machado
7

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.

StuartLC
sumber
2

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.

BlueRaja - Danny Pflughoeft
sumber
1

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.

Coder
sumber
1

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'

wanjiku
sumber
0

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.

nekat
sumber