Keamanan Berorientasi C Tutorial 0x22 - Pengantar WinAPI


Apa itu WinAPI?

WinAPI adalah Application Programming Interface untuk Windows dan menawarkan banyak fungsi yang kuat dimana Anda dapat membangun program Anda mulai dari manipulasi file sederhana untuk membangun GUI dan desain grafis untuk pemrograman driver perangkat tingkat rendah.

Tapi mengapa program untuk Windows? Apa pemrograman pada Windows harus dilakukan dengan apapun yang berhubungan dengan keamanan? Nah, bagi yang belum menyadari jelas sistem operasi Windows adalah target utama untuk malware karena popularitasnya dengan pengguna standar. Juga, karena perangkat lunak berpemilik adalah hal yang besar di dunia ini, itu tidak biasa bagi orang untuk mencoba untuk membalikkan insinyur dan atau hack mereka. Tentu saja untuk melakukan hal ini kita perlu akrab dengan lingkungan.

Dokumentasi WinAPI

Setiap API yang layak harus datang dengan dokumentasi yang sesuai terhadap detail tujuan masing-masing fungsi dan bagaimana hal itu harus digunakan, memberikan link yang tepat berkaitan dengan parameter dan bagaimana hal-hal yang harus ditangani dalam situasi bahwa sesuatu yang gagal.

Setelah mengatakan itu, WinAPI sebenarnya merupakan referensi yang sangat terdokumentasi dengan baik untuk semua ratusan fungsi, struktur, enum, kode kesalahan dan contoh kode. Banyak hal ini berasal dari fungsi C standar seperti strcpy dan malloc, banyak yang versi yang menyediakan fungsionalitas sedikit lebih ditingkatkan.

Sayangnya, meskipun terdokumentasi dengan baik, Microsoft memiliki hal ini dengan menjadi "hipsters". Sebagian besar tipe data yang tercantum dalam dokumentasi yang jenis Microsoft-didefinisikan yang sebenarnya hanya typedef s dari tipe data standar. Anda akan tahu apa yang saya maksud jika Anda telah melihat beberapa referensi. Jika Anda belum, maka Anda akan segera tahu. Saya sarankan Anda berpegang pada ini.

Memulai

Sebelum kita mulai, kita harus tahu cara mengatur lingkungan kode pada OS Windows. Karena ini bukan beberapa distro Linux, tidak memiliki compiler asli untuk membangun aplikasi jadi mari kita lihat pilihan kami:

1. MinGW / Cygwin adalah aplikasi pihak ketiga yang menyediakan lingkungan pemrograman yang sesuai pada platform Windows, menawarkan alat untuk dapat melakukan. Ketika saya mulai keluar pemrograman pada Windows, saya menggunakan MinGW dan dua tahun masih menggunakannya. Pilihan ini fantastis, saya sudah tidak punya masalah menggunakannya dan saya merekomendasikan hal ini;

2. IDE pihak ketiga atau Integrated Development Environments adalah aplikasi yang menciptakan lingkungan berbasis GUI untuk pengembang. Mereka datang dikemas dengan alat yang tepat seperti MinGW untuk membangun program Windows;

3. Microsoft Visual Studio (MSVS) adalah IDE Microsoft-dikembangkan dibundel dengan compiler sendiri menyediakan banyak fungsi dan pilihan ketika membangun aplikasi Windows asli termasuk GUI, informasi versi aplikasi, ikon dan sumber daya lainnya (Anda masih dapat mencapai hal ini dengan pilihan di atas tapi itu terintegrasi ke MSVS yang membuatnya lebih mudah). Jika Anda ingin memaksimalkan pengembangan untuk aplikasi Windows, bisa sangat merekomendasikan ini. Bahkan, saya sudah mulai menggunakan ini sendiri dalam penelitian pengembangan malware saya.

Jika Anda telah memilih opsi pertama, Anda memerlukan editor teks karena tidak menyediakan GUI. Saya sudah menjadi pengguna lama dari Teks Sublime karena itu minimalis tema gelap dan halus dengan warna yang sangat bagus untuk sintaks. Sangat cantik. Saya pikir itu cukup tentang topik ini. Mari kita lihat contoh menggunakan WinAPI.

Penanganan File

Penanganan File pada Windows cukup banyak konsep yang sama seperti dalam standar C. Kita perlu menangani ke file dan kami menggunakan pegangan yang melakukan membaca atau menulis operasi pada file target. Mari kita secara singkat mempelajari cara membuat dan menulis ke file menggunakan fungsi WinAPI.

Untuk mendapatkan pegangan ke file, kita perlu menggunakan fungsi CreateFile. Sekarang ada beberapa bagian kecil dari informasi yang Anda mungkin ingin tahu sebelum melanjutkan. Banyak fungsi WinAPI mendukung (Unicode) dan ASCII set karakter seperti ini, Anda dapat menentukan mana yang Anda inginkan dengan penandaan baik W atau A setelah nama fungsi seperti: CreateFileW atau CreateFileA. Perlu diingat Anda harus konsisten tentang karakter set program Anda yang akan mendukung. Biasanya, Anda tidak perlu menentukan mana yang Anda akan gunakan dan hanya dapat menggunakan normal nama fungsi CreateFile dan compiler default Anda ke salah satu dari pilihan ini. Demi kesederhanaan, saya akan menggunakan versi ASCII dalam contoh (tapi saya tidak akan menentukan A).

Silahkan lihat melalui dokumentasi fungsi ini. Ada banyak informasi dan mungkin sedikit berlebihan tetapi sekali lagi Anda akan terbiasa untuk itu, itu benar-benar tidak begitu buruk. Ada rincian singkat dari masing-masing parameter dalam fungsi dan harus cukup untuk membantu Anda pada tahap ini. Beberapa mungkin memiliki link ke bagian lain dari dokumentasi dan memberikan beberapa informasi tambahan untuk pilihan yang tersedia. Jika Anda memerlukan bantuan mengidentifikasi beberapa jenis data seperti DWORD, menggunakan link saya berikan tadi sebagai panduan. Jauhkan mata Anda pada nilai kembali seperti yang Anda akan ingin untuk membiasakan diri dengan itu.

Saya sudah menyatakan MENANGANI (void *) ketik hFile untuk menangkap nilai kembali dari CreateFile sehingga kita dapat menggunakannya untuk merujuk ke file untuk membaca atau menulis. Beberapa parameter yang NULL seperti yang kita lihat, yang berarti bahwa kita tidak akan menggunakan orang-orang pilihan yang disediakan oleh fungsi. Apa opsi yang kami berikan memungkinkan kita lakukan adalah:

1. Membaca dan menulis ke file,

2. Memungkinkan proses lain untuk membaca file sementara itu digunakan oleh program kami,

3. Selalu membuat file baru dan akan menimpa kasus yang ada,

4. Telah atribut file normal, yaitu tidak tersembunyi atau read-only, dll

Sebuah cek error cepat diperlukan untuk melihat apakah sesuatu yang salah terjadi sehingga kita bisa melihat di mana program kami yang salah. Perhatikan bahwa INVALID_HANDLE_VALUE kode kesalahan diperoleh dari bagian nilai kembali dari dokumentasi. The GetLastError fungsi memberikan kode kesalahan dari mana kita bisa mendapatkan informasi lebih lanjut tentang issue._ yang Saat ini, kami tidak melakukan apa-apa dengan file yang belum jadi mari kita coba dan menulis ke file.

Menggunakan pegangan untuk file kami sebelumnya yang telah diperoleh, fungsi WriteFile menyediakan operasi yang diperlukan untuk menulis ke file kita. Parameter keempat adalah opsional seperti yang ditentukan dalam dokumen dengan kata kunci opt. Kita dapat menggunakan variabel untuk menangkap nilai kembali fungsi dan mengujinya untuk melihat apakah itu berhasil. Perhatikan bahwa jika fungsi gagal, kita harus menutup pegangan untuk file sebelum kembali ke utama, seperti yang kita lakukan dengan menangani file yang disediakan oleh fopen. Jangan lupa!

Sekarang kita punya penulisan tertutup, mari kita menyelesaikannya dengan membaca.

Setelah menulis ke file, pointer file diatur sampai akhir jadi apa yang perlu kita lakukan sebelum membaca dari file, kita harus memindahkan pointer file kembali ke awal. Kita dapat melakukan ini dengan menggunakan SetFilePointer fungsi, menggunakan nilai FILE_BEGIN.

Setelah itu kita dapat melanjutkan untuk membaca isi. Kita harus memberikan pegangan untuk file dan buffer untuk menyimpan informasi ke fungsi ReadFile.

Ada alasan mengapa null-diakhiri array ReadBuf dan itu karena fungsi ReadFile tidak bisa berhenti dengan sendirinya saat mencapai EOF sehingga akan terus membaca sampai mengisi buffer. Saya tidak yakin mengapa hal ini masalah tapi itu Microsoft ... Apa yang dapat Anda harapkan? Sebelum kita dapat kembali dari utama, kami harus membersihkan file pegangan.

Menjalankan Program

Baiklah, saatnya untuk mengkompilasi dan kemudian menjalankan program. Mari kita lihat hasilnya.

Kesimpulan

Jelas, ada begitu banyak dari hanya mengajukan manipulasi. Banyak fungsi sebenarnya dapat digunakan untuk membantu malware dalam mencapai tujuan mereka yang dapat merinci pada tingkat kode "Windows malware yang nyata dalam tindakan". Mudah-mudahan, Anda akan dapat memahami bagaimana mereka berfungsi dan pada gilirannya Anda tahu bagaimana menemukan satu tersembunyi di sistem. Selamat Bersenang-senang menjelajahi!

Comments

Popular Posts