WEBVTT

00:00.540 --> 00:11.370
자, ECX로 이동한 후 이 위치로 이동하면 여기에 압축을 푼 코드의 일부가 있습니다.

00:11.610 --> 00:15.750
여기 아래쪽을 보면 또 다른 변칙이 있습니다.

00:16.020 --> 00:19.920
반환 전에 주소를 푸시하는 또 다른 이상 현상입니다.

00:19.950 --> 00:22.310
일반적으로는 밀지 말고 튕겨야 합니다.

00:22.320 --> 00:29.510
따라서 이 매우 의심스러운 것은 아마도 또 다른 압축 해제 코드일 수 있습니다.

00:29.520 --> 00:35.010
따라서 여기에 중단점인 F2를 설정하고 실행하면 됩니다.

00:36.030 --> 00:44.970
이제 덤프에서 이 주소의 내용을 따라가 보면 여기 아래에서 이것이 이전에 VirtualAlloc을

00:44.970 --> 00:49.890
호출하여 새로 할당된 메모리임을 확인할 수 있습니다.

00:50.130 --> 00:52.080
이제 푸시할 것입니다.

00:52.320 --> 00:53.610
여기로 옮기려고 합니다.

00:54.270 --> 00:59.190
먼저 중단점인 F2를 제거하고 F8로 넘어가 보겠습니다.

01:00.150 --> 01:05.810
그래서 EDX로 옮겼고 이제 F8이 이를 스택으로 푸시할 것입니다.

01:05.820 --> 01:11.220
그리고 이제 반환할 때 이전 함수로 돌아가는 일반적인 반환 대신 이 주소로

01:11.220 --> 01:12.900
돌아갑니다.

01:13.050 --> 01:15.510
이제 F8 키를 눌러 거기로 이동해 보겠습니다.

01:16.290 --> 01:20.750
이제 우리는 메모리의 새로 풀린 섹션에 들어왔습니다.

01:20.760 --> 01:27.880
이제 이 첫 번째 호출부터 시작하여 그 안에 있는 다양한 호출을 살펴보겠습니다.

01:27.900 --> 01:32.260
여기로 오면 F7을 눌러 이 안으로 들어가서 안에 무엇이 있는지 확인합니다.

01:32.280 --> 01:32.670
알겠습니다.

01:32.670 --> 01:33.750
별다른 효과가 없습니다.

01:33.750 --> 01:35.620
여기로 돌아가기만 하면 됩니다.

01:35.650 --> 01:43.810
이제 중단점을 저쪽에 놓고 바로 복귀로 이동한 다음, F2를 눌러 중단점을 제거하고 복귀로 넘어가

01:44.020 --> 01:45.430
보겠습니다.

01:45.850 --> 01:54.280
그래서 우리는 지금 여기에 있고 F8을 계속 누르고 있으며 반복해서 반복되는 것 같습니다.

01:55.120 --> 02:06.370
따라서 여기에 중단점을 설정하고 F2 키를 눌러 루프에서 벗어나면 루프에서 벗어날 수 있습니다.

02:07.780 --> 02:09.820
그런 다음 중단점을 제거합니다.

02:09.850 --> 02:14.590
기본적으로 이 압축을 푼 코드가 무엇을 하려고 하는지 살펴보려고 합니다.

02:14.620 --> 02:18.250
대부분 실행 파일을 메모리에 압축을 풀고 해당 EXE

02:18.250 --> 02:20.680
파일을 덤프하려는 경우입니다.

02:21.280 --> 02:24.310
이제 이 아래의 모든 호출을 분석해 보겠습니다.

02:24.340 --> 02:29.660
실제로 메모리에서 어떤 부분이 언패킹되는지 확인하세요.

02:29.680 --> 02:34.450
이제 F8을 넘어 F7 내부로 들어가 보겠습니다.

02:36.010 --> 02:38.320
그리고 스택 문자열을 사용하고 있음을 알 수 있습니다.

02:38.320 --> 02:42.450
따라서 이것은 푸시 대신 스택을 사용하는 비정상적인 방법입니다.

02:42.460 --> 02:47.890
이동을 사용하여 다양한 문자열을 스택으로 직접 이동합니다.

02:48.700 --> 02:55.660
따라서 멀웨어 작성자가 코드를 난독화하기 위해 사용하는 또 다른 일반적인 방법은 실제로 이 모든 것을

02:55.660 --> 03:01.200
스택에 푸시하고 이 모든 것을 여기 호출의 매개 변수로 사용하는 것입니다.

03:01.210 --> 03:06.370
따라서 이 호출은 실제로 스택에 간접적으로 푸시되는 이 모든 것을 활용하고

03:06.370 --> 03:14.260
있으며, 실제로 실행하려는 라이브러리는 LoadLibrary 커널32라는 것을 알 수 있습니다.

03:15.010 --> 03:17.770
이것이 이 호출의 매개 변수입니다.

03:18.310 --> 03:21.850
이제 바로 반환으로 넘어가 보겠습니다.

03:21.880 --> 03:23.560
우리는 여기서 무엇을 하려는지 알고 있습니다.

03:26.790 --> 03:30.630
이쪽의 반환으로 바로 이동합니다.

03:31.410 --> 03:32.730
여기에 중단점을 설정합니다.

03:33.400 --> 03:34.140
F2.

03:35.160 --> 03:35.970
실행해 보세요.

03:36.300 --> 03:47.480
중단점을 제거하고 F2를 다시 누른 다음 F8을 눌러 복귀로 이동한 다음 다시 F8을 눌러 기본 기능으로 돌아갑니다.

03:47.490 --> 03:49.620
그래서 방금 이 통화를 마치고 나왔습니다.

03:50.550 --> 03:56.130
다음 함수는 직접 들어가 보는 대신 실제로 더블클릭하여 내부에 무엇이 있는지 확인해 보겠습니다.

03:57.120 --> 04:01.400
그리고 스택 문자열을 사용하는 동일한 트릭을 사용하는 것처럼 보이며,

04:01.410 --> 04:10.350
우리는 라이브러리의 주소를 실행하는 것이 목적이 무엇인지 알고 있으며, 이에 대해서는 원하지 않으며 관심이 없습니다.

04:10.350 --> 04:15.090
따라서 빼기 키를 눌러 통화를 종료합니다.

04:15.090 --> 04:16.230
저희는 실제로 들어가지 않았습니다.

04:16.230 --> 04:17.430
방금 점검했습니다.

04:18.210 --> 04:22.980
따라서 F8 키를 눌러 이 통화를 건너뛰고 그 위로 이동합니다.

04:23.580 --> 04:26.190
그러니 F8을 누르고 계속 내려가세요.

04:32.260 --> 04:32.550
그래서.

04:35.650 --> 04:39.340
이 통화에 들어가지 않고도 두 번 클릭하여 내부 내용을 확인할 수 있습니다.

04:39.610 --> 04:39.970
알겠습니다.

04:39.970 --> 04:40.800
같은 수법입니다.

04:40.810 --> 04:46.240
그래서 저희는 여기에 관심이 없습니다. 플러스, 마이너스, F8 키를 계속 누릅니다.

04:49.370 --> 04:51.920
그리고 이것을 몇 번 호출하고 있습니다.

04:52.040 --> 04:54.230
여기, 여기, 여기에서도 같은 통화를 볼 수 있습니다.

04:54.230 --> 04:58.070
따라서 그냥 무시하고 넘어가면 됩니다.

04:59.130 --> 05:01.590
다른 무언가가 나올 때까지.

05:04.420 --> 05:04.780
알겠습니다.

05:04.780 --> 05:06.040
이제 우리는 다시 여기에 있습니다.

05:06.040 --> 05:06.900
저희도 같은 방법을 사용합니다.

05:06.910 --> 05:10.300
직접 들어가지 않고 더블클릭하여 내부에 무엇이 있는지 확인합니다.

05:11.220 --> 05:11.490
알겠습니다.

05:11.490 --> 05:14.310
다시 말하지만, 여기에는 관심 있는 전화가 없습니다.

05:14.340 --> 05:22.020
마이너스를 클릭하고 키보드에서 마이너스를 눌러 뒤로 이동한 다음 F8을 눌러 계속 넘어가면 됩니다.

05:25.910 --> 05:27.980
그리고 이번에도 같은 방법을 사용했습니다.

05:28.550 --> 05:28.900
알겠습니다.

05:28.910 --> 05:29.750
저희는 이렇게 합니다.

05:29.780 --> 05:30.860
그다지 많지는 않습니다.

05:30.860 --> 05:38.870
그래서 다시 마이너스를 빼고 나가면 이것이 마지막 함수 호출인 것처럼 보입니다.

05:38.870 --> 05:39.680
그래서.

05:39.890 --> 05:41.240
이번이 마지막입니다.

05:41.240 --> 05:43.160
그곳에 도착할 때까지 한 걸음씩 넘어가 보겠습니다.

05:43.730 --> 05:44.160
F8.

05:44.810 --> 05:46.280
F8 키를 눌러 보겠습니다.

05:48.150 --> 05:52.930
따라서 마지막 함수 호출이 중요하므로 이 부분을 살펴볼 필요가 있습니다.

05:52.950 --> 05:58.680
따라서 이 키를 눌러 들어가거나 바로 가기 키인 F7을 눌러 들어가면 됩니다.

05:58.890 --> 06:02.010
그리고 흥미롭게도 여기 아래에서 볼 수 있습니다.

06:03.450 --> 06:06.630
여기에 푸시 EAX가 있습니다.

06:07.790 --> 06:09.890
그리고 여기에 아이디어가 있습니다.

06:10.950 --> 06:12.900
그리고 여기 푸시 40이 있습니다.

06:14.800 --> 06:20.050
따라서 이것은 아마도 VirtualAlloc의 매개변수처럼 보입니다.

06:20.350 --> 06:26.110
VirtualAlloc을 보면 이 40은 의미 있는 상수입니다.

06:26.230 --> 06:29.280
그렇기 때문에 가상 할당이라는 인상을 줍니다.

06:29.690 --> 06:32.230
VirtualAlloc의 네 가지 파라미터.

06:32.650 --> 06:34.300
네 번째는 보호입니다.

06:34.600 --> 06:42.220
가상 보호와 보호에 대한 설명으로 이동하면 다음과 같습니다.

06:42.670 --> 06:46.030
그리고 메모리 보호 상수를 분석하고 조회합니다.

06:51.490 --> 06:52.150
아래로 스크롤합니다.

06:52.150 --> 07:03.160
0x40은 메모리 위치를 읽기, 쓰기 및 실행 가능, RWX로 설정하는 것을 의미합니다.

07:03.730 --> 07:08.180
그렇기 때문에 이 40달러는 정말 큰 선물입니다.

07:08.200 --> 07:12.310
푸시 40이 표시되면 대부분 VirtualAlloc이 여기 있다는 뜻입니다.

07:12.970 --> 07:14.500
네 번째 매개변수입니다.

07:15.730 --> 07:19.360
4, 3, 2, 1, 4개의 매개변수가 있습니다.

07:19.360 --> 07:20.830
따라서 VirtualAlloc이 되어야 합니다.

07:21.100 --> 07:28.060
그리고 악성코드가 해당 메모리 영역에 코드를 언패킹한 후 실행할 수 있도록 메모리 영역에 대한 권한을

07:28.060 --> 07:35.380
설정하기 위해 언패킹 중에 VirtualAlloc이 항상 호출된다는 것을 알고 있습니다.

07:35.860 --> 07:39.790
그리고 이제 그 선에 도달할 때까지 한 걸음씩 나아가면 이를 확인할 수 있습니다.

07:39.790 --> 07:44.830
이 호출에 도달할 때까지 F8 키를 계속 눌러 보겠습니다.

07:50.220 --> 07:53.400
그리고 의심했던 대로 VirtualAlloc이라는 것을 알 수 있습니다.

07:53.520 --> 07:56.460
그리고 네 번째 매개변수는 1, 2, 3, 4입니다.

07:57.300 --> 08:03.780
네 번째 매개변수는 해당 메모리 영역을 읽기, 쓰기, 실행으로 설정하는 것입니다.

08:03.900 --> 08:10.560
가상 할당에 대한 설명서를 다시 참조하면 가상 할당 반환 값은 할당된 페이지

08:10.560 --> 08:13.560
영역의 기본 주소입니다.

08:15.750 --> 08:16.020
그렇죠?

08:16.050 --> 08:17.760
이것이 바로 VirtualAlloc이 반환하는 결과입니다.

08:17.910 --> 08:22.510
따라서 모든 함수는 결과를 EAX로 반환합니다.

08:22.530 --> 08:29.250
이제 이 부분을 살펴보면 새로 할당된 메모리 영역의 주소인 리턴 주소가 보일

08:29.250 --> 08:30.540
것입니다.

08:30.540 --> 08:41.100
F8 키를 눌러 그 위로 이동하면 새로 할당된 지역이 표시되므로 여기로 이동하여 마우스 오른쪽 버튼을 클릭하고 덤프에 따라가면

08:41.100 --> 08:42.630
됩니다.

08:42.630 --> 08:42.900
Dump.

08:43.860 --> 08:46.770
그리고 이제 거기서 무언가를 풀려고 합니다.

08:48.720 --> 08:54.870
그래서 우리는 그냥 스텝, 스텝, 스텝, 스텝을 계속할 수 있고, 저는 VirtualAlloc을

08:54.910 --> 08:56.860
호출한 후 계속 스텝, 스텝,

08:56.860 --> 09:05.350
스텝을 계속하고 여기에서 이 호출 후 매직 바이트 MZ와 PE 헤더도 복사했습니다.

09:06.700 --> 09:07.350
이쪽입니다.

09:07.350 --> 09:09.820
또한 "이 프로그램은 DOS 모드에서

09:09.820 --> 09:17.890
실행할 수 없습니다."라는 문장이 표시되므로 새로 할당된 메모리 영역에 EXE 파일을 복사하는

09:17.890 --> 09:20.170
것처럼 보입니다.

09:20.170 --> 09:24.820
이제 계속 진행하여 복사가 완료될 때까지 기다리겠습니다.

09:24.820 --> 09:29.410
텍스트 섹션을 복사하는 것을 볼 수 있습니다. 계속 발걸음을 옮기세요.

09:30.310 --> 09:36.400
따라서 이 모든 작업은 할당된 메모리 영역에 바이트를 복사하는 것에 불과합니다.

09:36.400 --> 09:38.650
이제 계속 넘어가 보겠습니다.

09:41.510 --> 09:45.210
F8 단계를 계속 진행하면서 그대로 두세요.

09:45.230 --> 09:48.290
이제 데이터 섹션을 복사하고 있습니다.

09:53.800 --> 09:54.880
계속 진행하겠습니다.

09:55.540 --> 09:56.770
시간이 걸릴 수 있습니다.

10:00.050 --> 10:03.590
그리고 여기서는 데이터 섹션을 메모리에 복사합니다.

10:07.680 --> 10:08.540
좋아요, 눌러 보겠습니다.

10:08.550 --> 10:12.680
그냥 F8 키를 눌러서 복사를 진행합니다.

10:12.810 --> 10:14.180
이제 이전 섹션으로 이동합니다.

10:14.490 --> 10:14.970
복사합니다.

10:19.570 --> 10:23.470
모든 복사를 마칠 때까지 이 작업을 계속할 수 있습니다.

10:28.690 --> 10:30.190
그리고 수익이 발생하면

10:34.190 --> 10:41.510
반환이 표시되면 모든 복사 작업이 완료되어 메모리에 압축이 풀렸다는 뜻입니다.

10:45.130 --> 10:46.000
여기까지입니다.

10:48.570 --> 10:54.990
따라서 이 호출이 완료될 때쯤이면 모든 내용이 메모리에 복사되어 있을 것입니다.

10:58.880 --> 11:01.820
이제 F8로 넘어가 보겠습니다.

11:04.670 --> 11:04.970
알겠습니다.

11:04.970 --> 11:06.680
짐 풀기만 마치겠습니다.

11:06.710 --> 11:07.640
계속 진행하겠습니다.

11:07.670 --> 11:09.710
여기에서 포장이 풀린 것을 볼 수 있습니다.

11:09.980 --> 11:12.650
다음에 어떤 일이 일어날지 계속 살펴보겠습니다.

11:18.740 --> 11:19.880
다시 돌아와 보겠습니다.

11:23.380 --> 11:23.680
알겠습니다.

11:23.680 --> 11:29.380
포장을 다 푼 것 같습니다. 이제 원하신다면 삭제할 수 있습니다.

11:29.680 --> 11:32.440
이 영상은 여기까지입니다.

11:32.470 --> 11:34.000
다음 강의에서 뵙겠습니다.

11:34.000 --> 11:35.140
시청해 주셔서 감사합니다.
