Di perusahaan kami, kami memiliki program kecil (ukuran .exe 500Kb) yang melakukan perhitungan matematis dan pada akhirnya mencantumkan hasilnya pada lembar bentang Excel yang kami gunakan untuk melanjutkan alur kerja kami.
Saya ingin memodifikasi kolom, format spasi dan menambahkan logika VBA dll pada spreadsheet Excel tetapi karena parameter ini tidak dapat dikonfigurasi dalam program itu, menurut saya satu-satunya cara untuk mengubahnya adalah dengan memecah / merekayasa balik .exe
Tidak ada yang tahu dalam bahasa apa itu diprogram, satu-satunya hal yang kita tahu adalah:
- Dikembangkan 20+ tahun yang lalu
- Pengembang pensiun 10 tahun lalu
- Aplikasi GUI
- Menjalankan mandiri
- Ukuran 500Kb
Ada saran opsi apa yang harus saya tangani dengan masalah seperti itu? Apakah teknik reverse adalah satu-satunya pilihan, atau apakah ada pendekatan yang lebih baik?
Jawaban:
Reverse engineering bisa menjadi sangat sulit, bahkan lebih jika Anda tidak hanya ingin memahami logika program, tetapi ubah dan kompilasi ulang. Jadi hal pertama yang akan saya coba adalah mencari solusi yang berbeda.
Jika itu adalah satu-satunya hal yang Anda inginkan, dan perhitungan yang dilakukan oleh program baik-baik saja, mengapa tidak menulis program dalam bahasa pilihan Anda (mungkin makro Excel) yang menyebut warisan Anda "exe", mengambil output dan memprosesnya lebih lanjut.
sumber
subprocess.run()
, secara pribadi.PIPE
konstanta sihir . Jika tidak, Anda tidak melakukannya dan akan dibuang. Apa yang bisa dipahami?Shell
panggilan dalam Excel VBA seperti ini: stackoverflow.com/questions/8902022/… , seseorang dapat menyalurkan stdout / stderr dari utilitas cmd ke file terpisah dan kemudian menerapkan format output.Selain jawaban yang sudah diberikan oleh Doc Brown dan Telastyn, saya ingin menyarankan pendekatan alternatif (dengan asumsi itu misi kritis).
Jika Anda tidak tahu perhitungan yang dilakukan dan kalkulasi (agak) kritis-misi: Buat logika asli dalam
.exe
file dengan cara apa pun yang diperlukan. Decode menggunakan decompiler / disassembler seperti IDA jika perlu. Sewa konsultan (atau sekelompok konsultan) jika perlu.Tentu, kerjakan saja untuk saat ini menggunakan solusi mereka, tetapi jangan biarkan itu terjadi.
Alasan saya menyarankan adalah sebagai berikut: Anda telah mengakui bahwa perhitungannya sangat kompleks (menurut seorang insinyur yang Anda ajak bicara). Ini juga penting untuk misi. Jadi jika entah bagaimana yang asli
.exe
berhenti bekerja karena perubahan pada platform yang Anda miliki (mungkin dukungan 16-bit dijatuhkan?), Anda baru saja kehilangan sepotong pengetahuan kritis-misi .Sekarang, saya tidak khawatir kehilangan
.exe
, tetapi tentang kehilangan pengetahuan yang dikodekannya. Pengetahuan itu harus dipulihkan.Seperti sebelumnya: jika pengetahuan itu sudah tersedia, pastikan untuk menuliskannya dalam format yang tidak akan hilang dalam waktu dekat. Kalau tidak, pulihkan dan tulis.
sumber
Tanyakan kepada programmer asli, jika memungkinkan.
Beberapa minggu yang lalu saya telah dihubungi oleh sebuah perusahaan yang saya gunakan untuk bekerja selama 10 tahun yang lalu dengan pertanyaan yang sama tentang file mdb yang dikembangkan pada pertengahan 90-an.
sumber
Jika yang ingin Anda lakukan hanyalah memodifikasi output, mengapa tidak menggunakan komposisi saja?
Alih-alih memodifikasi kotak hitam yang tidak dapat Anda akses dengan mudah, Anda membuat program baru yang mengambil output Excel, dan apakah pemformatan / kolom Anda juga berubah . Kemudian Anda dapat membuat exe / skrip baru yang memanggil kedua program secara berurutan, sehingga tampaknya bagi pengguna akhir bahwa hanya ada satu program yang melakukan semua pekerjaan - meskipun itu dua langkah berbeda di bawah tenda.
sumber
Ada perusahaan yang berspesialisasi dalam masalah seperti ini. Mereka menggunakan kode hak milik untuk mendekompilasi kode asli ke bahasa tingkat tinggi, kemudian menerapkan keahlian manusia untuk membuatnya berguna (misalnya memberikan variabel nama yang sesuai).
Beberapa tahun yang lalu majikan saya menggunakan ini untuk memigrasi beberapa kode mainframe S / 390 asli ke server Linux. Kami memberi mereka biner, mereka memberi kami kode sumber dalam C.
Apakah ini perlu dalam kasus Anda, terserah Anda. Jika Anda hanya peduli dengan format output, Anda dapat memijat output setelah diproduksi. Namun seperti yang telah ditunjukkan oleh orang lain, menyembunyikan logika bisnis dalam gumpalan biner bisa menjadi risiko yang berkelanjutan.
sumber
Tulis pembungkus sederhana di sekitar program, ambil hasilnya. Tidak rumit untuk melakukan banyak bahasa ( Java , C ++ , Python , .NET , misalnya) memiliki cara untuk ini. Mengurai output dan menghasilkan yang lain, dalam bentuk yang diinginkan. Pengguna akan memanggil program baru Anda. Eksekusi lama akan tetap di sebelahnya, atau bahkan dapat diekstraksi secara otomatis dari sumber daya, sebelum menjalankannya.
Solusi ini tentu saja berfungsi cukup baik hanya ketika output terstruktur dengan baik sehingga mudah diurai.
Itu adalah aplikasi GUI, bukan masalah pemblokiran. Anda dapat meluncurkannya, menghasilkan keluaran, dan kemudian secara otomatis memposting prosesnya ketika GUI ini berakhir.
sumber
Tulis beberapa tes yang melatih sebanyak mungkin kasus pada kode lama. Temukan casing sudut, uji input yang salah, dan uji input yang benar.
Jelaskan apa output yang benar diberikan berbagai kasus, dan kemudian mencoba untuk menulis implementasi yang memenuhi tes yang sama .
Saya tidak akan pergi ke rute reverse engineering. Sangat rumit untuk membalikkan kode mesin, dan Anda seharusnya sudah tahu apa tujuan exe itu. Reverse engineering adalah pekerjaan yang terlalu banyak untuk apa yang Anda cari.
Jika perangkat lunak ini dikembangkan oleh satu orang 20 tahun yang lalu, itu mungkin bukan sesuatu yang membutuhkan banyak kekuatan modern. Program GUI yang meregangkan mesin 20 tahun yang lalu hampir tidak akan mendaftar pada mesin modern, jadi Anda mungkin melihat sesuatu yang relatif mudah untuk direproduksi.
sumber
Cobalah untuk merekayasa balik exe. Hanya untuk tujuan menemukan logika perhitungan atau setidaknya untuk mendapatkan petunjuk yang adil tentang apa yang sebenarnya dilakukannya dan jika rekayasa balik Anda dapat mengarahkan Anda ke titik itu, Anda dapat menulis aplikasi baru berdasarkan logika perhitungan tersebut. Selain itu, saya tidak melihat jalan keluar lain.
Lebih mudah dikatakan daripada dilakukan, merekayasa balik sebuah exe yang dibuat 20 tahun yang lalu adalah tantangan nyata.
sumber