WEBVTT

00:00.830 --> 00:01.300
안녕하세요.

00:01.310 --> 00:02.190
돌아온 것을 환영합니다.

00:02.210 --> 00:08.660
이제 가상 머신을 복원하여 멀웨어가 변경한 내용을 모두 취소했습니다.

00:08.660 --> 00:14.480
이제 x64dbg를 사용하여 멀웨어의 압축을 풀겠습니다.

00:15.620 --> 00:20.670
따라서 x64dbg를 열고 옵션을 클릭한 다음 환경설정을 클릭합니다.

00:20.690 --> 00:23.570
시스템 중단점 및 콜백을 선택 취소하고

00:23.570 --> 00:31.580
저장을 클릭한 다음 바탕 화면의 멀웨어 코드 샘플 폴더에서 Hancitor를 엽니다.

00:34.730 --> 00:39.620
여기에서 모든 파일을 클릭하고 설치를 클릭하여 엽니다.

00:41.420 --> 00:43.190
이제 중단점을 추가합니다.

00:43.400 --> 00:47.150
앞서 한 것처럼 두 개의 중단점을 설정하겠습니다.

00:47.450 --> 00:49.580
가상 할당에 중단점을 설정합니다.

00:52.470 --> 00:56.490
Enter 키를 누른 다음 VirtualProtect에서 중단점을 설정합니다.

00:59.190 --> 01:00.060
Enter 키를 누릅니다.

01:01.470 --> 01:05.280
중단점 탭을 클릭하여 두 가지가 모두 있는지 확인합니다.

01:05.520 --> 01:08.140
이제 첫 번째 중단점으로 이동할 수 있습니다.

01:08.160 --> 01:10.650
여기에서 F9 또는 이 버튼을 클릭합니다.

01:11.430 --> 01:13.530
이제 첫 번째 중단점이 생겼습니다.

01:14.130 --> 01:18.690
따라서 F8 키를 눌러 그 위로 이동하거나 여기에서 이 버튼을 클릭하여 그 위로 이동할 수

01:19.870 --> 01:20.650
있습니다.

01:24.570 --> 01:32.340
가상 보호로 이동하면 이제 매개 변수를 스택에 푸시하고 여기 아래에 있는 가상 보호

01:32.340 --> 01:34.920
실행을 준비합니다.

01:35.400 --> 01:38.310
그러니 계속 진행하세요. 매개 변수를 밀어붙이도록 놔두겠습니다.

01:38.310 --> 01:43.410
이 가상 보호에는 5개의 매개변수가 있습니다.

01:43.830 --> 01:47.280
이 가상 보호에는 다섯 가지 매개 변수가 있습니다.

01:47.610 --> 01:55.020
따라서 여기에는 확장 기능이 있는 VirtualProtect의 다섯 가지 매개 변수가 있습니다.

01:55.050 --> 01:58.320
두 번째 매개변수는 우리가 관심을 갖고 있는 매개변수입니다.

01:58.500 --> 02:06.120
이 주소에 대한 보호 또는 권한 비트를 변경하려고 합니다.

02:06.420 --> 02:12.450
따라서 아래로 스크롤하여 읽으면 액세스 보호 속성을 변경할 페이지 영역의 기본 주소에

02:12.870 --> 02:18.720
대한 포인터인 두 번째 매개 변수인 LP 주소에 대한 설명을 볼 수 있습니다.

02:18.960 --> 02:21.180
이것이 두 번째 매개 변수입니다.

02:21.630 --> 02:24.250
두 번째 매개변수는 바로 이 매개변수입니다.

02:25.270 --> 02:28.360
여기, 이것이 첫 번째 매개변수인 것을 볼 수 있습니다.

02:28.480 --> 02:29.950
이것이 두 번째 매개 변수입니다.

02:30.280 --> 02:36.610
따라서 이 메모리를 보려면 여기 메모리를 따라가면 됩니다. 마우스 오른쪽 버튼을 클릭한

02:36.610 --> 02:37.540
다음 단어

02:38.690 --> 02:45.250
팔로우를 선택한 다음 덤프에서 단어를 팔로우합니다.

02:45.890 --> 02:50.630
따라서 이 메모리 영역이 보호 기능을 변경하려는 메모리 영역입니다.

02:50.660 --> 02:57.710
따라서 이 포장을 풀기 위한 최종 장소가 될지 여부를 확인하기 위해 보관할 수 있습니다.

02:58.520 --> 03:04.040
그래서 저희는 그 목록을 계속 주시하고 있습니다. 4 뒤에 0이 네 번 나옵니다.

03:04.730 --> 03:12.680
이제 우리는 계속 달려갑니다. F9를 누르거나 이 실행 버튼을 클릭하여 다음 중단점인 VirtualAlloc으로 이동합니다.

03:13.880 --> 03:15.320
이제 여기까지 왔습니다.

03:15.320 --> 03:18.890
이를 클릭하거나 F8 키를 눌러 넘어갑니다.

03:21.710 --> 03:23.810
이제 가상 할당으로 이동하겠습니다.

03:26.190 --> 03:30.030
이제 가상 할당에 대한 모든 매개 변수를 푸시할 것입니다.

03:30.840 --> 03:38.340
이제 여기까지, 이 모든 매개변수는 VirtualAlloc 호출을 위해 스택으로 푸시되었습니다.

03:38.520 --> 03:42.990
그리고 이 특별한 VirtualAlloc에는 확장 기능도 있습니다.

03:43.350 --> 03:52.980
따라서 이 특정 VirtualAlloc에는 5개의 매개변수가 있으며, 이것이 MSDN의 참조입니다.

03:54.300 --> 03:55.290
다섯 가지 매개변수.

03:55.290 --> 03:57.300
하나, 둘, 셋, 넷, 다섯.

03:57.510 --> 03:59.940
하지만 우리는 반환 값에 관심이 있습니다.

04:00.060 --> 04:03.660
따라서 반환 값은 아래로 스크롤하여 읽을 수 있습니다.

04:05.190 --> 04:06.510
무엇을 반환하나요?

04:07.030 --> 04:08.160
반환 값입니다.

04:08.460 --> 04:14.810
함수가 성공하면 반환값은 할당된 페이지 영역의 기본 주소가 됩니다.

04:14.820 --> 04:17.190
그래서 우리는 반환 값에 관심이 있습니다.

04:17.790 --> 04:22.790
이제 함수가 반환되면 -로 결과를 반환합니다.

04:22.800 --> 04:29.750
따라서 이 호출 후에는 - 메모리에 할당된 영역의 주소가 포함되어야 합니다.

04:29.760 --> 04:34.440
이제 우리는 이 문제를 해결하고 지켜보겠습니다. 한 단계 넘어가면 이제

04:35.040 --> 04:39.600
0이 두 개 뒤에 네 개가 표시됩니다.

04:39.600 --> 04:43.710
따라서 이 항목을 마우스 오른쪽 버튼으로 클릭하고 2번 덤프를 따라가면 됩니다.

04:45.620 --> 04:50.150
이제 이것이 할당된 메모리 영역임을 알 수 있습니다.

04:51.070 --> 04:55.120
이제 계속 실행하여 여기서 무슨 일이 일어나는지 확인할 수 있습니다.

04:55.930 --> 05:03.700
이 시점에서 중단점을 살펴보면 첫 번째 세션에서 작성한 메모를 기억하기 때문에 두 API가

05:03.700 --> 05:11.680
각각 한 번씩 호출되었습니다. 여기 아래에는 카운트, 중단점 카운트가 있습니다.

05:11.860 --> 05:19.270
덤프할 준비가 되려면 VirtualAlloc을 7번, VirtualProtect를 한 번 눌러야 한다는 것을 알고 있습니다.

05:19.720 --> 05:23.950
그래서 우리는 계속 달릴 수 있습니다.

05:24.880 --> 05:27.760
달리면서 여기서 어떤 일이 일어나는지 확인합니다.

05:28.000 --> 05:31.300
이제 F9 또는 이 버튼을 클릭합니다.

05:31.780 --> 05:33.130
다음 페이지로 이동합니다.

05:33.550 --> 05:36.640
그리고 이미 여기에 일부 코드가 압축 해제된 것을 알 수 있습니다.

05:37.090 --> 05:41.410
GetCurrentProcess, GetProcAddress를 볼 수 있습니다.

05:41.560 --> 05:46.960
그리고 아래로 스크롤하면 다른 API인 GetModuleHandle을 볼 수 있습니다.

05:48.630 --> 05:51.270
그리고 더 스크롤하면 더 많은 API, LoadLibraryA

05:52.860 --> 05:55.450
등을 볼 수 있습니다.

05:55.470 --> 05:58.840
따라서 여기에서도 VirtualAlloc을 사용할 수 있습니다.

05:58.860 --> 06:06.900
따라서 이것은 아마도 최종 EXE 파일의 압축을 푸는 데 사용되는 중간 코드일 것입니다.

06:07.170 --> 06:08.760
아직 끝나지 않았습니다.

06:08.910 --> 06:13.650
이제 두 번째 가상 할당에 도달했습니다. 우리는 계속 나아갑니다.

06:16.880 --> 06:23.570
가상 할당으로 이동합니다. 이제 다음 5개의 매개변수를 스택에 푸시합니다.

06:24.290 --> 06:26.780
이제 매개변수가 스택에 푸시되었습니다.

06:27.020 --> 06:32.900
의 수익률 배분을 살펴보기 위해 한 걸음 물러서겠습니다.

06:33.500 --> 06:35.210
이제 우리는 한 걸음 더 나아가서

06:35.390 --> 06:38.480
이 메모리 영역을 할당했습니다.

06:38.990 --> 06:42.800
이 항목을 마우스 오른쪽 버튼으로 클릭하고 2번 덤프, 3번 덤프를 차례로

06:43.490 --> 06:44.450
진행합니다.

06:46.130 --> 06:48.740
따라서 이것은 할당된 또 다른 메모리입니다.

06:49.610 --> 06:51.980
이제 중단점 탭을 살펴보겠습니다.

06:54.590 --> 06:56.750
VirtualAlloc이 두 번 공격당했습니다.

06:57.230 --> 06:58.400
아직 끝나지 않았습니다.

06:58.580 --> 07:01.220
그래서 우리는 달려가서 여기서 무슨 일이 일어나는지 확인합니다.

07:02.120 --> 07:02.390
알겠습니다.

07:02.390 --> 07:10.100
이제 여기에 몇 가지 코드가 압축 해제된 것을 볼 수 있는데, 아마도 RC4 복호화일 것입니다.

07:10.670 --> 07:11.510
이것 좀 보세요.

07:11.840 --> 07:16.120
행과 열이 멋지게 정렬되어 있습니다.

07:16.130 --> 07:19.640
RC4인지는 확실하지 않지만 RC4 복호화일 수 있습니다.

07:20.030 --> 07:24.300
이제 우리는 계속해서 넘어갑니다.

07:29.530 --> 07:33.010
따라서 암호 해독은 아직 끝나지 않았다는 것을 의미합니다.

07:33.250 --> 07:40.660
따라서 이 코드도 최종 포장을 푸는 데 도움을 주기 위해 풀린 중간 코드입니다.

07:41.110 --> 07:44.250
그러니 계속 넘어가세요.

07:46.220 --> 07:48.260
가상 할당, 가상 할당.

07:48.380 --> 07:51.770
VirtualAlloc은 이제 다음 5개의 파라미터를 스택에 푸시합니다.

07:52.730 --> 07:55.940
이제 반환 주소로 이동하여 반환 주소를 살펴보겠습니다.

07:57.050 --> 07:57.380
알겠습니다.

07:57.380 --> 08:01.250
이제 이 메모리가 할당되었으므로 이 메모리를 따라갈 수 있습니다. 마우스 오른쪽 버튼을 클릭하고 덤프에서

08:01.250 --> 08:04.280
팔로우합니다. 네 번째 덤프.

08:06.580 --> 08:13.390
이것이 새로운 메모리 할당입니다. 이것이 바로 F9이며, 여기에서 실행하여 압축을 푸는 것을 확인하세요.

08:14.050 --> 08:19.800
실행. 그리고 다시, 추가 암호 해독이 필요할 수도 있습니다. 잘 모르겠습니다.

08:19.810 --> 08:22.390
따라서 이것은 아직 최종적으로 풀린 코드가 아닙니다.

08:22.930 --> 08:25.210
그래서 우리는 계속 넘어갑니다.

08:25.600 --> 08:31.240
따라서 이 시점에서 중단점을 보면 VirtualAlloc이 네 번 도달했습니다.

08:31.540 --> 08:39.820
따라서 이 VirtualAlloc을 계속 진행하세요. VirtualAlloc으로 이동하면 이제 다음 5개의 파라미터를

08:39.820 --> 08:41.680
스택에 푸시합니다.

08:43.720 --> 08:44.080
알겠습니다.

08:44.080 --> 08:49.600
이 시점에서 스택에 5개의 파라미터를 푸시하여 다음 VirtualAlloc을 호출합니다.

08:49.780 --> 08:53.650
이제 이 부분을 넘어 반환 주소를 살펴보겠습니다.

08:53.860 --> 08:55.450
이제 반환 주소는 3

08:55.450 --> 08:58.570
뒤에 0이 네 개로 표시됩니다.

08:58.990 --> 09:04.120
이걸 마우스 오른쪽 버튼으로 클릭하고 덤프, 5번 덤프입니다.

09:06.000 --> 09:06.360
알겠습니다.

09:06.360 --> 09:11.460
따라서 이것은 추가 코드를 압축 해제할 새 메모리 주소입니다.

09:11.580 --> 09:15.120
이제 실행해서 이 메모리 영역에 어떤 일이 일어나는지 살펴봅시다.

09:16.540 --> 09:16.820
알겠습니다.

09:17.200 --> 09:18.070
아무 일도 일어나지 않습니다.

09:18.100 --> 09:18.520
알겠습니다.

09:18.550 --> 09:19.360
문제 없습니다.

09:19.360 --> 09:24.280
그리고 이 시점에서 우리는 이미 VirtualAlloc을 다섯 번이나 사용했습니다.

09:24.790 --> 09:27.300
이제 새로운 VirtualAlloc에 대해 살펴보겠습니다.

09:30.180 --> 09:37.830
VirtualAlloc으로 이동하면 이제 5개의 파라미터를 스택에 푸시하여 여기 VirtualAlloc을

09:37.830 --> 09:39.480
호출할 준비를 합니다.

09:39.900 --> 09:44.370
이 시점에서 다섯 개의 매개변수가 스택에 푸시되었으며,

09:44.370 --> 09:49.230
이 위로 이동하면 할당된 반환 주소를 볼 수 있습니다.

09:50.070 --> 09:53.390
이쪽으로 오시면 반납 주소입니다.

09:53.400 --> 09:54.420
똑같습니다.

09:54.720 --> 09:56.040
따라서 변경 사항은 없습니다.

09:56.220 --> 09:58.250
여전히 아무것도 없습니다.

09:58.300 --> 10:02.610
이미 여기 5번 덤프에서 따라가고 있으므로 이제 따라가야 합니다.

10:02.790 --> 10:05.040
3 뒤에 0이 네 개 있습니다.

10:05.190 --> 10:07.740
이제 실행해보고 어떤 일이 일어나는지 살펴봅시다.

10:10.630 --> 10:11.800
이제 실행 중입니다.

10:11.800 --> 10:12.310
보실 수 있습니다.

10:12.310 --> 10:15.130
중단점에 도달할 때까지 실행합니다.

10:15.160 --> 10:16.480
몇 초만 기다려주세요.

10:17.590 --> 10:20.590
그래서 몇 초 후 다시 중단점에 도달했습니다.

10:20.590 --> 10:25.210
여전히 이 메모리 영역에는 아무것도 언패킹되지 않았으며, 이제 다음 VirtualAlloc으로

10:25.390 --> 10:27.300
이동하여 중단점을 클릭합니다.

10:27.310 --> 10:30.420
이제 VirtualAlloc이 6번 공격을 받은 것을 확인할 수 있습니다.

10:30.430 --> 10:36.270
앞서 첫 번째 실행에서 VirtualAlloc이 7번 공격을 받았다는 사실을 기억하세요.

10:36.280 --> 10:40.090
즉, 메모리를 덤프하기 전에 한 번의 히트가 더 남았다는 뜻입니다.

10:40.930 --> 10:50.170
그럼 이제 따라가 보겠습니다. 다음 가상 할당으로 넘어가서 가상 할당으로 이동합니다.

10:51.520 --> 10:56.260
이제 다음 5개의 파라미터를 스택에 푸시합니다.

10:58.780 --> 11:01.180
그래서 다섯 가지 매개 변수를 밀어붙였습니다.

11:01.180 --> 11:07.460
이제 VirtualAlloc을 다시 호출하고 -에서 반환 주소를 확인합니다.

11:07.480 --> 11:12.920
이제 반환 주소는 0000으로 넘어가 보겠습니다.

11:12.920 --> 11:18.680
따라서 이 메모리 주소에서는 압축을 풀 수 없으므로 따라갈 필요가 없습니다.

11:18.860 --> 11:22.430
그래서 우리는 다음 VirtualAlloc으로 계속 달려갑니다.

11:24.080 --> 11:27.200
그래서 우리는 중단점에 도달했습니다. 다시 실행합니다.

11:28.800 --> 11:31.710
이제 VirtualAlloc을 다시 한 번 더 실행합니다.

11:32.220 --> 11:33.960
이제 넘어가 보겠습니다.

11:35.830 --> 11:36.250
이 VirtualAlloc.

11:43.640 --> 11:44.020
맞습니다.

11:44.030 --> 11:50.360
다음 5개의 파라미터를 스택에 푸시하여 VirtualAlloc 호출을 준비합니다.

11:50.570 --> 11:52.580
그래서 우리는 지금 여기에 있습니다. 이동해 보겠습니다.

11:54.230 --> 12:01.010
이제 반환 주소는 1C에 0이 네 개 뒤따르는 1C가 됩니다.

12:01.160 --> 12:05.420
따라서 덤프가 부족하므로 이 덤프를 마우스

12:06.070 --> 12:12.070
오른쪽 버튼으로 클릭한 다음 1번 덤프를 따라가면 됩니다.

12:12.070 --> 12:14.140
그래서 지금 버리러 갑니다.

12:14.770 --> 12:17.020
그래서 지금 덤프가 여기에 있습니다.

12:17.020 --> 12:19.480
이제 실행해서 이 덤프가 어떻게 되는지 확인해 보겠습니다.

12:20.830 --> 12:24.760
이 메모리 주소에 EXE 파일의 압축을 푼 것 같습니다.

12:25.270 --> 12:25.960
저것 좀 보세요.

12:25.990 --> 12:27.700
1C 뒤에 0이 네 개 있습니다.

12:27.730 --> 12:28.060
보이시죠?

12:28.180 --> 12:33.490
MS 헤더가 있고 이 문자열이 있습니다.

12:33.520 --> 12:34.120
즉, 이 프로그램은

12:34.120 --> 12:36.250
DOS 모드에서 실행할 수 없습니다.

12:36.640 --> 12:38.440
PE 헤더가 있습니다.

12:39.430 --> 12:46.200
그런 다음 아래로 스크롤하면 . 텍스트 섹션에서 . 데이터 섹션에서 . rdata 섹션에서

12:46.200 --> 12:47.340
. 재배치 섹션을 클릭합니다.

12:47.460 --> 12:47.880
알겠습니다.

12:47.880 --> 12:50.490
그래서 이것은 다음과 같습니다.

12:53.750 --> 12:54.680
덤프할 준비가 되었습니다.

12:54.680 --> 13:01.190
이제 중단점을 클릭하면 가상 할당에 7번 도달한 것을 볼 수 있고, 여기로 이동하면

13:01.190 --> 13:08.570
실행 중인 것을 확인할 수 있습니다. 자유롭게 실행되고 있으며 더 이상 중단점에 도달하지

13:08.570 --> 13:09.560
않습니다.

13:09.560 --> 13:13.040
이제 마지막 가상 할당에 도달했음을 확인했습니다.

13:13.310 --> 13:14.930
이제 덤프할 준비가 되었습니다.

13:15.320 --> 13:20.120
이번 주소는 1C 뒤에 0이 네 개 있습니다.

13:20.300 --> 13:25.670
코드를 실행할 때마다 여기에 다른 주소, 다른 반환 주소가 표시될 수 있습니다.

13:25.670 --> 13:28.750
따라서 사용자에 따라 다를 수 있습니다.

13:28.760 --> 13:31.370
따라서 1C 뒤에 0이 네 개 있습니다.

13:31.520 --> 13:33.950
1C 뒤에 0이 네 번 온다는 것을 기억하세요.

13:33.950 --> 13:38.780
다음 동영상에서는 계속해서 덤핑하고 매핑을 해제할 것입니다.

13:38.810 --> 13:40.160
다음 동영상에서 뵙겠습니다.
