Contoh kata kunci program hook lengkap: hook,blocking,service
Ini adalah pertanyaan tes untuk "Analis Program Windows Senior" dari perusahaan xx yang saya terima ketika saya melamar pekerjaan. Persyaratan khusus (yaitu deskripsi program saya) adalah:
1. Program klien diberi nama Klien. Pantau pengoperasian sistem. Jika Anda menemukan ada proses "notepad" (notepad.exe) atau proses "kalkulator" (calc.exe) di sistem, segera matikan proses tersebut dan tulis kejadian tersebut ke database; Periksa database secara berkala setiap 1 menit dan unggah catatan peristiwa yang belum diunggah ke server.
1. Lingkungan operasi target adalah sistem operasi Windows 2000.
2. Silakan rancang program untuk melayani sistem.
3. Program harus memiliki kemampuan anti-serangan, termasuk fungsi seperti anti-penghapusan dan ketahanan terhadap penghentian proses secara paksa.
(1) Menjaga agar program tetap berjalan dan mencegah program lain menghentikan paksa jalannya program yang sedang berjalan;
(2) Lindungi database peristiwa dan file eksekusi utama agar tidak terhapus;
(3) Jika ditemukan kelainan (proses dihentikan, file terhapus, dll), segera paksa program untuk dimuat ulang/dijalankan;
(4) Jika kelainan terdeteksi tiga kali berturut-turut, proses daemon akan memaksa sistem operasi untuk memulai ulang setelah memulai ulang sistem, memastikan bahwa program dimuat dan berjalan normal;
(A) Untuk mewujudkan fungsi-fungsi di atas, program tidak terbatas pada bentuk EXE, dan bentuk pelaksanaannya dapat ditentukan sendiri sesuai kebutuhan.
(B) Semua fungsi di atas diterapkan di lingkungan operasi normal Windows 2000 dan di bawah izin Administrator. Tidak perlu mempertimbangkan mode keamanan Windows atau izin dan masalah lainnya.
4. Silakan gunakan database desktop sederhana, seperti Access, xBase, dan database file lainnya.
5. Setiap peristiwa yang dihasilkan berisi setidaknya dua informasi: waktu terjadinya peristiwa dan objek pemrosesan peristiwa.
Data acara disimpan dalam database di tabel tEvent. Tabel tEvent berisi setidaknya dua bidang:
(1) Bidang EventTime: jenis waktu/tanggal. Catat waktu terjadinya peristiwa tersebut.
(2) Bidang EventTarget: tipe karakter. Mencatat objek yang terbunuh dalam acara tersebut. Objek yang perlu dipertimbangkan adalah proses Notepad dan proses Kalkulator.
Jika Anda membutuhkan tabel atau field lain, Anda dapat menambahkannya sesuai kebutuhan.
6. Format transmisi data jaringan disesuaikan. Silakan tentukan konten dan format transmisi spesifik sesuai dengan kebutuhan Anda, dan tidak ada persyaratan khusus. Jaringan klien perlu bekerja sama dengan jaringan server.
7. Tidak ada batasan bahasa pengembangan dan lingkungan pengembangan terintegrasi yang digunakan, Anda dapat memilihnya sendiri.
8. Untuk metode koneksi database silahkan pilih sesuai kebutuhan.
2. Program sisi server diberi nama Server. Pantau jaringan, dan setelah klien mengunggah data, informasi peristiwa segera diekstraksi dan ditampilkan dalam daftar di antarmuka pengguna.
1. Lingkungan operasi target adalah sistem operasi Windows 2000.
2. Program harus dirancang sebagai aplikasi GUI Windows 2000 biasa. Antarmuka pengguna harus berisi setidaknya satu daftar informasi peristiwa, yang berisi setidaknya tiga informasi: waktu terjadinya peristiwa, objek pemrosesan peristiwa, dan sumber peristiwa.
(1) Waktu terjadinya peristiwa: sama dengan waktu terjadinya peristiwa klien.
(2) Objek pemrosesan acara: sama dengan objek pemrosesan acara klien.
(3) Sumber peristiwa: Alamat IP mesin klien yang mengunggah peristiwa saat ini.
3. Format transmisi data jaringan disesuaikan dan berfungsi bersama dengan klien.
4. Tidak ada batasan bahasa pengembangan dan lingkungan pengembangan terintegrasi yang digunakan, Anda dapat memilihnya sendiri.
Petunjuk untuk menjalankan program:
client.ini harus ditempatkan di direktori root drive C. File lain dapat ditempatkan di mana saja, tetapi survival.exe dan client.exe harus ditempatkan di folder yang sama. Sebelum memulai survival.exe, harap konfigurasikan ip server (interval_server ) di client.ini ), lalu mulai ADServer.exe
Deskripsi kode sumber 1. Server ADServer.exe
Karena sisi servernya sederhana, mari kita bahas sisi servernya terlebih dahulu :)
Tugas server adalah menerima data dari jaringan dan menggunakan transmisi pemblokiran TServerSocket. Setiap kali TServerSocket menerima permintaan koneksi dari klien, TServerClientThread akan dibuat. Anda harus membuat TWinSocketStream baru di thread ini untuk membaca dan menulis data klien. Kode utama ditulis di bagian ClientExecute di thread ini.
Tidak ada masalah dengan TWinSocketStream menulis data ke klien, tetapi membaca data dari klien (menggunakan metode baca) sering kali kembali sebelum selesai membaca, meskipun Anda menggunakan WaitForData. Jadi saya menulis fungsi waitDateComplete untuk menunggu data dibaca.
2. Klien Klien sedikit lebih merepotkan. Client.exe adalah layanan dan survival.exe adalah sebuah aplikasi. Keduanya saling memantau. Jika salah satu dimatikan, yang lain akan memulai ulang. hookDll.dll digunakan untuk hook. Global hooks harus ditulis dalam modul dll yang independen (kecuali untuk beberapa hook, silakan merujuk ke artikel ini: http://www.pconline.com.cn/pcedu/empolder/gj/vc/ 0403/340480.html).
Client.exe tidak memiliki beberapa baris kode. Ini terutama menggunakan CreateProcess untuk memulai proses. Perhatikan bahwa jika layanan ingin melakukan hal-hal yang terkait dengan shell windows, seperti kait yang digunakan dalam hookdll.dll yang dimulai oleh program ini, ServiceType harus disetel ke stWin32 dan properti TService::Interactive harus disetel ke true.
survival.exe digunakan untuk memulai layanan, memuat hookdll.dll, dan melaporkan kejadian ke server.
1. Memulai layanan memerlukan tiga proses. Pertama, buka pengontrol layanan, yang merupakan backend "layanan" di alat manajemen. Gunakan OpenSCManager untuk mendapatkan pegangan manajer layanan, dan kemudian gunakan OpenService (pegangan manajer layanan, nama layanan , SERVICE_START |.SERVICE_QUERY_STATUS) untuk mendapatkan pegangan layanan yang ditentukan, dan terakhir Anda dapat menggunakan StartService(...) untuk membuka layanan. Perhatikan bahwa setidaknya dua izin, SERVICE_START dan SERVICE_QUERY_STATUS, harus diperoleh.
2. Dalam hal memuat hookdll.dll, program ini menggunakan tautan implisit, yaitu menggunakan proyek BCBTambahkan ke Proyek untuk mengimpor file lib dll. Setelah mengimpor, jika fungsi dll tidak dipanggil dalam kode, dll tidak akan dimuat. Program ini memanggil fungsi BeginTrace (host HWND) untuk meneruskan pegangan jendela survival.exe, dan dll mengirimkan beberapa pesan ke survival.exe melalui pegangan ini.
3. Dalam hal melaporkan kejadian ke server, kelas TMSocketClient ditulis khusus, yang terutama bertanggung jawab untuk proses pengiriman pesan -> menerima tanda terima pesan. Kode utamanya ada di TMSocketClient::Command (….). kode di ADServer.exe, sangat mudah dibaca. Dengan #define konstanta perintah yang berbeda, modul ini dapat menyelesaikan banyak jenis tugas transmisi. Faktanya, modul ini adalah kelas yang saya tulis di masa lalu untuk mensimulasikan TNMFTP. Modul ini disederhanakan dengan menghapus banyak #defines dan digunakan untuk mentransfer file di LAN virtual (TNMFTP tidak dapat bekerja di LAN virtual).
3.hookDll.dll
Kodenya sangat sederhana, cukup perhatikan satu hal, yaitu jika N proses memanggil dll yang sama, dll ini akan disalin N kali. Secara umum, salinan berbeda dari N dll ini masing-masing memiliki segmen datanya sendiri. Artinya, nilai variabel yang sama di setiap salinan berbeda dan tidak saling mengganggu. Namun kenyataannya, Windows telah meninggalkan mekanisme yang memungkinkan kita mendeklarasikan variabel seperti itu di dll dan menjaga konsistensi data di antara N instance dll, seperti halnya penunjuk yang melampaui ruang proses. Untuk mendeklarasikan variabel seperti itu, pertama-tama buat file .def dengan nama yang sama dengan dll dan tulis di file tersebut:
BAGIAN
SHSEG BACA TULIS BERBAGI
Kemudian, deklarasikan variabel dll yang ingin Anda bagikan antar proses sebagai variabel global, dan inisialisasi variabel tersebut. Perhatikan bahwa perbedaan antara berbagi dan tidak berbagi adalah apakah itu diinisialisasi!
Program ini mengacu pada "Aplikasi Hooks: Program Running Monitoring" di CCRun Terima kasih kepada penulis Victor Chen.
Oke, sepertinya hanya itu saja yang perlu dijelaskan. Selain itu, ada beberapa variabel yang tidak berguna dalam program ini. Saya tidak punya waktu untuk membersihkannya. Mohon maafkan saya :) Terima kasih telah menonton!
Memperluas