ภาษาไทย
中文(简体)
中文(繁体)
한국어
日本語
English
Português
Español
Русский
العربية
Indonesia
Deutsch
Français
ภาษาไทย
หน้าแรก
ดาวน์โหลดซอร์สโค้ด
เกี่ยวกับการเขียนโปรแกรม
ทรัพยากรสร้างเว็บไซต์
หนังสือและบทเรียน
บทเรียนออกแบบเว็บ
บทเรียนการเขียนโปรแกรมเครือข่าย
เกมมือถือ
แอปมือถือ
บทความ
หน้าแรก
>
การเขียนโปรแกรมที่เกี่ยวข้อง
>
ตัวสร้าง C++(BCB)
ตัวอย่างโปรแกรม Hook
ตัวสร้าง C++(BCB)
v1.0
ไม่มีทรัพยากร
ตัวอย่างคีย์เวิร์ดของโปรแกรม hook ที่สมบูรณ์: hook, blocking, service
นี่คือคำถามทดสอบสำหรับ "Senior Windows Program Analyst" ของบริษัท xx ที่ฉันได้รับเมื่อสมัครงาน โดยมีข้อกำหนดเฉพาะ (นั่นคือ คำอธิบายโปรแกรมของฉัน) คือ:
1. โปรแกรมไคลเอนต์ชื่อ Client ตรวจสอบการทำงานของระบบ หากคุณพบว่ามีกระบวนการ "notepad" (notepad.exe) หรือกระบวนการ "เครื่องคิดเลข" (calc.exe) ในระบบ ให้ปิดกระบวนการทันทีและเขียนเหตุการณ์ลงในฐานข้อมูล ตรวจสอบฐานข้อมูลเป็นระยะทุกๆ 1 นาที และอัพโหลดบันทึกเหตุการณ์ที่ยังไม่ได้อัพโหลดขึ้นเซิร์ฟเวอร์
1. สภาพแวดล้อมการทำงานเป้าหมายคือระบบปฏิบัติการ Windows 2000
2.กรุณาออกแบบโปรแกรมเพื่อรองรับระบบ
3. โปรแกรมต้องมีความสามารถในการป้องกันการโจมตี รวมถึงฟังก์ชันต่างๆ เช่น การป้องกันการลบ และการต้านทานต่อการบังคับให้ยุติกระบวนการ
(1) ให้โปรแกรมทำงานอย่างต่อเนื่องและป้องกันไม่ให้โปรแกรมอื่นบังคับให้ยุติการทำงานของโปรแกรมปัจจุบัน
(2) ป้องกันฐานข้อมูลเหตุการณ์และไฟล์การดำเนินการหลักจากการถูกลบ
(3) หากพบความผิดปกติ (กระบวนการถูกยกเลิก ไฟล์จะถูกลบ ฯลฯ) บังคับให้โหลด/รันโปรแกรมทันที
(4) หากตรวจพบความผิดปกติสามครั้งติดต่อกัน กระบวนการ daemon จะบังคับให้ระบบปฏิบัติการรีสตาร์ท หลังจากรีสตาร์ทระบบ ตรวจสอบให้แน่ใจว่าโปรแกรมโหลดและทำงานตามปกติ
(A) เพื่อให้เข้าใจถึงฟังก์ชันข้างต้น โปรแกรมไม่ได้จำกัดอยู่เพียงแบบฟอร์ม EXE และแบบฟอร์มการใช้งานสามารถตัดสินใจได้ด้วยตนเองตามความต้องการ
(B) ฟังก์ชั่นข้างต้นทั้งหมดได้รับการใช้งานในสภาพแวดล้อมการทำงานปกติของ Windows 2000 และอยู่ภายใต้สิทธิ์ของผู้ดูแลระบบ ไม่จำเป็นต้องพิจารณาถึงโหมดความปลอดภัยของ Windows หรือสิทธิ์และปัญหาอื่น ๆ
4. โปรดใช้ฐานข้อมูลเดสก์ท็อปธรรมดา เช่น Access, xBase และฐานข้อมูลไฟล์อื่นๆ
5. แต่ละเหตุการณ์ที่สร้างขึ้นประกอบด้วยข้อมูลอย่างน้อยสองชิ้น: เวลาที่เกิดเหตุการณ์และออบเจ็กต์การประมวลผลเหตุการณ์
ข้อมูลเหตุการณ์จะถูกเก็บไว้ในฐานข้อมูลในตาราง tEvent ตาราง tEvent มีอย่างน้อยสองฟิลด์:
(1) ฟิลด์ EventTime: ประเภทเวลา/วันที่ บันทึกเวลาที่เหตุการณ์เกิดขึ้น
(2) ฟิลด์ EventTarget: ประเภทอักขระ บันทึกวัตถุที่ถูกฆ่าในเหตุการณ์ วัตถุที่ต้องพิจารณาคือกระบวนการ Notepad และกระบวนการเครื่องคิดเลข
หากคุณต้องการตารางหรือเขตข้อมูลอื่นๆ คุณสามารถเพิ่มได้ตามต้องการ
6. รูปแบบการส่งข้อมูลเครือข่ายได้รับการปรับแต่ง โปรดตัดสินใจเลือกเนื้อหาและรูปแบบการส่งข้อมูลเฉพาะตามความต้องการของคุณ และไม่มีข้อกำหนดเฉพาะ เครือข่ายไคลเอนต์จำเป็นต้องทำงานร่วมกับเครือข่ายเซิร์ฟเวอร์
7. ไม่จำกัดภาษาในการพัฒนาและสภาพแวดล้อมการพัฒนาแบบรวมที่ใช้ คุณสามารถเลือกได้ด้วยตัวเอง
8. สำหรับวิธีการเชื่อมต่อฐานข้อมูล โปรดเลือกตามความต้องการของคุณ
2. โปรแกรมฝั่งเซิร์ฟเวอร์ชื่อเซิร์ฟเวอร์ ตรวจสอบเครือข่าย และเมื่อไคลเอ็นต์อัปโหลดข้อมูล ข้อมูลเหตุการณ์จะถูกดึงออกมาทันทีและแสดงในรายการในส่วนติดต่อผู้ใช้
1. สภาพแวดล้อมการทำงานเป้าหมายคือระบบปฏิบัติการ Windows 2000
2. โปรแกรมควรได้รับการออกแบบให้เป็นแอพพลิเคชั่น Windows 2000 GUI ทั่วไป อินเทอร์เฟซผู้ใช้ต้องมีรายการข้อมูลเหตุการณ์อย่างน้อยหนึ่งรายการ ซึ่งมีข้อมูลอย่างน้อยสามส่วน ได้แก่ เวลาที่เกิดเหตุการณ์ ออบเจ็กต์การประมวลผลเหตุการณ์ และแหล่งที่มาของเหตุการณ์
(1) เวลาการเกิดเหตุการณ์: เหมือนกับเวลาการเกิดเหตุการณ์ไคลเอนต์
(2) วัตถุการประมวลผลเหตุการณ์: เช่นเดียวกับวัตถุการประมวลผลเหตุการณ์ไคลเอนต์
(3) แหล่งที่มาของเหตุการณ์: ที่อยู่ IP ของเครื่องไคลเอนต์ที่อัปโหลดเหตุการณ์ปัจจุบัน
3. รูปแบบการส่งข้อมูลเครือข่ายได้รับการปรับแต่งทำงานร่วมกับไคลเอนต์
4. ไม่มีข้อจำกัดเกี่ยวกับภาษาในการพัฒนาและสภาพแวดล้อมการพัฒนาแบบรวมที่ใช้ คุณสามารถเลือกได้ด้วยตัวเอง
คำแนะนำในการรันโปรแกรม:
ต้องวาง client.ini ไว้ในไดเรกทอรีรากของไดรฟ์ C สามารถวางไฟล์อื่นได้ทุกที่ แต่ต้องวาง survival.exe และ client.exe ไว้ในโฟลเดอร์เดียวกัน ก่อนที่จะเริ่ม survival.exe โปรดกำหนดค่า IP ของเซิร์ฟเวอร์ (interval_server ) ใน client.ini ) จากนั้นเริ่ม ADServer.exe
คำอธิบายซอร์สโค้ด 1. เซิร์ฟเวอร์ ADServer.exe
เนื่องจากฝั่งเซิร์ฟเวอร์นั้นเรียบง่าย มาพูดถึงฝั่งเซิร์ฟเวอร์กันก่อน :)
หน้าที่ของเซิร์ฟเวอร์คือการรับข้อมูลจากเครือข่ายและใช้การส่งข้อมูลแบบบล็อก TServerSocket ทุกครั้งที่ TServerSocket ได้รับการร้องขอการเชื่อมต่อจากไคลเอนต์ มันจะสร้างเธรด TServerClientThread คุณควรสร้าง TWinSocketStream ใหม่ในเธรดนี้เพื่ออ่านและเขียนข้อมูลไคลเอนต์ รหัสหลักเขียนไว้ในส่วน ClientExecute ของเธรดนี้
ไม่มีปัญหากับการเขียนข้อมูล TWinSocketStream ไปยังไคลเอนต์ แต่การอ่านข้อมูลจากไคลเอนต์ (โดยใช้วิธีการอ่าน) มักจะส่งคืนก่อนที่จะอ่านจบ แม้ว่าคุณจะใช้ WaitForData ก็ตาม ดังนั้นฉันจึงเขียนฟังก์ชัน waitDateComplete เพื่อรอให้ข้อมูลถูกอ่าน
2. ลูกค้า ลูกค้าจะลำบากกว่าเล็กน้อย Client.exe เป็นบริการและ survival.exe เป็นแอปพลิเคชันที่ทั้งสองตรวจสอบซึ่งกันและกัน หากอันหนึ่งปิดตัวลง อีกอันจะรีสตาร์ท hookDll.dll ใช้สำหรับ hooks Global hooks จะต้องเขียนในโมดูล dll อิสระ (ยกเว้น hooks บางตัว โปรดดูที่บทความนี้: http://www.pconline.com.cn/pcedu/empolder/gj/ vc/ 0403/340480.html)
Client.exe ไม่มีโค้ดไม่กี่บรรทัด ส่วนใหญ่จะใช้ CreateProcess เพื่อเริ่มกระบวนการ โปรดทราบว่าหากบริการต้องการทำสิ่งต่าง ๆ ที่เกี่ยวข้องกับเชลล์ windows เช่น hooks ที่ใช้ใน hookdll.dll ที่เริ่มต้นโดยโปรแกรมนี้ ServiceType จะต้องตั้งค่าเป็น stWin32 และคุณสมบัติ TService::Interactive จะต้องตั้งค่าเป็นจริง
survival.exe ใช้เพื่อเริ่มบริการ โหลด hookdll.dll และรายงานเหตุการณ์ไปยังเซิร์ฟเวอร์
1. การเริ่มต้นบริการต้องใช้สามกระบวนการ ขั้นแรก เปิดตัวควบคุมบริการซึ่งเป็นแบ็กเอนด์ของ "บริการ" ในเครื่องมือการจัดการ ใช้ OpenSCManager เพื่อรับหมายเลขอ้างอิงของผู้จัดการบริการ จากนั้นใช้ OpenService (หมายเลขอ้างอิงของผู้จัดการบริการ ชื่อบริการ , SERVICE_START |. SERVICE_QUERY_STATUS) เพื่อรับหมายเลขอ้างอิงของบริการที่ระบุ และสุดท้ายคุณสามารถใช้ StartService(...) เพื่อเปิดบริการได้ โปรดทราบว่าอย่างน้อยต้องได้รับสิทธิ์สองรายการ ได้แก่ SERVICE_START และ SERVICE_QUERY_STATUS
2. ในแง่ของการโหลด hookdll.dll โปรแกรมนี้ใช้การเชื่อมโยงโดยนัย นั่นคือการใช้ projectAdd to Project ของ BCB เพื่อนำเข้าไฟล์ lib ของ dll หลังจากการนำเข้า หากไม่มีการเรียกฟังก์ชันของ dll ในโค้ด dll จะไม่ถูกโหลด โปรแกรมนี้เรียกฟังก์ชัน beginningTrace (โฮสต์ HWND) เพื่อส่งผ่านหมายเลขอ้างอิงหน้าต่างของ survival.exe และ dll ส่งข้อความบางส่วนไปยัง survival.exe ผ่านทางหมายเลขอ้างอิงนี้
3. ในส่วนของการรายงานเหตุการณ์ไปยังเซิร์ฟเวอร์ คลาส TMSocketClient ถูกเขียนขึ้นเป็นพิเศษ ซึ่งมีหน้าที่หลักในการส่งข้อความ -> การรับข้อความ โค้ดหลักอยู่ใน TMSocketClient::Command (….) รหัสใน ADServer.exe นั้นอ่านง่ายมาก ด้วย #define ค่าคงที่คำสั่งที่แตกต่างกัน โมดูลนี้สามารถทำงานการส่งข้อมูลได้หลายประเภท อันที่จริง โมดูลนี้เป็นคลาสที่ฉันเขียนในอดีตเพื่อจำลอง TNMFTP มันถูกทำให้ง่ายขึ้นโดยการลบ #defines จำนวนมาก และใช้ในการถ่ายโอนไฟล์ใน LAN เสมือน (TNMFTP ไม่สามารถทำงานได้ใน LAN เสมือน)
3.hookDll.dll
รหัสนั้นง่ายมาก เพียงใส่ใจกับสิ่งหนึ่ง นั่นคือหากกระบวนการ N เรียก dll เดียวกัน dll นี้จะถูกคัดลอก N ครั้ง โดยทั่วไปแล้ว สำเนาที่แตกต่างกันของ N dll เหล่านี้แต่ละชุดจะมีส่วนข้อมูลของตัวเอง กล่าวคือ ค่าของตัวแปรเดียวกันในแต่ละสำเนาจะแตกต่างกันและไม่รบกวนซึ่งกันและกัน แต่ในความเป็นจริง Windows ได้ทิ้งกลไกที่ช่วยให้เราสามารถประกาศตัวแปรดังกล่าวใน dll และเก็บข้อมูลให้สอดคล้องกันในอินสแตนซ์ N ของ dll เช่นเดียวกับที่เป็นตัวชี้ที่อยู่เหนือพื้นที่กระบวนการ หากต้องการประกาศตัวแปรดังกล่าว ขั้นแรกให้สร้างไฟล์ .def ด้วยชื่อเดียวกับ dll แล้วเขียนลงในไฟล์:
ส่วนต่างๆ
SHSEG อ่านเขียนแบ่งปัน
จากนั้น ประกาศตัวแปร dll ที่คุณต้องการแชร์ระหว่างกระบวนการต่างๆ เป็นตัวแปรร่วม และเตรียมใช้งานตัวแปรเหล่านี้ โปรดทราบว่าความแตกต่างระหว่างการแชร์และการไม่แชร์คือการเริ่มต้นใช้งานหรือไม่!
โปรแกรมนี้อ้างถึง "Application of Hooks: Program Running Monitoring" บน CCRun ขอบคุณผู้เขียน Victor Chen
ตกลง ดูเหมือนว่าโดยพื้นฐานแล้วนั่นคือทั้งหมดที่ต้องอธิบาย นอกจากนี้ยังมีตัวแปรที่ไม่มีประโยชน์บางอย่างในโปรแกรม ฉันไม่มีเวลาทำความสะอาด โปรดยกโทษให้ฉันด้วย :) ขอบคุณที่รับชม!
ขยาย
ข้อมูลเพิ่มเติม
เวอร์ชัน
v1.0
ประเภท
ตัวสร้าง C++(BCB)
เวลาอัปเดต
2023-04-18
ขนาด
443392
ภาษา
ภาษาจีนตัวย่อ
แอปที่เกี่ยวข้อง
NFT คอลเลกชันดิจิตอลศิลปะดิจิทัล APP H5 ซอร์สโค้ดซอร์สโค้ด
2024-02-13
เว็บไซต์เคมี asp ซอร์สโค้ด ซอร์สโค้ดสไตล์สีเขียว ซอร์สโค้ดองค์กร
2022-08-20
ซอร์สโค้ด ASP300
2022-07-01
ซอร์สโค้ดเครือข่ายการเสนอราคา
2012-08-22
ซอร์สโค้ด Tingshu.com
2011-12-29
ซอร์สโค้ด TCGCMS
2010-01-20
แนะนำสำหรับคุณ
กูเกิลโครม
การเรียกดูหน้าแรก
3.0.190.0 build 18892 绿色多语版_Google Chrome浏览器
กูเกิลโครม
การเรียกดูหน้าแรก
3.0.182.3 Dev 多国语言官方安装版
กูเกิลโครม
การเรียกดูหน้าแรก
3.0.182.3 Dev 多国语言绿色便携版
ข้อมูลเบื้องต้นโดยละเอียดเกี่ยวกับรูปแบบไฟล์ KML
บทช่วยสอน XML
เอกสารวิธีใช้เวอร์ชันภาษาจีน JDK 6.0 (พร้อมฟังก์ชันการค้นหา รูปแบบ chm)
การสอน JSP
โปรแกรมดักจับวิดีโอและส่งออนไลน์ในรูปแบบ MPEG4
วีซี/วีซี++
คู่มือ PHP เวอร์ชันภาษาจีน (รูปแบบ CHM แบบขยาย)
กวดวิชา PHP
ซอร์สโค้ดการแปลงออนไลน์ของรูปแบบวิดีโอ Flv
หมวดหมู่อื่นๆ
ฉบับภาษาจีนตัวย่อสีเขียวฟรี
การแปลงวิดีโอ
V1.90 简体中文绿色免费版
ข้อมูลที่เกี่ยวข้อง
ทั้งหมด
การจับคู่ซอร์สโค้ดหมอกน้ำค้างแข็งของดาวเคราะห์รีสตาร์ท
2024-04-23
คำแนะนำซอร์สโค้ด Planet Restart Eridanus และการแก้ปัญหา
2024-03-25
จะจับคู่ผู้เล่นตัวจริง 11 คนที่ดีที่สุดได้อย่างไร? ——เครือข่ายซอร์สโค้ด
2024-03-25
เกมมือถือ Everlasting Calamity สามารถเล่นบน Android ได้หรือไม่? Answers จากบรรณาธิการของ Source Code.com
2024-03-24
จะปรับปรุงประสิทธิภาพการต่อสู้อย่างรวดเร็วใน Back to the Future ได้อย่างไร? บรรณาธิการของ Source Code Network จะบอกกลยุทธ์ให้คุณทราบ
2024-03-20
วิธีเลือกซอร์สโค้ดของ Planet Restart Solar Wind
2024-03-18
คุณสมบัติทักษะการหมุนวนของซอร์สโค้ดโลกขนาดเล็ก
2024-03-12
รายละเอียดการจับคู่ซอร์สโค้ดของ Planet Restart Haidongqing
2023-12-21
รายการซอร์สโค้ดสำหรับ Planet Reboot: Rude Fear
2023-12-14
จะจับคู่ซอร์สโค้ดของ Planet Reboot ได้อย่างไร
2023-12-14
การพูดน้อยกลยุทธ์การตลาดอินเทอร์เน็ตหมายเลข 4: การตลาดซอร์สโค้ด
2011-02-24
การอภิปรายสั้นๆ เกี่ยวกับความสัมพันธ์ระหว่างซอร์สโค้ดของเว็บไซต์และ SEO
2011-02-15
ความคิดเห็นจากผู้ใช้