WEBVTT

00:00.690 --> 00:02.100
안녕하세요, 환영합니다.

00:02.100 --> 00:09.750
이 동영상에서는 멀웨어 분석 및 리버싱에 API 후킹을 사용하는 방법을 보여드리겠습니다.

00:09.930 --> 00:19.140
리소스 섹션에서 Panda Banker 빈을 다운로드하고 바탕화면에 악성코드 샘플이라는 폴더를 만든

00:19.140 --> 00:21.510
다음 여기에 넣으세요.

00:21.840 --> 00:29.430
그런 다음 x64dbg를 관리자로 열고 판다 뱅커를 열겠습니다.

00:29.850 --> 00:37.140
따라서 그 전에 이벤트 탭의 x64dbg에 대한 옵션 기본 설정에서 시스템 중단점과

00:38.720 --> 00:44.340
콜백을 선택 해제하고 항목 중단점만 선택된 상태로 둡니다.

00:44.360 --> 00:45.170
저장을 클릭합니다.

00:46.200 --> 00:48.720
그런 다음 판다 뱅커를 엽니다.

00:50.060 --> 01:01.460
이를 클릭하고 데스크톱의 멀웨어 코스 샘플 위치로 이동한 다음 여기에서 모든 파일로 변경합니다.

01:01.490 --> 01:03.500
이것을 클릭하고 엽니다.

01:04.600 --> 01:09.850
따라서 이제 여는 순간 진입 지점에서 깨집니다.

01:10.000 --> 01:11.590
여기에서 확장해 보겠습니다.

01:11.600 --> 01:12.580
진입 지점.

01:13.150 --> 01:23.410
따라서 API 후킹의 타이밍은 멀웨어가 사용하는 가장 일반적인 API에 중단점을 설정하는 것입니다.

01:23.620 --> 01:32.200
먼저 VirtualAlloc에 중단점을 설정하는 것으로 시작하겠습니다.

01:38.050 --> 01:38.290
Enter

01:38.290 --> 01:43.540
키를 누릅니다. 가상 보호의 중단점.

01:46.520 --> 01:55.250
Enter 키를 누릅니다. 가상 할당 및 가상 보호는 멀웨어가 코드 압축을 풀려고 할 때 사용되는 API를 트래핑하는

01:55.250 --> 01:56.720
데 사용됩니다.

01:56.900 --> 01:59.210
그래서 이 두 가지에 중단점을 설정했습니다.

01:59.240 --> 02:04.820
다음으로, 중단점을 설정해야 하는 안티 분석도 있습니다.

02:04.820 --> 02:08.390
첫 번째는 IsDebuggerPresent입니다.

02:13.130 --> 02:13.790
Enter 키를 누릅니다.

02:15.200 --> 02:19.730
그리고 다른 하나는 CreateToolhelp

02:22.170 --> 02:24.810
32 스냅샷입니다.

02:25.620 --> 02:31.350
따라서 이 함수는 메모리에서 실행 중인 프로세스 목록을 열거하는 데 사용됩니다.

02:31.380 --> 02:32.220
Enter 키를 누릅니다.

02:32.220 --> 02:41.670
그리고 다른 하나는 프로세스 32First의 중단점입니다.

02:42.810 --> 02:46.290
이것은 실행 중인 프로세스 목록을 반복하기 위해

02:46.320 --> 02:46.690
CreateToolhelp

02:46.730 --> 02:51.540
32 스냅샷과 함께 사용됩니다.

02:51.570 --> 02:55.530
Enter 키를 누릅니다. 다음은 중단점

02:56.070 --> 02:57.090
프로세스

02:57.120 --> 03:05.460
32 다음입니다. 이것은 메모리에서 실행 중인 프로세스 목록을 반복하기 위해 CreateToolhelp32Snapshot과

03:05.460 --> 03:07.710
함께 사용됩니다.

03:07.920 --> 03:15.150
따라서 CreateToolhelp32Snapshot은 Process32First 및 Process32Next와 함께 실행되어

03:15.150 --> 03:18.270
메모리에서 실행 중인 전체 프로세스를 나열합니다.

03:18.300 --> 03:20.550
다음은 CreateFile입니다.

03:20.670 --> 03:30.970
따라서 중단점을 설정해야 합니다. 유니코드 버전의 경우 CreateFileW를, 다른 하나는 ASCII

03:30.970 --> 03:34.990
버전의 경우 Create FileA를 사용합니다.

03:35.410 --> 03:36.040
Enter 키를 누릅니다.

03:36.040 --> 03:43.960
따라서 CreateFile API는 어떤 파일이 쓰거나 읽히는지 추적하는 데 사용되며,

03:43.960 --> 03:53.740
멀웨어가 시스템에 안티 분석 도구가 설치되어 있는지 확인하기 위해 사용되기도 합니다.

03:53.740 --> 04:02.720
다음은 CreateProcessInternalW의 중단점입니다.

04:02.740 --> 04:11.830
따라서 이것은 멀웨어가 이미 압축을 푼 코드를 실행하는 시점을 추적하는 것입니다.

04:11.860 --> 04:18.730
이제 멀웨어가 압축을 풀 때 VirtualAlloc과 VirtualProtect를 사용하고, 그

04:18.730 --> 04:25.570
후에는 CreateProcessInternalW를 사용하여 압축을 푼 코드를 실행합니다.

04:26.230 --> 04:27.970
그래서 저희는 여기에 브레이크포인트도 설정했습니다.

04:27.970 --> 04:33.370
지금 중단점 탭을 보시면 제가 설정한 중단점이 모두 여기에 있습니다.

04:34.030 --> 04:42.340
가상 할당, CreateFileW, 가상 보호, IsDebuggerPresent, CreateFileA, CreateProcessInternal

04:42.340 --> 04:48.370
W, CreateToolhelp32스냅샷, Process32Next 및 Process32First.

04:48.400 --> 04:50.200
이제 실행할 준비가 되었습니다.

04:50.200 --> 05:00.700
따라서 실행을 누르면 VirtualProtect에 연결됩니다. 그리고 가상 보호는 특정 메모리 영역에 대한 권한 비트를

05:00.700 --> 05:02.740
변경할 것입니다.

05:02.740 --> 05:10.480
여기에서 매개변수를 실제로 살펴볼 수 있으며, MSDN을 참조하여 VirtualProtect에 전달되는

05:10.480 --> 05:13.750
모든 매개변수의 의미를 확인할 수 있습니다.

05:13.870 --> 05:22.120
하지만 이 경우에는 이 특정 멀웨어에 대해 그다지 중요하지 않기 때문에 여기서 논의할 필요는 없습니다.

05:22.750 --> 05:31.000
따라서 실행을 누르면 여기에 VirtualAlloc에 대한 매개변수도 모두 허용됩니다. 그리고 VirtualAlloc은 코드 압축을 풀기

05:31.000 --> 05:37.630
위해 메모리에 공간을 할당하며, 여기에 대한 매개변수는 다음과 같습니다.

05:37.780 --> 05:44.920
또한 검색을 통해 MSDN 또는 Microsoft를 참조하여 매개 변수의 의미를 확인할 수도 있습니다.

05:44.920 --> 05:49.420
이 글만 계속하겠습니다. 가만히 달리기.

05:49.450 --> 05:51.310
VirtualAlloc. VirtualAlloc.

05:51.730 --> 05:56.350
한 번 더 클릭합니다. VirtualAlloc을 다시 실행합니다.

05:56.710 --> 05:58.900
VirtualAlloc. 그래도 계속 클릭하세요.

06:01.110 --> 06:04.730
알겠습니다. 이제 몇 가지 파일을 읽을 것입니다.

06:04.740 --> 06:08.070
이제 실행을 클릭하고 어떤 파일을 읽으려고 하는지 확인해 보겠습니다.

06:09.450 --> 06:09.840
알겠습니다.

06:09.840 --> 06:16.290
이 프로그램이 설치되어 있는지 확인하고 이제 이 파일을 확인합니다.

06:17.650 --> 06:17.980
알겠습니다.

06:18.010 --> 06:23.530
이제 Wireshark 라이브러리가 설치되어 있는지 확인합니다.

06:23.710 --> 06:26.110
이것은 Wireshark에서 사용하는 라이브러리입니다.

06:26.230 --> 06:34.390
따라서 지금 계속 실행하면 이 멀웨어가 안티 분석 시스템의 일부이기 때문에 종료됩니다.

06:34.540 --> 06:42.040
따라서 Wireshark용 라이브러리인 WinPcap과 Wireshark 자체도 제거해야 합니다.

06:42.400 --> 06:46.750
제거하지 않으면 분석을 계속할 수 없습니다.

06:46.900 --> 06:48.340
그러니 그냥 제거하세요.

06:48.340 --> 06:51.550
여기로 이동하여 프로그램 추가/제거를 찾습니다.

06:52.510 --> 06:53.260
추가/제거를 클릭합니다.

06:54.370 --> 07:00.760
프로그램 추가/제거를 클릭한 다음 설치된 모든 파일 목록에서 아래로 이동하여 마지막 두 파일인

07:00.940 --> 07:05.470
WinPcap과 Wireshark를 제거합니다.

07:06.010 --> 07:08.440
따라서 Remove Pcap을 마우스 오른쪽 버튼으로 클릭합니다.

07:08.560 --> 07:13.780
제거를 클릭합니다. WinPcap은 이 IP와 이 IP입니다.

07:14.260 --> 07:16.120
따라서 WinPcap을 제거해야 합니다.

07:16.720 --> 07:18.380
따라서 제거를 마우스 오른쪽 버튼으로 클릭합니다.

07:20.500 --> 07:21.790
여기에서 제거를 클릭합니다.

07:22.030 --> 07:28.390
나중에 가상 머신 복원 기능을 사용하여 언제든지 복원할 수 있으니 걱정하지 마세요.

07:29.110 --> 07:29.920
마침을 클릭합니다.

07:30.580 --> 07:35.050
이제 와이어샤크를 제거하므로 와이어샤크를 마우스 오른쪽 버튼으로 클릭하고 제거합니다.

07:36.430 --> 07:39.250
다음을 클릭하고 다음을 다시 클릭합니다.

07:40.270 --> 07:41.380
제거를 클릭합니다.

07:41.680 --> 07:44.060
이제 준비가 완료되었습니다. 자체적으로 제거합니다.

07:44.080 --> 07:45.280
다음을 다시 클릭합니다.

07:46.180 --> 07:47.170
마침을 클릭합니다.

07:47.170 --> 07:50.590
이제 WinPcap과 Wireshark를 제거했습니다.

07:50.980 --> 07:53.320
이제 이 테스트를 통과했습니다.

07:53.410 --> 07:58.450
따라서 CreateFile은 파일의 존재 여부를 확인하는 데 사용됩니다.

07:58.480 --> 08:00.790
따라서 이 경우에는 다시 실행할 수 있습니다.

08:01.680 --> 08:04.260
이제 CreateToolhelp 32Snapshot을

08:04.300 --> 08:09.110
사용할 것입니다. 이전에는 CreateFile을 사용하여 파일의 존재 여부를 확인했습니다.

08:09.120 --> 08:15.870
파일이 존재한다면, 예를 들어 Wireshark와 같은 분석 방지 프로그램을 설치했다는 뜻입니다.

08:16.020 --> 08:17.420
그러나 CreateToolhelp

08:17.430 --> 08:22.530
32스냅샷은 메모리에서 이미 실행 중인 항목을 확인하는 데 사용됩니다.

08:22.710 --> 08:26.760
이것이 CreateToolhelp와 CreateFile의 차이점입니다.

08:27.210 --> 08:34.590
이제 메모리에서 와이어샤크가 실행 중인지 확인 중이지만 와이어샤크를 시작하지 않았으므로

08:34.590 --> 08:41.760
안전하게 계속할 수 있습니다. 이제 면역 디버거가 메모리에 열려 있는지 확인합니다.

08:42.500 --> 08:43.700
계속 실행됩니다.

08:43.910 --> 08:47.300
이제 프로세스해커를 확인하고 있지만 프로세스해커를 실행하고 있지는 않습니다.

08:49.020 --> 08:51.810
프로세스 탐색기를 확인합니다.

08:53.110 --> 08:56.440
실행을 클릭합니다. 프로세스 모니터를 확인합니다.

08:57.040 --> 09:00.520
실행을 클릭합니다. 이제 IDA, IDA Pro를

09:00.760 --> 09:01.750
확인합니다.

09:01.990 --> 09:06.160
그래서 지금은 메모리에서 IDA Pro를 열지 않으므로 안전하게 계속할 수 있습니다.

09:06.190 --> 09:07.150
실행을 다시 클릭합니다.

09:07.510 --> 09:10.000
이제 x64dbg가 실행 중인지 확인합니다.

09:10.630 --> 09:13.810
실행 및 AutoIt v3를 클릭합니다.

09:15.010 --> 09:18.370
그들은 달립니다. 이제 Perl이 실행 중인지 확인합니다.

09:19.150 --> 09:21.820
실행을 클릭합니다. Python이 실행 중인지 여부.

09:22.930 --> 09:28.540
실행을 다시 클릭하고 중요하지 않은 일부 파일을 확인합니다.

09:28.570 --> 09:29.800
계속 실행하세요.

09:30.310 --> 09:31.360
실행을 클릭합니다.

09:31.840 --> 09:33.580
이제 이 모든 것을 확인하고 있습니다.

09:33.610 --> 09:36.250
이러한 유형의 항목을 모두 발견하면 종료됩니다.

09:36.790 --> 09:37.750
중요하지 않습니다.

09:37.750 --> 09:38.920
그러니 그냥 실행하세요.

09:39.810 --> 09:40.860
다시 실행합니다.

09:41.910 --> 09:42.750
그리고 다시.

09:44.440 --> 09:45.340
다시 실행합니다.

09:46.520 --> 09:46.940
실행.

09:47.630 --> 09:53.990
알겠습니다. 이제 이 위치가 열리므로 이 위치도 열 수 있습니다.

09:53.990 --> 09:56.600
파일을 드롭하려고 할 수도 있습니다.

09:56.900 --> 09:57.980
이제 가보겠습니다.

09:57.980 --> 10:07.640
이제 이 항목을 클릭하고 실행 상자를 연 다음 AppData라는 가변 환경

10:08.970 --> 10:13.350
경로 변수를 입력하면 됩니다.

10:13.780 --> 10:15.390
AppData.

10:16.170 --> 10:21.930
따라서 퍼센트 기호가 상단에 표시되며 이 경로를 나타냅니다.

10:22.320 --> 10:23.820
확인을 클릭합니다.

10:24.720 --> 10:30.660
이제 앱데이터\로밍을 살펴본 다음, 다음에 어떤 일이 일어날지 살펴보겠습니다.

10:30.930 --> 10:32.460
그러니 계속 달리세요.

10:36.180 --> 10:36.480
알겠습니다.

10:36.480 --> 10:39.270
그리고 여기 스택에서 무언가가 보입니다.

10:39.420 --> 10:42.570
이 부분을 왼쪽으로 당기면 전체 경로를 볼 수 있습니다.

10:42.870 --> 10:44.640
앱 데이터\로밍의 이

10:45.540 --> 10:52.140
위치에 파일을 드롭하려고 합니다. 이제 그곳에 가서 그 위치를 검사하고 점검하고 어떤 일이

10:52.170 --> 10:54.240
벌어질지 확인할 수 있습니다.

10:54.450 --> 10:57.720
따라서 머신에 따라 다를 수 있습니다.

10:57.720 --> 11:05.100
따라서 머신에 npm-cache가 표시되지 않는다면 특정 사례에 표시되는 것을 따라야 합니다.

11:05.100 --> 11:11.670
제 컴퓨터의 경우 npm-cache가 표시되므로 여기에서 이를 따라 캐싱해 보겠습니다.

11:13.390 --> 11:14.440
밑줄을 추가합니다.

11:16.280 --> 11:25.900
캐시, 콘텐츠-v2, sha1, 01, EC 순으로

11:27.890 --> 11:33.350
이어집니다. 다음은 삭제된 파일입니다.

11:36.580 --> 11:37.290
이 세 가지 파일입니다.

11:37.300 --> 11:38.560
그래서 다음은 떨어질 것입니다.

11:38.560 --> 11:45.790
확장자가 메모인 이 파일이 있으니 여기로 가서 클릭하여 실행하면 어떤 일이 일어나는지 확인할 수 있습니다.

11:47.240 --> 11:47.660
알겠습니다.

11:47.660 --> 11:49.310
파일을 삭제한 것 같습니다.

11:49.790 --> 11:51.020
가서 확인해 보겠습니다.

11:52.330 --> 11:53.110
여기까지입니다.

11:53.350 --> 11:55.150
이 파일이 삭제되었습니다.

11:55.450 --> 11:59.860
이제 이 위치에 드롭할 다음 파일은 이 파일입니다.

11:59.860 --> 12:02.410
그리고 그것은 흥미롭습니다.

12:02.410 --> 12:05.710
알겠습니다. 이제 실행해보고 어떤 일이 일어나는지 확인하세요.

12:05.890 --> 12:06.610
실행.

12:06.640 --> 12:11.230
이제 폴더를 검사해 보겠습니다.

12:11.660 --> 12:13.030
여기 있습니다.

12:13.300 --> 12:15.280
하지만 현재로서는 여전히 0입니다.

12:15.310 --> 12:17.580
즉, 아무것도 기록하지 않았다는 뜻입니다.

12:17.590 --> 12:21.070
파일만 생성되었지만 여전히 빈 파일입니다.

12:21.490 --> 12:28.090
이제 계속 실행하여 무언가를 복사할지 여부를 확인해 보겠습니다.

12:29.540 --> 12:37.700
이 시점에서 사용자 코드 실행으로 이동하여 이 파일에 쓰는지 여부를 확인할 수 있습니다.

12:38.840 --> 12:41.870
이제 여기 사용자 코드로 이동합니다.

12:43.310 --> 12:47.090
자, 이제 사용자 코드에 들어갑니다. 이제 어떤 일이 벌어질지 살펴봅시다.

12:47.750 --> 12:48.290
아직 없습니다.

12:48.290 --> 12:50.450
그럼 계속 달려보겠습니다.

12:50.720 --> 12:52.010
좋아요, VirtualAlloc.

12:52.790 --> 12:55.190
이제 여기서 무슨 일이 일어나고 있는지 살펴보겠습니다.

12:55.820 --> 12:56.180
알겠습니다.

12:56.180 --> 12:58.160
아직 아무 것도 기록하지 않았습니다.

12:58.490 --> 13:02.250
하지만 무언가를 할당하는 동안 계속 실행해

13:02.270 --> 13:03.410
봅시다.

13:04.070 --> 13:04.460
알겠습니다.

13:04.460 --> 13:07.790
이제 파일을 읽고 쓸 것입니다.

13:07.790 --> 13:10.280
이제 매개 변수가 이 파일임을 알 수 있습니다.

13:11.330 --> 13:16.910
알겠습니다. 이제 사용자 코드로 이동하여 확인할 수 있습니다.

13:17.930 --> 13:25.370
이 API를 호출하여 이 exe 파일을 열고 이제 어떤 작업을 수행하는지 살펴보겠습니다.

13:25.410 --> 13:26.600
여기에 쓰게 될 것 같습니다.

13:26.600 --> 13:32.900
이제 F8 키를 누르고 계속 밟고 넘어가 보겠습니다.

13:38.060 --> 13:43.400
알겠습니다. 이제 글을 쓸 차례입니다. 현재로서는 여전히 0입니다.

13:43.940 --> 13:48.020
그리고 스택에서 이것을 작성하는 것을 볼 수 있습니다.

13:48.290 --> 13:54.410
이제 MSDN에서 이 API를 참조할 수 있습니다.

13:54.860 --> 14:00.950
Microsoft MSDN이며, 여기에서 WriteFile의 API를 볼 수 있습니다.

14:00.980 --> 14:09.500
두 번째 매개변수는 대상에 쓰는 데 사용되는 버퍼입니다.

14:09.980 --> 14:11.730
그리고 이것이 목표입니다.

14:11.760 --> 14:18.990
여기에서 설명을 볼 수 있습니다. 버퍼는 파일에 기록할 데이터를 포함하는 포인터이며,

14:18.990 --> 14:23.160
파일은 첫 번째 매개변수입니다.

14:23.160 --> 14:25.560
따라서 두 번째 매개변수는 버퍼입니다.

14:25.560 --> 14:33.420
이것이 WriteFile의 매개변수이며, 여기 스택의 매개변수인 스택과 비교할

14:33.420 --> 14:35.280
수 있습니다.

14:35.940 --> 14:43.770
따라서 첫 번째 매개변수는 파일 핸들이고 두 번째 매개변수는 버퍼입니다.

14:44.310 --> 14:50.040
이제 이걸 따라가면 됩니다. 마우스 오른쪽 버튼을 클릭하고 덤프의 단어를 따라갑니다.

14:50.160 --> 14:51.510
여기에서 확인할 수 있습니다.

14:52.230 --> 14:59.550
따라서 이 주소는 exe 파일에 쓸 때 사용할 버퍼입니다.

15:00.480 --> 15:02.760
exe 파일은 이 파일입니다.

15:03.450 --> 15:05.100
현재는 여전히 0바이트입니다.

15:05.520 --> 15:10.050
그래서 이 모든 것을 가져와서 이 파일에 기록할 것입니다.

15:10.830 --> 15:15.330
이것이 바로 이 API의 매개변수의 의미입니다.

15:16.200 --> 15:24.630
따라서 이 파일은 헤더에 MZ 매직 바이트가 있고 '이 프로그램은 DOS 모드에서 실행할 수 없습니다'라는

15:24.630 --> 15:25.830
문자열의 확인이

15:25.860 --> 15:28.500
있으므로 실행 파일입니다. 따라서 이것은 실행 파일

15:28.830 --> 15:30.900
자체입니다.

15:32.520 --> 15:33.000
알겠습니다.

15:33.000 --> 15:36.030
이제 이 WriteFile을 살펴봅시다.

15:38.870 --> 15:40.820
닫을 때까지 실행합니다.

15:41.990 --> 15:42.650
손잡이가 닫힐

15:42.650 --> 15:43.970
때까지 한 발짝 내딛습니다.

15:45.520 --> 15:46.000
알겠습니다.

15:46.210 --> 15:50.230
따라서 이 CloseHandle은 이 CreateFile에 대한 CloseHandle입니다.

15:50.560 --> 15:53.220
이제 돌아가서 크기를 확인합니다.

15:53.240 --> 15:55.810
145킬로바이트인 것을 알 수 있습니다.

15:55.840 --> 15:59.290
이 버퍼를 이 파일에 복사했습니다.

15:59.860 --> 16:04.060
그리고 해시를 사용하여 어떤 파일인지 확인할 수 있습니다.

16:04.420 --> 16:07.270
이제 이 파일의 해시를 가져와 보겠습니다.

16:08.470 --> 16:11.200
마우스 오른쪽 버튼을 클릭하고 MD5 해시합니다.

16:12.220 --> 16:14.800
그리고 이것은 MD5 해시입니다.

16:14.980 --> 16:18.910
해시를 복사한 다음 메모장을 엽니다.

16:20.230 --> 16:21.670
메모장을 엽니다.

16:26.110 --> 16:28.060
그리고 여기에 해시를 붙여넣습니다.

16:28.930 --> 16:31.300
따라서 이 파일은 알 수 없는 파일입니다.

16:31.300 --> 16:41.260
알 수 없는 파일에 물음표를 표시한 다음 이 파일이 실제로 Panda Banker의 사본이라고 의심합니다.

16:41.800 --> 16:47.290
따라서 Panda Banker로 이동하여 이것도 해시를 가져와서 해시를 찾을 수 있습니다.

16:47.950 --> 16:52.480
그리고 해시를 복사하여 여기에 넣고 동일한지 확인합니다.

16:53.970 --> 16:54.570
알겠습니다.

16:54.870 --> 16:57.120
판다 뱅커입니다.

16:59.460 --> 17:02.430
해시인 MD5 해시가 동일한 파일임을

17:02.460 --> 17:04.020
알 수 있습니다.

17:05.010 --> 17:09.900
따라서 이 위치의 숨겨진 폴더, 숨겨진 디렉토리에

17:09.930 --> 17:11.190
스스로를 복사했다는

17:11.220 --> 17:14.670
의심이 확인되었습니다.

17:14.820 --> 17:20.670
이제 컴퓨터의 경우 동일한 위치가 아닐 수 있으므로 컴퓨터에 표시되는 내용에 따라

17:20.670 --> 17:23.490
적절히 변경해야 할 수 있습니다.

17:23.490 --> 17:28.650
다음 영상에서 이 분석을 계속 이어가겠습니다.

17:28.940 --> 17:30.270
시청해 주셔서 감사합니다.
