Published
- 8 min read
Hardware Cheat (DMA) 101
บทนำ
ปัญหาหลักของเกม Online Multiplayer ในปัจจุบันคือปัญหาการใช้โปรแกรมโกงในการช่วยเล่น เพื่อให้ผู้เล่นได้เปรียบต่อฝ่ายตรงข้าม และจำนวนของผู้เล่นที่ใช้โปรแกรมโกงนั้น ก็มีเพิ่มขึ้นเรื่อยๆ จนปัญหานี้ยากที่จะแก้ แม้ว่าบริษัทผู้พัฒนาเกมจะลงทุนในการวิจัยและพัฒนาโปรแกรม Anticheat ด้วยงบเท่าไหร่ก็ตาม ก็ยังไม่สามารถแก้ปัญหานี้ได้ 100%
ในขณะเดียวกัน ผู้พัฒนาโปรแกรมโกงเกมได้คิดวิธีการใหม่ๆ ที่นำมาใช้หลบเลี่ยงการตรวจจับโปรแกรมโกง หนึ่งในวิธีที่ได้ผลมากที่สุดใขณะนี้คือ การนำ Hardware มาช่วยในการพัฒนาโปรแกรมโกง (DMA Cheat)
การทำงานของ Anticheat
ก่อนอื่นลองมาทำความเข้าใจการทำงานของ Anticheat กันคร่าวๆก่อน ว่ามันมี process ยังไง
Anticheat สามารถแบ่งรูปแบบของการ monitor ได้ดังนี้
- Internal Environment Protection Anticheat จะคอยตรวจสอบอะไรก็ตามที่เกี่ยวข้องกับ
Process ของเกม ได้แก่ ไฟล์เกม, Memory (Protection ของ Region), Thread, Handle (Permission ของ Handle),
Module (DLL ต่างๆที่ตัวเกม load เข้ามา) เป็นต้น หากส่วนนึงส่วนใดที่กล่าวมา มีการถูกแก้ไข Anticheat สามารถ detect ได้คร่าวๆว่าผู้ใช้มีวัตถุประสงค์ในการโกง
ตัวอย่างเช่น หากไฟล์เกม ไม่ตรงกับ signature (หรือ hash) ของไฟล์เปลี่ยนไป เป็นไปได้ว่ามีการ modding ไฟล์เกม… หรือหากมี Memory Region เพิ่มเข้ามาด้วย Protection RWX เป็นไปได้ว่ามีการ inject code เข้ามาใน Process… และถ้าหากมี Thread ที่เกิดจาก Process ภายนอก หรือ มี DLL เพิ่มเข้ามา เป็นไปได้ว่ามีการทำ DLL Injection เข้ามาใน Process ของเกม รวมไปถึง การ Monitor การ call Windows API ของตัวเกม… ใน Anticheat บางตัว มีการทำ API Hooking เพื่อคอยดักจับ Parameter แปลกปลอม หรือมีการ Call API ที่โปรแกรมโกงมักจะเรียกใช้ - External Environment Protection ก็คือปัจจัยภายนอกอื่นๆที่ Anticheat สามารถ monitor และ Analyze ได้ เช่น Component ต่างๆ ของ OS ได้แก่ Registry (อาจจะมี Config ของ well-known tool ที่ใช้พัฒนาโปรแกรมโกงเกม), File, Process ทั้งหมดของระบบ (เปิดโปรแกรมที่ช่วยพัฒนาโปรแกรมโกงอยู่หรือไม่), Device Driver ของระบบ รวมไปถึง Config ของ OS เช่น Secure Boot หรือ Test-Signing Mode นั้นถูกเปิดหรือไม่
การที่ Anticheat จะสามารถ monitor โปรแกรมโกงได้อย่างมีประสิทธิภาพนั้น จะต้องมี module ที่ถูก develop ขึ้นมาทั้งที่เป็น Usermode Application และ Kernel Mode Driver เช่นส่วนที่คอย Hook การ Call Windows API ที่อยู่ฝั่ง UserMode และส่วนที่คอย Monitor การเปิดโปรแกรมแปลกปลอมอย่าง Cheat-Engine หรือ Monitor การสร้าง Thread ที่น่าสงสัย ซึ่งก็คือส่วนที่เป็น Kernel Driver
การ Bypass การทำงานของ Anticheat ในรูปแบบดั้งเดิม (Software)
จากที่อธิบายไปข้างต้น โปรแกรมโกงเกมในปัจจุบันมีวิธีการหลบเลี่ยง mechanism ในการตรวจจับอยู่หลายวิธี
ตัวอย่างเช่น หาก Anticheat มีการ hook Windows API ใน Process ของเกม เพื่อ monitor หา parameter แปลกปลอม วิธีการ Bypass ใน Usermode สามารถทำได้
โดยการเรียกใช้ Native API (ntdll.dll) แทนการ Call API จาก Subsystem DLL (kernel32.dll) เช่น หากเรามีการทำ DLL injection แทนที่จะ Call API LoadLibraryA
ก็เปลี่ยนไป API LdrLoadDll
ใช้แทน …
หรือในส่วนของการทำ DLL Injection โดยทั่วไป Injector จะ Call API CreateRemoteThread
เพื่อสร้าง Thread ใหม่ ในกรณีที่ Anticheat monitor การสร้าง Thread ของ Process ก็จะมีการ detect เจอว่ามีการ Inject code เข้ามา
วิธีที่จะข้ามการตรวจจับตรงนี้ไปได้ก็มีหลายวิธี … หนึ่งในวิธีที่เป็นไปได้คือ การ Inject DLL ด้วย การใช้ API QueueUserAPC
เพราะวิธีการนี้จะไม่ create thread ขึ้นมาใหม่ แต่จะคอยหา thread เดิมใน Process
ที่ อยู่ใน alertable state จากนั้นก็ป้อน RPC Code เข้าไปรอทำงานต่อแทน
โปแกรมโกงโดยทั่วๆไป มีการขอสิทธิ์ในการอานค่า Memory ของเกมซึ่งมักจะใช้ API ReadProcessMemory
ของ Windows … โดยปกติของระบบปฏิบัติการ Windows จะไม่ยอมให้ Process ใดๆ อ่านค่า Memory ของ Process อื่นได้
นอกจากว่า Process นั้น ได้เปิด HANDLE ของ Process เป้าหมายด้วยสิทธิ์ที่มากพอ (ผ่าน API OpenProcess
ด้วยสิทธิ์ PROCESS_VM_READ)
แต่ในขณะเดียวกัน Anticheat ก็มี Kernel Driver Module ที่คอย monitor การขอ HANDLE จาก Process ภายนอกอยู่ด้วย ก็จะโดน detect ได้ …
วิธีการ Bypass การ detect ตรงนี้ วิธีที่เป็นไปได้ คือตัวโปรแกรมโกงเกมจะเขียนอยู่ในรูปแบบของ Kernel Device Driver เพราะด้วยธรรมชาติของ Device Driver จะสามารถเข้าถึง Memory ของ Process ใดๆก็ได้ในระบบด้วยไม่มีการจำกัดสิทธิ์
จะเห็นว่ามันเป็นเกมแมวจับหนูระหว่าง Anticheat และโปรแกรมโกง ยังมีอีกหลายวิธีในการตรวจจับ และวิธีการ Bypass ใน Layer ของ Software ที่ไม่ได้กล่าวถึง เช่น PatchGuard / Kernel Callback / HWID / UEFI / HyperVisor / Computer Vision
แต่อย่างไรก็ตาม Anticheat นั้นคือจุดรักษาสมดุล นั่นหมายความว่า Anticheat ยังไม่ได้มีการยอมแพ้ในการ Detect และ banned ผู้เล่นที่ใช้โปรแกรมโกงแต่อย่างใด
DMA & DMA Attack
จุดเปลี่ยนครั้งใหม่ ของทั้ง 2 ฝั่งระหว่าง Anticheat และโปรแกรมโกงเกม คือ การนำหลักการในทาง Computer Science ที่เรียก Direct Memory Access (DMA) มาใช้ในการพัฒนาโปรแกรมโกง
Direct Memory Access (DMA) คือ feature นึงในระบบของ Computer ที่อนุญาตให้อุปการณ์ต่างๆ ในระบบสามารถเข้าถึง Memory หลักของระบบ ได้อย่างเป็นอิสระ โดยไม่ต้อง access ผ่านทาง CPU ทำไมถึงต้องมี feature นี้?
เพราะการเข้าถึง Memory ผ่านทาง CPU นั้นเป็น I/O รูปแบบนึง ด้วยธรรมชาติของ I/O จะเกิด latency สูง (I/O Duration) และเป็น Synchronous … CPU ไม่สามารถทำงานอย่างอื่นต่อได้ระหว่างที่กำลัง transfer data กับอุปกรณ์ และการ transfer data แบบใช้ I/O มีข้อจำกัดเรื่องขนาดของ data ด้วย
แต่กลับกันหากอุปกรณ์ใช้วิธีการ DMA ในการ transfer data … CPU มีหน้าที่แค่เริ่มต้นการ transfer data กับอุปกรณ์ จากนั้น CPU สามารถไปทำงานอย่างอื่นต่อได้ รอจนกว่า DMA controller จะมีการส่ง interrupt signal มาแจ้งเตือน CPU ว่าทำการ transfer เสร็จเรียบร้อย
และการส่ง data กันผ่าน DMA จะสามารถส่งข้อมูลในอัตราที่สูงได้ ผ่านทางพวก bus ประเภทต่างๆ เช่น PCI, PCIe, Thunderbolt
อุปกรณ์ที่ส่งข้อมูลกันด้วยวิธี DMA ได้แก่ network card / sound card เป็นต้น (หากส่งผ่าน CPU อุปกรณ์จะทำงานช้าเป็นอย่างมาก)
และด้วยความสามารถนี้ ได้มีการนำไปต่อยอดเป็นการโจมตีด้วยวิธีการ DMA คือการนำความสามารถไปใช้อ่านข้อมูลใน Memory โดยไม่ได้รับการอนุญาต (เป็น Side Channel Attack รูปแบบนึง)
FPGA Hardware
แน่นอนว่าการทำ DMA Attack นั้นจำเป็นต้องอาศัย hardware
บางประเภท ที่มีความสามารถในการคุยกับ hardware ในระบบ computer เครื่องเป้าหมาย เพื่อใช้ในการ access memory …
hardware ตัวนั้นคือ FPGA (Field Programmable Gate Array)
FPGA คือ IC (Integrated Circuit) ประเภทนึงที่ประกอบไปด้วย Logic block ที่เราสามารถโปรแกรม หรือสั่งให้ block ต่างๆ ทำตัวเป็น วงจร Digital/Logic Gate แบบต่างๆ
ได้ เช่น AND Gate, NOT Gate, OR Gate, XOR Gate เป็นต้น
นั้นหมายความว่า เราสามารถสั่งให้ hardware ทำอะไรก็ได้โดยการใช้ logic gate เล็กๆเหล่านี้รวบเป็นวงจร Digital ขนาดใหญ่
AND | NOT | OR | XOR | |
---|---|---|---|---|
ซึ่งการสั่งการบอร์ดให้ทำงานตามที่เราอยากได้จะได้อาศัยคำสั่ง HDL ซึ่งปัจจุบันมี 2 ภาษาที่ได้รับความนิยมคือ VHDL และ Verilog ซึ่ง Syntax ของสองภาษานี้ต่างกันโดยสิ้นเชิง แต่มีวัตถุประสงค์เดียวกัน คือแทนที่จะวาด Logic Gate ซึ่งมีความซับซ้อน Hardware Designer ก็จะใช้ 2 ภาษานี้แทน (ปัจจุบันมีภาษาเพิ่มเข้ามาคือ HLS ซึ่งใช้ภาษา C++ มาช่วยแปลงอีกชั้นนึง)
FPGA นั้นสามารถแบ่งออกเป็น 2 ประเภทตามรูปแบบการ development ได้แก่
- External Development Board จะประกอบไปด้วย Control และ Input/Output ต่างๆได้แก่ button / switch / LED / Display / Sound Port / SD Card / VGA เป็นบอร์ดที่เน้นไปทางการเรียนการสอน ราคาจะถูกกว่า
- Internal Development Board ส่วนใหญ่จะใช้ PCI Express slot ในการ connect กับ Computer และจะมี Control น้อยกว่า จะมีมาให้แค่ เช่น Ethernet และ USB … Internal จะมีราคาสูงมาก (ซึ่ง board ประเภท internal นี้เองที่จะนำมาใช้ทำ DMA Attack)
ในปัจจุบันมีเจ้าตลาด FPGA Chip อยู่ 2 เจ้าคือ Xilinx (ถูกซื้อโดย AMD) และ Altera (ถูกซื้อโดย Intel)
Xilinx IP Core
ซึ่งปัจจุนมี Chip ตะกูล ARTIX-7 (XC7AXXXX) ของ Xilinx ที่มีความสามารถในการทำ DMA ผ่าน PCI Express
ได้ เนื่องจากทีมพัฒนาของ Xilinx มีการ implement IP Core (Intellectual Property) สำหรับ DMA ของตัวเองขึ้นมาเพื่อ support การใช้งานในอุปกรณ์ของ Xilinx เอง…
***ขยายความเรื่อง IP Core จากที่อธิบายไปข้างต้นเรื่อง FPGA น้ันมีความสามารถในการโปรแกรม logic gate ลงไปได้ … ทางผู้พัฒนา FPGA Chip เองมีการพัฒนาวงจร Digital สำเร็จรูปขึ้นมา ให้จินตนาการว่ามันคือ Library ที่เราสามารถ install เพิ่มเข้ามาในโปรเจ็ค ช่วยให้เราทำงานด้าน Digital Design ได้เร็วขึ้น ไม่ต้องคอยเขียน HDL ขึ้นมาตั้งแต่ต้น ซึ่ง IP Core นั้นก็ถือเป็นจุดขาย Chip FPGA ของแต่ละค่ายด้วยเหมือนกัน เพราะ developer ต้องเลือกใช้ให้เหมาะกับงานที่จะทำ ซึ่ง IP Core โดยส่วนมากจะอยู่ในรูปแบบ GUI Block… Digital Designer มีหน้าทีลากมาวางใน Project แล้วทำการ config ค่าลงไป ผ่าน Software ของผู้พัฒนา FPGA แต่ละเจ้า
PCI Express
PCI Express หรือ PCIe คือ (Fake) Bus Topology ที่ใช้ในการ transfer data ระหว่าง CPU, Memory และ Hardware Device อื่นๆ ที่เชื่อมต่อกันผ่าน motherboard ใน PC ถูกพัฒนามาแทนที่ PCI และ PCI-X และถูกเปลี่ยนจากการส่ง data แบบเดิมที่ส่ง data กันผ่าน Bus จริงๆ (มีการเชื่อม Bus ไปหา slot ของ Device) มาเป็นการส่ง Packet คุยกันแทนคล้ายๆกับ Network Switch ที่เป็นแบบ Point-to-Point ที่ทุก Device อย่างเช่น GPU / Sound Card / Network Card เข้ามาเชื่อมต่อด้วยกัน ที่ Switch ตรงกลาง แต่ต่างกันตรงที่ PCIe ไม่ได้ใช้ MAC Address หรือ Network IP ในการระบุตำแหน่ง แต่จะอาศัย Configuration Space และ BDF (Bus/Device/Function) ในการระบุตัวตนแทน
TLP(Transaction Layer Packet)
ทุก PCIE Operation ที่เกิดขึ้นใน PCIe topology ตามรูปข้างต้น จะถูกเรียกว่า Transaction … สามารถแบ่ง Transaction ออกได้เป็น 4 ประเภทดังนี้
- Memory Transaction
- IO Transaction
- Configuration Transaction
- Message Transaction
การทำ Transaction ใดๆจะถูกส่งผ่าน Packet ที่ชื่อ TLP(Transaction Layer Packet)ซึ่งก็คือ packet หลักที่ PCIe Device คุยกัน…
ในการทำ DMA Operation จะสนใจ Transaction ประเภท Memory Transaction ซึ่ง Transaction ดังกล่าวจะมีโครงสร้าง จะมีรูปแบบของ packet ที่เป็นไปได้คือ
- Read Request Packet คือ packet ที่ device (Requestor) ส่งไปหา Root Complex สำหรับการอ่านค่าจาก Physical Memory
- Completion Packet คือ packet ที่ Root Complex ตอบมายัง Requestor พร้อมกับ Payload จาก Physical Memory
- Write Request Packet คือ packet ที่ device (Requestor) ใช้สำหรับการเขียนค่าไปยัง Memory ซึ่งจะมี Payload สำหรับการเขียนส่งไปด้วย
Pcileech
สามารถอ่านรายเอียดเพิ่มเติมจาก Github ของคุณ Ulf Frisk ได้ แต่อธิบายคร่าวๆคือ ชุด software pcileech นั้น สามารถแบ่งออกเป็น 2 ตัวคือ
- pcileech Bitstream (Gateware/Firmware) คือ HDL code
ที่ใช้สำหรับเปิด feature DMA ให้แก่บอร์ด FPGA โดยอาศัย DMA IP Core ของ xilinx ตามที่อธิบายไปข้างต้น ซึ่งจะมี list ของ device ที่คุณ Ulf Frisk
ได้ทำการ develop และ support ดังนี้
- pcileech Client คือ โปรแกรมที่เป็น client ที่คอย control FPGA บอร์ดอีกที โดย client ของ pcileech จะคอยบอกให้ FPGA บอร์ด ทำ DMA Operation ต่างๆ ด้วยการส่ง TLP Packet ตามที่อธิบายไปข้างต้น
หลักการทำงานของ Pcileech/FGPA Based ของคุณ Ulf Frisk คร่าวๆคือ จะต้องอาศัย Computer 2 เครื่อง โดยเครื่องแรกจะติดตั้งโปรแกรม Pcileech Client ที่จะคอยบอกคำสั่งไปยัง FPGA Device ที่ได้ทำการติดตั้งไว้ใน Computer ของเหยื่อ (เครื่องที่ 2) ให้ทำ DMA Operation ต่างๆ โดย FGPA Device จะทำการ Copy Physical Memory ของเครื่องเหยื่อ มายัง Memory ของ FGPA Device จากนั้นก็จะส่ง Memory กลับมายัง Computer เครื่องที่ติดตั้ง Pcileech Client ไว้ … Pcileech Client จะคอยแปลง (parsing) Physical Memory ตรงนั้น กลับขึ้นมาเป็น Virtual Memory อีกครั้งเพื่อให้ Windows OS เข้าใจเนื้อหาของ Data (ในความเป็นจริง โปรแกรม ที่อยู่ใน Ring 3 ไม่ได้ใช้ Physical ในการเข้าถึงข้อมูลอยู่แล้ว) ทำให้ Pcileech client นั้น อ่าน/เขียน Memory ไป Computer ของเหยื่อ ได้
DMA Attack Mitigation
อย่างไรก็ตามทางผู้พัฒนา Hardware และ Operating System เห็นความอันตรายของ DMA Attack … ทางฝั่ง hardware vendor อย่างเช่น Intel ก็มีเทคโนโลยีอย่าง Intel VT-d (IO/MMU) ส่วน Windows เอง ก็มี Virtualization-Based Security (VBS) ที่จะช่วยป้องกันการทำ DMA Attack
LeechCore & DMA Cheat Era
กลับมาพูดถึง Anticheat และ Cheater กันต่อ … คุณ Ulf Frisk ได้มีการ publish ตัว source code และเอกสารในการพัฒนา LeechCore ซึ่งเป็น Common Library ที่ใช้สำหรับในการทำ DMA Attack (เป็น core library ของ Pcileech) … ทำให้นักพัฒนาโปรแกรมโกงเกมเห็นความสามารถในการ Read/Write Memory ด้วยการใช้
FPGA Device ซึ่งสามารถหลีกเลี่ยงการตรวจจับของ Anticheat ที่มีสิทธิ์อยู่แค่ใน Software Layer ซึ่ง หลักการทำงานของ DMA Cheat จริงๆแล้วก็คือการอาศัย ความสามารถของ LeechCore ในการทำ DMA Attack รูปแบบนึง ซึ่งก็คือสิ่งที่อธิบายมาแล้วทั้งหมด เช่นจากเดิมที่โปรแกรม โกงเกมทำงานอยู่เครื่องเดียวกับ Process ของเกม … ทำให้ Anticheat มี Detection factor ที่หลากหลาย แต่กลับกัน ที่โปรแกรมโกงเกม ถูก execute ที่ Computer อีกเครื่อง ทำให้ Detection factor ของ Anticheat ลดลงเป็นอย่างมากถ้าเปรียบเทียบกับ โปรแกรมโกงที่เป็น Software based ที่ access resource ของเกมภายในเครื่องเดียวกัน แบบที่อธิบายไปตอนแรก
ตัวอย่าง DMA Cheat ที่ผู้เขียนทำการพัฒนาขึ้นเพื่อใช้ในกรณีศึกษาเท่านั้น สามารถศึกษา source code ได้ที่ https://github.com/un4ckn0wl3z/Pinball3D-DMA-Cheat
Detection factor for DMA Cheat
เนื่องจากที่อธิบายไปข้างต้นเกี่ยวกับการระบุตัวตนของ PCIe Device นั้นจะใช้ Configuration Space ซึ่งเป็น
Memory region นึงที่ PCIe device ทำการจองไว้ใน Memory ของเครื่องซึ่งจะประกอบไปด้วยข้อมูลพื้นฐานของ PCIe Device
ปัจจุบัน Configuration Space จึงเป็น Detection factor ที่ใช้สำหรับตรวจจับ DMA Cheat โดย Anticheat
ต้องอาศัยการทำ Blacklist Signature ของ Configuration Space ของ Well-known DMA Device เอาไว้แล้วนำมาเปรียบเทียบกัน หาก signature นั้น matching
ก็อนุมานได้ว่ามีการติดตั้ง PCIe Device ที่ใช้สำหรับการโกงเกม …
อย่างไรก็ตาม การทำ Blacklist Configuration Space อาจได้ผลลัพธ์ที่เหนือความคาดหมายคือ Anticheat ดันไปแบน Hardware จริงๆของผู้เล่น ที่ไม่ได้ทำการโกงแต่อย่างใด
ความสามารถในการทำ Heuristic analysis ด้วยลำพัง Anticheat เองอาจจะไม่สามารถป้องการ DMA Cheat ได้มากพอ อาจจะต้องอาศัย feature ของ Windows ช่วยเสริมด้วย เช่น อาจจะต้องบังคับผู้เล่นให้เปิด feature Virtualization-based Security (VBS), Secure Boot รวมไปถึง Intel VT-d (IO/MMU)
ตัวอย่างการ Detected DMA Cheat Device ที่ผู้เขียนทำการพัฒนาขึ้นเพื่อใช้ในกรณีศึกษา ด้วยวิธี Blacklist Signature ค่า Default Configuration Space ของ Pcileech Gateware สามารถศึกษา source code ได้ที่ https://github.com/un4ckn0wl3z/PCIE-Detector
แต่อย่างที่บอกไปว่านี่มันคือเกมแมวจับหนูระหว่าง Anticheat กับ Cheater … จะเกิดอะไรขึ้น ถ้าเราสามารถปลอม FPGA Device เป็น PCIe Device อะไรก็ได้???FPGA/DMA Custom Firmware
Hidden Content
Hidden Content
Hidden Content
ผู้เขียนไม่สามารถให้ข้อมูลเกี่ยวกับการ custom pcileech firmware ได้ เพราะไม่อยากเพิ่มจำนวนประชากร Cheater (แต่สามารถหาอ่านเองได้บน Internet)
Hidden Content
Hidden Content
Hidden Content
End
ขอปิดท้ายด้วยประมวลภาพการ setup FPGA/DMA Device ของผู้เขียน
ข้อมูลการติดต่อ
ส่วนตัวผู้เขียนเองไม่มีข้อมูลการติดต่อใดๆ แต่จะอาศัย Discord ของคุณ 0x01code ในการพูดคุย ใครที่สนใจเรื่อง Computer Security และ Game Hacking สามารถ join Discord มาพูดคุยกันได้ >> https://discord.gg/XGVH6fY2K9
References
วงการ Hack เกมเขาไปถึงไหนกันแล้ว [9arm]: https://youtu.be/JsRoDM-Glag?si=y0xaORPV9w-oy0RD
DMA คืออะไร: https://youtu.be/Hmo8XJ1M3b4
แฮก Windows ด้วย DMA Card: https://youtu.be/3tcLlf54qJ4
https://www.dma-cheats.com/
https://en.wikipedia.org/wiki/DMA_attack
https://en.wikipedia.org/wiki/Direct_memory_access
https://github.com/ufrisk/pcileech
https://github.com/ufrisk/LeechCore
https://www.unknowncheats.me/forum/valorant/620587-detection-vectors-dma.html
https://numato.com/kb/create-pcie-dma-example-design-for-nereid-2/
https://www.coursera.org/specializations/fpga-design
https://astralvx.com/tag/pcileech/
https://astralvx.com/introduction-to-pcie/
https://xillybus.com/tutorials/pci-express-tlp-pcie-primer-tutorial-guide-1
https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-kernel-dma-protection
https://xillybus.com/tutorials/pci-express-tlp-pcie-primer-tutorial-guide-2
https://xillybus.com/tutorials/versal-apac-pcie-cips-cpm
https://pcisig.com/specifications/pciexpress/
https://www.fpga4fun.com/PCI-Express.html
https://nandland.com/fpga-101/
https://nandland.com/learn-verilog/
https://nandland.com/learn-vhdl/
https://en.wikipedia.org/wiki/Memory_management_unit
https://wiki.osdev.org/PCI
https://www.mindshare.com/files/resources/MindShare_Intro_to_PCIe.pdf
https://en.wikipedia.org/wiki/PCI_Express
Demo: Live VM memory introspection with MemProcFS and PCILeech: https://youtu.be/oHn8PB8dv6c
[Disobey 2020] Live Memory Attacks and Forensics - Ulf Frisk: https://youtu.be/mca3rLsHuTA
https://github.com/Metick/DMALibrary
https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-vbs
https://hansanimperera.medium.com/a-dive-into-windows-internals-processes-threads-handles-and-the-registry-e0efdac81a3a
https://gear.kku.ac.th/~ying/188360%20AdvDSD/fpga_design.pdf
https://ndrsolution.com/2021/12/07/fpga-fpga-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/
https://msit5.wordpress.com/2013/09/07/dma-direct-memory-access-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/
https://docs.amd.com/r/en-US/ug1085-zynq-ultrascale-trm/PCI-Express-Controller
https://docs.amd.com/r/en-US/ug1085-zynq-ultrascale-trm/DMA
https://whiteknightlabs.com/2024/02/09/a-technical-deep-dive-comparing-anti-cheat-bypass-and-edr-bypass/
https://www.mindshare.com/files/ebooks/pci%20express%20system%20architecture.pdf
https://ctf.re/windows/kernel/pcie/tutorial/2023/02/14/pcie-part-1/
https://www.ti.com/lit/an/snla415/snla415.pdf?ts=1723382856821&ref_url=https%253A%252F%252Fwww.google.com%252F
https://www.linkedin.com/learning/learning-fpga-development