ดังนั้นให้เริ่มใช้งาน x64dbg ของคุณ
จากนั้นตั้งค่าตัวเลือก การกำหนดลักษณะ ยกเลิกเลือกจุดพักระบบและการโทรกลับ
คลิกบันทึก
จากนั้นเปิดมัลแวร์
เลือกไฟล์ทั้งหมด
และเลือกมัลแวร์ Simda แล้วกดเปิด
และตอนนี้คุณควรจะอยู่ที่จุดเข้าแล้ว
และตอนนี้เราจะมาใส่จุดพัก
เราจะกำหนดจุดพักที่อยู่นี้คือ 0x401156
จากนั้นไปที่บรรทัดคำสั่งแล้วพิมพ์ bp ตามด้วยที่อยู่ ซึ่งคุณสามารถคลิกขวาแล้วคัดลอกจาก
Ghidra ได้
วางไว้ที่นี่
และกด Enter
และข้อความแจ้งว่า "จุดหยุดที่ตั้งค่าเป็น 0x401156" แล้วคลิกที่แท็บจุดหยุดเพื่อยืนยันอีกครั้ง
และตอนนี้คุณสามารถวิ่งไปที่จุดพักได้
และเราก็ได้ไปถึงจุดพัก 0x401156 แล้ว
ตกลง.
ตอนนี้คุณจะเห็นว่า EAX มีที่อยู่ที่จะกระโดดไป
ดังนั้นเรามาปล่อยให้มันทำหน้าที่ของมันกันดีกว่า
ดังนั้นมันจะถูกผลักไปที่สแต็ก
ดังนั้นนี่คือการผลักที่ผิดปกติตามด้วยการถอยหลังที่ผิดปกติ
ตอนนี้มันจึงถูกผลักไปที่สแต็กแล้ว ตามที่คุณเห็นที่นี่ มันอยู่บนสแต็ก
และเมื่อมันกลับมา มันก็จะกลับมาที่อยู่นี้
นี่จึงเป็นผลตอบแทนที่ผิดปกติ
ดังนั้นที่นี่ คุณจะเห็นว่านี่น่าจะเป็นเชลล์โค้ดที่ถูกแยกไว้ในหน่วยความจำ
ตอนนี้เราจะดัมพ์เชลล์โค้ดนี้และวิเคราะห์ใน Ghidra
วิธีหนึ่งในการทำเช่นนี้คือใช้คำสั่ง saveddata
ดังนั้นคำสั่ง saveddata จึงมีรูปแบบดังนี้: saveddata, เส้นทางไปยังไฟล์เอาต์พุต, ที่อยู่ฐาน และขนาด
และนี่คือตัวอย่างของพารามิเตอร์
ตอนนี้เราจะใส่เส้นทางไปยังไฟล์เอาต์พุตซึ่งควรอยู่ในตำแหน่งนี้
ดังนั้นฉันจะคัดลอกตัวอย่างนี้และวางไว้ที่นี่
เส้นทางไปยังไฟล์เอาท์พุต
พารามิเตอร์ที่สองคือที่อยู่ฐานของคุณ
หากต้องการค้นหาที่อยู่ฐานสำหรับโค้ดนี้ คุณสามารถไปที่ Memory Map แล้วดูว่ามีการไฮไลต์ไว้แล้วหรือไม่
นี่คือที่อยู่ฐานของคุณ:
0x0023 ตามด้วยศูนย์สี่ตัว
ดังนั้นเราสามารถคัดลอกสิ่งนี้หรือพิมพ์ลงใน Notepad ที่นี่ได้
ดังนั้นที่อยู่ฐานของเราจะเป็น
0x0023, 0x0023 ตามด้วยศูนย์สี่ตัว:
หนึ่ง, สอง,
สาม, สี่
และสุดท้ายขนาดคือ 0x87000
ดังนั้นขนาดที่เราสามารถคัดลอกจากที่นี่ได้คือขนาดเดียวกับตัวอย่างแล้ววางไว้ที่นี่
ตอนนี้เราจะมาคัดลอกทั้งหมดนี้
จากนั้นนำคำสั่งนี้ไปวางในช่องคำสั่ง
เมื่อคุณกด Enter คุณควรเห็นข้อความที่ด้านล่างเพื่อยืนยันว่าสำเร็จ และคุณจะเห็นข้อความ "เขียนถึงสิ่งนี้"
ตอนนี้เรามี
shellcode อยู่ในโฟลเดอร์นี้แล้ว
ตอนนี้เรากลับมาที่ Ghidra อีกครั้ง
กลับไปหากิดรา
จากนั้นเราจะลาก shellcode ที่คุณเพิ่งดัมพ์มา
อันนี้อันไหนครับ
ลากมันเข้าไปใน Ghidra
กิดราไม่รู้จักมัน
ดังนั้นเราต้องบอก Ghidra ว่ามันเป็นรูปแบบใด
คลิกที่จุดสามจุด เลือก x86 จากนั้นเลือกจุดนี้
คลิกตกลง และตอนนี้ยืนยันว่ามีทุกอย่างอยู่ที่นั่น
คลิกตกลงอีกครั้งและเริ่มกระบวนการนำเข้า
คลิกตกลง
ตอนนี้เราสามารถลากสิ่งนี้ลงในเบราว์เซอร์โค้ด หรือเราสามารถใช้เบราว์เซอร์โค้ดที่เปิดอยู่แล้วเพื่อเปิดมันได้
จากนั้นคลิกไฟล์ เปิด จากนั้นเลือกเชลล์โค้ด
คลิกตกลง
และจะถามคุณให้ยืนยันว่าต้องการวิเคราะห์หรือไม่ คลิกใช่
และที่นี่ ให้ตรวจสอบ
ID พารามิเตอร์ของ Decompiler
ส่วนที่เหลือไม่ต้องเปลี่ยนแปลงอะไร
คลิกวิเคราะห์
ตอนนี้ที่ Ghidra วิเคราะห์เสร็จแล้ว Ghidra ไม่ทราบว่าจุดเข้าอยู่ที่ใด
ดังนั้นเราต้องให้จุดเข้าแก่ Ghidra ซึ่งเราสามารถทำได้โดยไปที่ x64dbg จากนั้นค้นหาจุดเข้าซึ่งก็คือที่อยู่ดังกล่าว
แต่นี่คือที่อยู่ฐาน
เราต้องได้รับการชดเชยเพื่อมอบให้กับ Ghidra
ดังนั้นเพื่อที่จะคำนวณค่าออฟเซ็ต เราสามารถนำค่านี้มาลบด้วยที่อยู่ฐาน จากนั้นจึงเปิดเครื่องคิดเลขได้
แล้วเปลี่ยนไปเป็นเครื่องคิดเลขโปรแกรมเมอร์
จากนั้นเลือก Hex และป้อนค่านี้:
0x002B6ED0, 0x2B6ED0
2B6ED0.
0x002B6ED0, 0x002B6ED0
ลบที่อยู่ฐานซึ่งคุณสามารถรับได้จาก Memory Map
ดังนั้นที่อยู่ฐานคือ
0x0023 ตามด้วยศูนย์สี่ตัว 0x00230000 ซึ่งจะทำให้คุณได้ออฟเซ็ต
0x86ED0
ตอนนี้เรารู้ค่าออฟเซ็ตแล้ว เราก็สามารถใช้ค่าออฟเซ็ตนี้ใน Ghidra ได้
ดังนั้น 0x86ED0
ดังนั้นใน Ghidra ให้เลือกการนำทาง ไปที่ แล้วป้อนค่าออฟเซ็ต
นี่ 0x86ED0
ดังนั้นให้เราพิมพ์ 0x86ED0 แล้วกดตกลง
และนี่คือจุดเข้าสำหรับเชลล์โค้ดนี้
โอเค ตอนนี้เราจะทำการวิเคราะห์แบบเดียวกัน
เราพยายามดูบทส่งท้ายสำหรับฟังก์ชันนี้ ฟังก์ชันเชลล์โค้ดนี้ และดูว่ามีบทส่งท้ายที่ผิดปกติใดๆ
หรือไม่
ทีนี้ทางด้านขวา คุณสามารถเลื่อนลงไปด้านล่างและกดปุ่มกลับที่นี่ จากนั้นคุณจะเห็นบทส่งท้าย
ดังนั้นบทส่งท้ายจึงดูแปลกด้วยเช่นกัน เนื่องจากมีการผลักก่อนที่จะกลับมา แต่คราวนี้เป็นการผลัก
EDX มาที่นี่ และดูเหมือนว่าจะผลักตัวแปรในพื้นที่ด้วย
ดังนั้นเพื่อที่จะค้นหาว่าที่อยู่ของตัวแปรท้องถิ่นคืออะไร ที่อยู่ของค่าที่กำลังถูกส่งไปที่
EDX คืออะไร เราสามารถใช้ดีบักเกอร์ได้
เนื่องจากดีบักเกอร์เปิดอยู่แล้ว เราจึงสามารถใส่จุดพักที่ออฟเซ็ตนี้ในดีบักเกอร์ได้:
0x8CFC4 ดังนั้นเรามากลับไปที่ดีบักเกอร์แล้วที่นี่เราจะใส่จุดพักที่ออฟเซ็ต
เราจะวางจุดพักที่ 0x86FC4
จำไว้ว่า 0x008 คือที่อยู่ฐาน
เราต้องการแค่ออฟเซ็ต
เอาล่ะ.
ดังนั้นที่นี่ที่อยู่ฐานคือ 0x002B ดังนั้นเราต้องใส่จุดพักที่
bp
เราใช้ที่อยู่ฐานที่นี่:
0x002B, 0x002B และตัวเลขสี่ตัวสุดท้ายที่นี่จะเป็นค่าออฟเซ็ต ซึ่งเราพบจากที่นี่
ซึ่งก็คือ 6FC4, 6FC4
6FC4.
ขวา.
ตอนนี้เรากด Enter แล้วจะเห็นข้อความว่า "จุดหยุดที่อยู่นี้" ดังนั้น เราจึงไปที่แท็บ Breakpoint และยืนยันว่าได้รับการตั้งค่าให้กลับคืนแล้ว
เอาล่ะ.
ตอนนี้เราก็พร้อมที่จะดำเนินการถึงจุดพักนี้แล้ว
เอาล่ะ.
ตอนนี้เราจะปล่อยให้มันทำงานและไปถึงจุดพัก
และตอนนี้ก็ถึงจุดหยุดการกลับผิดปกติแล้ว
แล้วตอนนี้ลองสังเกต ECX
ECX คือที่อยู่ที่จะส่งกลับ
แล้วเราก็สามารถเดินหน้าและก้าวกลับได้แล้ว
แล้วคุณก็ไปที่นั่น
มันกลับมาที่อยู่ 0x402037
ตอนนี้มันอยู่ภายนอกเชลล์โค้ดแล้ว
ตอนนี้มันอยู่ภายในโค้ดหลักแล้ว
นี่อาจเป็นสัญญาณว่าการแกะกล่องเสร็จสิ้นแล้ว
อาจดูเหมือนว่าคำสั่งนี้เพียงแค่เปลี่ยนเส้นทางเรากลับไปยังตำแหน่งเดิมของจุดเข้าหลักเดิม
ซึ่งอาจถูกเขียนทับด้วยโค้ดใหม่บางส่วน