WEBVTT

00:00.410 --> 00:02.510
ดังนั้นให้เริ่มใช้งาน x64dbg ของคุณ

00:13.810 --> 00:20.980
จากนั้นตั้งค่าตัวเลือก การกำหนดลักษณะ ยกเลิกเลือกจุดพักระบบและการโทรกลับ

00:21.220 --> 00:22.120
คลิกบันทึก

00:23.920 --> 00:27.760
จากนั้นเปิดมัลแวร์

00:31.170 --> 00:33.240
เลือกไฟล์ทั้งหมด

00:34.360 --> 00:38.050
และเลือกมัลแวร์ Simda แล้วกดเปิด

00:40.450 --> 00:42.850
และตอนนี้คุณควรจะอยู่ที่จุดเข้าแล้ว

00:44.270 --> 00:46.610
และตอนนี้เราจะมาใส่จุดพัก

00:50.550 --> 00:55.920
เราจะกำหนดจุดพักที่อยู่นี้คือ 0x401156

00:57.210 --> 01:04.650
จากนั้นไปที่บรรทัดคำสั่งแล้วพิมพ์ bp ตามด้วยที่อยู่ ซึ่งคุณสามารถคลิกขวาแล้วคัดลอกจาก

01:04.650 --> 01:05.640
Ghidra ได้

01:11.760 --> 01:12.600
วางไว้ที่นี่

01:15.280 --> 01:16.540
และกด Enter

01:16.720 --> 01:25.210
และข้อความแจ้งว่า "จุดหยุดที่ตั้งค่าเป็น 0x401156" แล้วคลิกที่แท็บจุดหยุดเพื่อยืนยันอีกครั้ง

01:27.520 --> 01:29.830
และตอนนี้คุณสามารถวิ่งไปที่จุดพักได้

01:31.980 --> 01:35.700
และเราก็ได้ไปถึงจุดพัก 0x401156 แล้ว

01:36.630 --> 01:37.200
ตกลง.

01:37.200 --> 01:45.000
ตอนนี้คุณจะเห็นว่า EAX มีที่อยู่ที่จะกระโดดไป

01:45.300 --> 01:50.610
ดังนั้นเรามาปล่อยให้มันทำหน้าที่ของมันกันดีกว่า

01:54.230 --> 01:56.690
ดังนั้นมันจะถูกผลักไปที่สแต็ก

01:56.870 --> 02:01.640
ดังนั้นนี่คือการผลักที่ผิดปกติตามด้วยการถอยหลังที่ผิดปกติ

02:02.960 --> 02:06.680
ตอนนี้มันจึงถูกผลักไปที่สแต็กแล้ว ตามที่คุณเห็นที่นี่ มันอยู่บนสแต็ก

02:06.950 --> 02:10.160
และเมื่อมันกลับมา มันก็จะกลับมาที่อยู่นี้

02:12.660 --> 02:14.760
นี่จึงเป็นผลตอบแทนที่ผิดปกติ

02:15.180 --> 02:24.150
ดังนั้นที่นี่ คุณจะเห็นว่านี่น่าจะเป็นเชลล์โค้ดที่ถูกแยกไว้ในหน่วยความจำ

02:24.630 --> 02:28.830
ตอนนี้เราจะดัมพ์เชลล์โค้ดนี้และวิเคราะห์ใน Ghidra

02:29.310 --> 02:34.770
วิธีหนึ่งในการทำเช่นนี้คือใช้คำสั่ง saveddata

02:35.190 --> 02:43.290
ดังนั้นคำสั่ง saveddata จึงมีรูปแบบดังนี้: saveddata, เส้นทางไปยังไฟล์เอาต์พุต, ที่อยู่ฐาน และขนาด

02:43.290 --> 02:47.460
และนี่คือตัวอย่างของพารามิเตอร์

02:47.970 --> 02:56.190
ตอนนี้เราจะใส่เส้นทางไปยังไฟล์เอาต์พุตซึ่งควรอยู่ในตำแหน่งนี้

02:56.310 --> 03:01.230
ดังนั้นฉันจะคัดลอกตัวอย่างนี้และวางไว้ที่นี่

03:02.300 --> 03:03.740
เส้นทางไปยังไฟล์เอาท์พุต

03:04.550 --> 03:07.610
พารามิเตอร์ที่สองคือที่อยู่ฐานของคุณ

03:07.730 --> 03:16.060
หากต้องการค้นหาที่อยู่ฐานสำหรับโค้ดนี้ คุณสามารถไปที่ Memory Map แล้วดูว่ามีการไฮไลต์ไว้แล้วหรือไม่

03:16.070 --> 03:17.900
นี่คือที่อยู่ฐานของคุณ:

03:18.880 --> 03:22.180
0x0023 ตามด้วยศูนย์สี่ตัว

03:22.180 --> 03:28.090
ดังนั้นเราสามารถคัดลอกสิ่งนี้หรือพิมพ์ลงใน Notepad ที่นี่ได้

03:28.690 --> 03:32.620
ดังนั้นที่อยู่ฐานของเราจะเป็น

03:38.860 --> 03:43.300
0x0023, 0x0023 ตามด้วยศูนย์สี่ตัว:

03:43.300 --> 03:44.730
หนึ่ง, สอง,

03:44.770 --> 03:46.480
สาม, สี่

03:48.370 --> 03:52.390
และสุดท้ายขนาดคือ 0x87000

03:52.600 --> 04:00.370
ดังนั้นขนาดที่เราสามารถคัดลอกจากที่นี่ได้คือขนาดเดียวกับตัวอย่างแล้ววางไว้ที่นี่

04:01.660 --> 04:04.120
ตอนนี้เราจะมาคัดลอกทั้งหมดนี้

04:07.310 --> 04:12.320
จากนั้นนำคำสั่งนี้ไปวางในช่องคำสั่ง

04:13.240 --> 04:22.550
เมื่อคุณกด Enter คุณควรเห็นข้อความที่ด้านล่างเพื่อยืนยันว่าสำเร็จ และคุณจะเห็นข้อความ "เขียนถึงสิ่งนี้"

04:22.550 --> 04:22.550
ตอนนี้เรามี

04:22.570 --> 04:25.930
shellcode อยู่ในโฟลเดอร์นี้แล้ว

04:28.240 --> 04:30.100
ตอนนี้เรากลับมาที่ Ghidra อีกครั้ง

04:31.270 --> 04:32.830
กลับไปหากิดรา

04:37.460 --> 04:42.770
จากนั้นเราจะลาก shellcode ที่คุณเพิ่งดัมพ์มา

04:45.260 --> 04:46.310
อันนี้อันไหนครับ

04:47.890 --> 04:49.030
ลากมันเข้าไปใน Ghidra

04:50.790 --> 04:52.980
กิดราไม่รู้จักมัน

04:53.400 --> 04:56.180
ดังนั้นเราต้องบอก Ghidra ว่ามันเป็นรูปแบบใด

04:56.190 --> 05:04.350
คลิกที่จุดสามจุด เลือก x86 จากนั้นเลือกจุดนี้

05:05.920 --> 05:11.020
คลิกตกลง และตอนนี้ยืนยันว่ามีทุกอย่างอยู่ที่นั่น

05:11.140 --> 05:16.090
คลิกตกลงอีกครั้งและเริ่มกระบวนการนำเข้า

05:16.120 --> 05:16.930
คลิกตกลง

05:23.400 --> 05:32.550
ตอนนี้เราสามารถลากสิ่งนี้ลงในเบราว์เซอร์โค้ด หรือเราสามารถใช้เบราว์เซอร์โค้ดที่เปิดอยู่แล้วเพื่อเปิดมันได้

05:32.880 --> 05:37.380
จากนั้นคลิกไฟล์ เปิด จากนั้นเลือกเชลล์โค้ด

05:37.650 --> 05:38.670
คลิกตกลง

05:42.660 --> 05:47.280
และจะถามคุณให้ยืนยันว่าต้องการวิเคราะห์หรือไม่ คลิกใช่

05:48.650 --> 05:49.940
และที่นี่ ให้ตรวจสอบ

05:50.570 --> 05:53.180
ID พารามิเตอร์ของ Decompiler

05:56.190 --> 05:59.010
ส่วนที่เหลือไม่ต้องเปลี่ยนแปลงอะไร

05:59.040 --> 06:00.180
คลิกวิเคราะห์

06:04.690 --> 06:10.270
ตอนนี้ที่ Ghidra วิเคราะห์เสร็จแล้ว Ghidra ไม่ทราบว่าจุดเข้าอยู่ที่ใด

06:10.450 --> 06:23.980
ดังนั้นเราต้องให้จุดเข้าแก่ Ghidra ซึ่งเราสามารถทำได้โดยไปที่ x64dbg จากนั้นค้นหาจุดเข้าซึ่งก็คือที่อยู่ดังกล่าว

06:24.720 --> 06:26.250
แต่นี่คือที่อยู่ฐาน

06:26.520 --> 06:29.670
เราต้องได้รับการชดเชยเพื่อมอบให้กับ Ghidra

06:30.060 --> 06:38.580
ดังนั้นเพื่อที่จะคำนวณค่าออฟเซ็ต เราสามารถนำค่านี้มาลบด้วยที่อยู่ฐาน จากนั้นจึงเปิดเครื่องคิดเลขได้

06:45.040 --> 06:49.120
แล้วเปลี่ยนไปเป็นเครื่องคิดเลขโปรแกรมเมอร์

06:50.950 --> 06:54.250
จากนั้นเลือก Hex และป้อนค่านี้:

06:55.540 --> 07:02.740
0x002B6ED0, 0x2B6ED0

07:03.620 --> 07:04.340
2B6ED0.

07:05.990 --> 07:06.990
2B6ED0.

07:09.660 --> 07:14.100
0x002B6ED0, 0x002B6ED0

07:14.370 --> 07:23.700
ลบที่อยู่ฐานซึ่งคุณสามารถรับได้จาก Memory Map

07:24.240 --> 07:26.850
ดังนั้นที่อยู่ฐานคือ

07:29.250 --> 07:38.520
0x0023 ตามด้วยศูนย์สี่ตัว 0x00230000 ซึ่งจะทำให้คุณได้ออฟเซ็ต

07:38.520 --> 07:43.170
0x86ED0

07:43.980 --> 07:47.970
ตอนนี้เรารู้ค่าออฟเซ็ตแล้ว เราก็สามารถใช้ค่าออฟเซ็ตนี้ใน Ghidra ได้

07:48.240 --> 07:51.270
ดังนั้น 0x86ED0

07:51.270 --> 07:58.500
ดังนั้นใน Ghidra ให้เลือกการนำทาง ไปที่ แล้วป้อนค่าออฟเซ็ต

07:59.810 --> 08:02.630
นี่ 0x86ED0

08:04.040 --> 08:12.230
ดังนั้นให้เราพิมพ์ 0x86ED0 แล้วกดตกลง

08:13.280 --> 08:15.740
และนี่คือจุดเข้าสำหรับเชลล์โค้ดนี้

08:17.090 --> 08:20.520
โอเค ตอนนี้เราจะทำการวิเคราะห์แบบเดียวกัน

08:20.540 --> 08:26.570
เราพยายามดูบทส่งท้ายสำหรับฟังก์ชันนี้ ฟังก์ชันเชลล์โค้ดนี้ และดูว่ามีบทส่งท้ายที่ผิดปกติใดๆ

08:26.570 --> 08:27.620
หรือไม่

08:27.740 --> 08:34.910
ทีนี้ทางด้านขวา คุณสามารถเลื่อนลงไปด้านล่างและกดปุ่มกลับที่นี่ จากนั้นคุณจะเห็นบทส่งท้าย

08:35.570 --> 08:41.900
ดังนั้นบทส่งท้ายจึงดูแปลกด้วยเช่นกัน เนื่องจากมีการผลักก่อนที่จะกลับมา แต่คราวนี้เป็นการผลัก

08:41.980 --> 08:46.620
EDX มาที่นี่ และดูเหมือนว่าจะผลักตัวแปรในพื้นที่ด้วย

08:46.640 --> 08:51.440
ดังนั้นเพื่อที่จะค้นหาว่าที่อยู่ของตัวแปรท้องถิ่นคืออะไร ที่อยู่ของค่าที่กำลังถูกส่งไปที่

08:51.440 --> 08:55.070
EDX คืออะไร เราสามารถใช้ดีบักเกอร์ได้

08:55.070 --> 09:00.410
เนื่องจากดีบักเกอร์เปิดอยู่แล้ว เราจึงสามารถใส่จุดพักที่ออฟเซ็ตนี้ในดีบักเกอร์ได้:

09:00.710 --> 09:11.620
0x8CFC4 ดังนั้นเรามากลับไปที่ดีบักเกอร์แล้วที่นี่เราจะใส่จุดพักที่ออฟเซ็ต

09:12.940 --> 09:16.960
เราจะวางจุดพักที่ 0x86FC4

09:16.990 --> 09:19.660
จำไว้ว่า 0x008 คือที่อยู่ฐาน

09:19.690 --> 09:22.030
เราต้องการแค่ออฟเซ็ต

09:22.690 --> 09:22.990
เอาล่ะ.

09:22.990 --> 09:26.500
ดังนั้นที่นี่ที่อยู่ฐานคือ 0x002B ดังนั้นเราต้องใส่จุดพักที่

09:27.440 --> 09:30.430
bp

09:31.250 --> 09:33.050
เราใช้ที่อยู่ฐานที่นี่:

09:33.380 --> 09:45.290
0x002B, 0x002B และตัวเลขสี่ตัวสุดท้ายที่นี่จะเป็นค่าออฟเซ็ต ซึ่งเราพบจากที่นี่

09:45.290 --> 09:50.750
ซึ่งก็คือ 6FC4, 6FC4

09:51.620 --> 09:54.560
6FC4.

09:55.700 --> 09:56.180
ขวา.

09:56.980 --> 10:08.040
ตอนนี้เรากด Enter แล้วจะเห็นข้อความว่า "จุดหยุดที่อยู่นี้" ดังนั้น เราจึงไปที่แท็บ Breakpoint และยืนยันว่าได้รับการตั้งค่าให้กลับคืนแล้ว

10:08.040 --> 10:08.040
เอาล่ะ.

10:08.560 --> 10:11.470
ตอนนี้เราก็พร้อมที่จะดำเนินการถึงจุดพักนี้แล้ว

10:12.280 --> 10:12.760
เอาล่ะ.

10:12.790 --> 10:15.820
ตอนนี้เราจะปล่อยให้มันทำงานและไปถึงจุดพัก

10:16.590 --> 10:20.430
และตอนนี้ก็ถึงจุดหยุดการกลับผิดปกติแล้ว

10:20.580 --> 10:23.670
แล้วตอนนี้ลองสังเกต ECX

10:24.090 --> 10:29.450
ECX คือที่อยู่ที่จะส่งกลับ

10:29.570 --> 10:34.550
แล้วเราก็สามารถเดินหน้าและก้าวกลับได้แล้ว

10:36.320 --> 10:37.370
แล้วคุณก็ไปที่นั่น

10:37.400 --> 10:42.410
มันกลับมาที่อยู่ 0x402037

10:42.590 --> 10:45.050
ตอนนี้มันอยู่ภายนอกเชลล์โค้ดแล้ว

10:45.230 --> 10:47.780
ตอนนี้มันอยู่ภายในโค้ดหลักแล้ว

10:48.590 --> 10:52.910
นี่อาจเป็นสัญญาณว่าการแกะกล่องเสร็จสิ้นแล้ว

10:53.120 --> 11:01.340
อาจดูเหมือนว่าคำสั่งนี้เพียงแค่เปลี่ยนเส้นทางเรากลับไปยังตำแหน่งเดิมของจุดเข้าหลักเดิม

11:01.340 --> 11:06.680
ซึ่งอาจถูกเขียนทับด้วยโค้ดใหม่บางส่วน
