สวัสดีและยินดีต้อนรับกลับมา
ในบทเรียนวิดีโอนี้ เราจะศึกษาเกี่ยวกับหน่วยความจำเสมือน
ระบบคอมพิวเตอร์มี RAM จำกัด แต่เราสามารถรันโปรแกรมหรือกระบวนการที่ใช้หน่วยความจำจำนวนมหาศาลได้
ซึ่งสามารถทำได้ด้วยการใช้สิ่งที่เรียกว่าหน่วยความจำเสมือน
หน่วยความจำเสมือนช่วยให้โปรแกรมคอมพิวเตอร์มีหน่วยความจำมหาศาลเกินกว่าหน่วยความจำจริงของ
RAM
มาดูแนวคิดโดยละเอียดกันเลยดีกว่า
นี่คือแผนภาพแสดงวิธีการทำงานของโปรแกรมคอมพิวเตอร์
มีส่วนประกอบหลักสามประการ
ซีพียู
แรม
ซึ่งเป็นความทรงจำหลักของคุณ
เรียกอีกอย่างว่าหน่วยความจำเข้าถึงโดยสุ่มและฮาร์ดดิสก์ โปรแกรมจะถูกเก็บไว้ในฮาร์ดดิสก์
แต่เพื่อให้ CPU สามารถดำเนินการโค้ดและคำสั่งในโปรแกรมได้ ระบบปฏิบัติการจะโหลดโปรแกรมเข้าสู่หน่วยความจำ
RAM ก่อน และสร้างกระบวนการขึ้นมา
จากนั้น CPU จะอ่านคำสั่งจาก RAM และดำเนินการตามคำสั่งเหล่านั้น
ในปัจจุบัน RAM มีราคาค่อนข้างถูก แต่ในสมัยก่อนนั้นมีราคาค่อนข้างแพงเมื่อเทียบกับฮาร์ดดิสก์
หน่วยความจำเสมือนถูกสร้างขึ้นเพื่อขยาย RAM ที่มีอยู่
ดังนั้นหน่วยความจำเสมือนจึงสร้างภาพลวงตาให้กับกระบวนการ โดยให้ภาพลวงตาว่ามี RAM จำนวนมากที่พร้อมให้ใช้เฉพาะกับกระบวนการใดๆ
เท่านั้น
สิ่งนี้เป็นไปได้ด้วยแนวคิดของการจำลองเสมือนหรือ RAM เสมือน
หน่วยความจำเสมือน
ตอนนี้ในแผนภาพนี้
คุณจะเห็นได้ว่า RAM ที่มีอยู่จริงอาจมีขนาดเพียงหนึ่งกิกะไบต์เท่านั้น
แต่เนื่องจากการจำลองเสมือนหรือหน่วยความจำเสมือน กระบวนการจึงสามารถเข้าถึงได้ถึงสี่กิกะไบต์หรือมากกว่านั้นสำหรับระบบปฏิบัติการ
64 บิต
ไม่เพียงเท่านั้น กระบวนการต่างๆ มากมายสามารถทำงานแบบขนานกันได้เกือบหมด และแต่ละกระบวนการสามารถสัญญาได้ถึง
4 กิกะไบต์ แม้ว่า RAM จริงจะมีเพียงหนึ่งกิกะไบต์ก็ตาม และสามารถทำงานแบบขนานกันได้โดยไม่รบกวนกัน
แล้วมันจะเป็นไปได้อย่างไร?
สิ่งนี้เป็นไปได้เพราะฮาร์ดดิสก์ถูกใช้เป็นหน่วยความจำเสมือน
ดังนั้นฮาร์ดดิสก์ที่รวมเข้ากับหน่วยความจำทางกายภาพจริงจะสร้างความสามารถในการสร้างหน่วยความจำเสมือน
ดังนั้นสิ่งใดก็ตามที่ไม่เพียงพอ คุณจะใช้ฮาร์ดดิสก์เพื่อทำหน้าที่เป็นหน่วยความจำเสมือนหรือ RAM เสมือน
ลองยกตัวอย่าง เรามีสองกระบวนการ คือ กระบวนการที่หนึ่งและกระบวนการที่สอง
กระบวนการที่หนึ่งอาจมีสองหน้า
หน้าเป็นเพียงส่วนหนึ่งของบล็อกหน่วยความจำ
ดังนั้น หากถือว่ากระบวนการหนึ่งใช้พื้นที่หนึ่งหน้าในหน่วยความจำทางกายภาพ จากนั้นจึงโหลดหน้าที่สองไว้ที่นั่นด้วย
แต่แล้วก็มาถึงขั้นตอนที่สอง
ใครจำเป็นต้องใช้หนึ่งหน้า
ระบบปฏิบัติการจะสลับหน้าที่สองจากหน่วยความจำทางกายภาพไปยังฮาร์ดดิสก์
ดังนั้นหน้าที่สองซึ่งอยู่ในกระบวนการที่หนึ่งยังคงอยู่ในหน่วยความจำเสมือนแต่ถูกสลับไปที่ฮาร์ดดิสก์
ทำเช่นนี้เพื่อให้กระบวนการที่สองสามารถโหลดเพจของตนลงในหน่วยความจำทางกายภาพได้
และเมื่อกระบวนการที่สองเสร็จสิ้นการดำเนินการ
จากนั้นหน้าที่สองจะถูกสลับกลับเข้าไปในหน่วยความจำทางกายภาพเพื่อให้กระบวนการที่หนึ่งดำเนินการดำเนินการต่อ
ตอนนี้การดำเนินการเสร็จสิ้นอย่างรวดเร็วและราบรื่นมากจนผู้ใช้ไม่สังเกตเห็น
ดังนั้นนี่คือสิ่งที่ทำให้มีหน่วยความจำเสมือนซึ่งมีขนาดใหญ่กว่าหน่วยความจำทางกายภาพจริงของคุณมาก
เราใช้ฮาร์ดดิสก์เพื่อสร้างภาพลวงตาว่ามีหน่วยความจำจำนวนมาก
ตอนนี้เรามาทำการทำงานเชิงปฏิบัติกันบ้างดีกว่า
ไปดาวน์โหลดสิ่งนี้ได้เลย
หากคุณยังไม่ได้ทำเช่นนั้น
ตัวอย่าง. ตอนนี้เราจะดำเนินการตัวอย่าง 4-1 และเปิดเพื่อใช้ตรวจสอบ
กระบวนการแฮ็กเกอร์
เมื่อเลื่อนลงไปด้านล่าง เราจะเห็นว่าตัวอย่างที่ 4-1 อยู่ในหน่วยความจำ
หากคุณดับเบิลคลิกที่นี่ เราจะได้รับรายละเอียดเพิ่มเติมและข้อมูลเกี่ยวกับกระบวนการนี้
ตอนนี้ไปดู Memory กัน
ที่นี่คือที่ที่คุณสามารถดูหน่วยความจำทั้งหมดที่กำลังใช้งานอยู่
หน่วยความจำเสมือนสำหรับกระบวนการนี้
ตัวอย่างที่ 4-1 exe ตรงนี้คุณจะเห็นที่อยู่ฐาน
จากนั้นในคอลัมน์ที่สอง คุณสามารถดูได้ว่ามีการแมปไว้หรือไม่ เป็นรูปภาพ หรือเป็นส่วนตัว
จากนั้นในคอลัมน์ที่สาม คุณจะเห็นขนาดของบล็อกหน่วยความจำแต่ละบล็อก
และคุณก็สามารถดูการอนุญาตได้
ในคอลัมน์ที่สี่
อ่าน เขียน หรืออ่าน
เขียน.
ดำเนินการหรือเขียน
มุ่งมั่นและดำเนินการ
และอื่นๆอีกมากมาย
สำหรับแต่ละรายการ คุณยังสามารถขยายและดูรายละเอียดภายในที่นี่ได้
แล้วคำว่าส่วนตัวนี้หมายถึงอะไร?
ส่วนตัวหมายถึงตำแหน่งหน่วยความจำนี้ไม่ได้แชร์กับกระบวนการอื่น
เช่น สแต็ค
สแต็กคือที่ที่กระบวนการจัดเก็บตัวแปรภายในเครื่อง
รวมถึงเมื่อมัลแวร์แตกตัวของตัวเองด้วย
นอกจากนี้ยังใช้ตำแหน่งหน่วยความจำส่วนตัวด้วย ดังนั้นแพ็กเกอร์และมัลแวร์จะใช้ตำแหน่งส่วนตัว
และยังใช้ประโยชน์จาก API ที่เรียกว่า VirtualAlloc ด้วย
ดังนั้น VirtualAlloc API มักจะแยกโปรแกรมไปยังตำแหน่งหน่วยความจำส่วนตัว
รูปภาพ
รูปภาพคือโมดูลของโปรแกรม
ตัวอย่างเช่น ไฟล์ปฏิบัติการและตำแหน่งหน่วยความจำ DLL ที่มีโค้ดที่ใช้ในการดำเนินการ รวมถึงไลบรารีลิงก์ไดนามิก
เรียกว่า รูปภาพ
เราก็มีแผนที่ด้วย
บางครั้งบางส่วนของไฟล์บนดิสก์จำเป็นต้องถูกแมปลงในหน่วยความจำเสมือนเพื่อให้กระบวนการใช้งานได้
ดังนั้นส่วนของหน่วยความจำที่มีข้อมูลแมปดังกล่าวจึงเรียกว่า แมป และกระบวนการนี้สามารถปรับเปลี่ยนเนื้อหาของไฟล์บนฮาร์ดดิสก์ได้โดยการปรับเปลี่ยนเนื้อหาที่แมปไว้ในหน่วยความจำโดยตรง
ดังนั้นแผนที่เป็นเพียงตัวชี้ไปยังฮาร์ดดิสก์ ดังนั้นเมื่อกระบวนการต้องการเข้าถึงบางสิ่งบางอย่าง มันจะผ่านตำแหน่งต่างๆ
ในแผนที่ซึ่งจะอ้างอิงถึงฮาร์ดดิสก์ในที่สุด
นั่นคือความหมายของแผนที่
ภายในนี้ หากคุณขยายบล็อกหน่วยความจำนี้ คุณจะเห็นคอมมิท และบางส่วนอาจสำรองไว้
และบางครั้งคุณยังมองเห็นว่าฟรีด้วย
Commit หมายความว่าจะต้องมีพื้นที่ทางกายภาพใน RAM ที่ได้รับการจัดสรรให้
นั่นเป็นเพียงความมุ่งมั่น
หากคุณเห็นการสำรอง แสดงว่ายังไม่ได้รับการจัดสรรหน่วยความจำ RAM ทางกายภาพ แต่กำลังถูกจองอยู่
เมื่อหน่วยความจำทางกายภาพใน RAM ถูกจัดสรรให้กับหน่วยความจำเสมือนแล้ว หน่วยความจำนั้นจะเปลี่ยนไปเป็นคอมมิต
และบางครั้งคุณจะเห็นว่าฟรี
ฟรี หมายความว่าที่อยู่เหล่านั้นอยู่ในหน่วยความจำเสมือน แต่ยังไม่ได้รับการกำหนดหรือทำให้พร้อมใช้งานสำหรับกระบวนการ
จากนั้นคุณจะเห็นว่าภายใต้คอลัมน์ Protection คุณได้อ่าน เขียน และดำเนินการแล้ว
การอ่านหมายความว่าสามารถอ่านเนื้อหาของหน่วยความจำนั้นได้ แต่คุณไม่สามารถเขียนลงในตำแหน่งหน่วยความจำเหล่านั้นได้ และไม่สามารถดำเนินการอะไรๆ
ในตำแหน่งหน่วยความจำนี้ได้
เขียน.
การเขียนหมายถึงสามารถอ่านหรือเขียนเนื้อหาของตำแหน่งหน่วยความจำนั้นได้ และ X.
ดำเนินการ.
การดำเนินการหมายถึงตำแหน่งนั้นที่ประกอบด้วยโค้ดที่สามารถดำเนินการหรือรันได้
ดังนั้นเมื่อคุณเห็นว่ามี X อยู่ที่นั่น แสดงว่านี่คือตำแหน่งที่คุณจะพบโค้ดสำหรับการรันโปรแกรมได้
ต่อไปเราจะมาดูสตริงในหน่วยความจำเสมือน
ความทรงจำของกระบวนการ
มีข้อมูลจำนวนมากที่ถูกใช้โดยกระบวนการระหว่างการดำเนินการ
ข้อมูลบางส่วนเป็นสตริงที่มนุษย์สามารถอ่านได้ เช่น URL ชื่อโดเมน ที่อยู่ IP ชื่อไฟล์ ชื่อเครื่องมือ
และอื่นๆ
หากคุณคลิกที่บล็อกหน่วยความจำใดๆ ที่นี่ มุมมองเลขฐานสิบหกจะเปิดขึ้นมา
มันจะแสดงไบต์ดิบที่พบในตำแหน่งเหล่านั้น
ตัวอย่างเช่น เมื่อคุณดับเบิลคลิกที่นี่ มุมมองเลขฐานสิบหกจะเปิดขึ้นมา
และคุณสามารถเห็นตำแหน่งนี้ที่นี่ 400000 ตามด้วยศูนย์ประกอบด้วยไบต์ทั้งหมดเหล่านี้และไบต์วิเศษ
4D 5A ซึ่งเราจะดูต่อไป
ดังนั้นนี่บอกคุณว่านี่คือตำแหน่งที่สามารถปฏิบัติการได้เนื่องจากไบต์วิเศษ MZ นี้
คอลัมน์นี้จะแสดงการตีความของไบต์เหล่านี้
บางครั้งคุณจะเห็นตัวอักษรสุ่มแบบนี้
เนื่องจากบางส่วนเป็นโค้ดที่สามารถปฏิบัติการได้และบางส่วนยังเป็นสตริงด้วยซ้ำ
เช่น มีคำว่า Hello world อยู่ที่นั่น
ขณะนี้คอลัมน์แรกเป็นค่าออฟเซ็ตของข้อมูลจากที่อยู่เริ่มต้นของบล็อกหน่วยความจำ
ดังนั้นเมื่อคุณเห็นศูนย์ที่นี่ แสดงว่ามีการชดเชยจากที่อยู่ 400000
หากฉันไปที่ตำแหน่งนี้และเปิดมุมมองเลขฐานสิบหก 00000010 จะถูกชดเชยจากที่อยู่ 400000 และที่นี่ 000 คือออฟเซ็ตจากที่อยู่นี้
401000.
สิ่งสำคัญที่ต้องทราบตอนนี้คือคอลัมน์นี้ซึ่งประกอบด้วยสตริง แม้ว่าไบต์บางส่วนจะไม่ใช่สตริงจริงๆ
แต่โปรแกรมดูเลขฐานสิบหกจะพยายามแปลให้เป็นโค้ดที่มนุษย์อ่านได้ ซึ่งก็คือสตริงที่มนุษย์อ่านได้
คุณสามารถค้นหาสตริงด้วยวิธีนี้ได้ แต่มีวิธีที่ง่ายกว่า
คุณสามารถใช้ปุ่ม Strings ได้ที่นี่
คุณสามารถระบุความยาวขั้นต่ำและอื่นๆ รวมถึงค้นหาสตริงในภูมิภาคใดก็ได้
จากนั้นคลิกตกลง
จากนั้นมันจะค้นหาสตริงทั้งหมดให้กับคุณ
และคุณสามารถเลื่อนลงมาดูสตริงที่นี่
และคุณสามารถกรองมันออกได้
สม่ำเสมอ. ดังนั้นการใช้เทคนิคนี้ คุณจะสามารถค้นหาข้อมูลเกี่ยวกับมัลแวร์ได้มากมาย
มาลองกันอีกครั้งดีกว่า
และครั้งนี้เราจะมาเพิ่มรูปภาพ
เอาล่ะ.
ตอนนี้ก็พบสายเพิ่มเติมแล้ว
และคุณจะเห็นว่าเมื่อฉันเลื่อนดู ฉันจะเห็นคำว่า Hello world ที่นั่นและที่อยู่หน่วยความจำนี้
แล้วคุณสามารถกรองเพิ่มเติมได้ที่นี่
เมื่อไหร่ก็ตามที่คุณต้องการ
คุณสามารถใช้ regex สำหรับนิพจน์ทั่วไปและอื่นๆ และสตริงที่มีอักขระอะไร
หากคุณกำลังมองหาสายเฉพาะ
บางครั้งคุณอาจต้องการค้นหา http
และคุณสามารถเห็น http บางส่วนได้ที่นี่
และนี่อาจเปิดเผยเซิร์ฟเวอร์บางส่วนที่กระบวนการของคุณพยายามเชื่อมต่อด้วย
ดังนั้นเราจึงสามารถใช้การค้นหาสตริงแบบนี้และการวิเคราะห์แบบนี้เพื่อต่อต้านมัลแวร์ได้
ดังนั้น การวิเคราะห์หน่วยความจำเสมือนจะให้ข้อมูลมากมายสำหรับการตรวจจับมัลแวร์
ดังที่คุณจะเห็น เพียงแค่วิเคราะห์แบบนี้ก็สามารถบอกได้ว่านี่คือมัลแวร์หรือไม่
คุณยังสามารถรับข้อมูลเกี่ยวกับชื่อมัลแวร์ ชื่อแฮกเกอร์ จุดหมายปลายทาง URL ที่อยู่ IP และอื่นๆ
ได้อีกด้วย
นี่จึงเป็นวิธีง่ายๆ ในการตรวจจับและจำแนกมัลแวร์
นั่นก็คือทั้งหมดสำหรับบทเรียนนี้
ขอบคุณที่รับชมครับ.
แล้วพบกันใหม่ในตอนหน้าครับ