WEBVTT

00:00.500 --> 00:01.100
돌아온 것을 환영합니다.

00:01.280 --> 00:09.680
이전 비디오에서는 첫 번째 부모 Shbg에서 CreateProcessInternalW를 추적했습니다.

00:10.130 --> 00:18.410
그리고 부모 프로세스에서 Ramnit 관리자라는 새 프로세스가 생성된 것을 발견했습니다.

00:18.410 --> 00:21.630
두 번째 xdbg를 사용하여 첨부합니다.

00:22.760 --> 00:28.850
이제 1초가 지났고 첫 번째 xdbg가 여전히 실행 중입니다.

00:28.850 --> 00:35.330
따라서 여기 상단에서 제목을 보면 이것이 부모이고 이것이 자식임을 알 수 있습니다.

00:35.330 --> 00:36.950
자식 람닛 관리자.

00:37.610 --> 00:44.690
이제 이 프로세스와 이 프로세스를 동시에 분석할 수 있습니다.

00:45.020 --> 00:52.250
따라서 지금은 자식 프로세스에 중단점을 설정해야 하며 중단점이 거의 설정되었습니다.

00:52.250 --> 00:57.110
여기에서 볼 수 있듯이 부모에 설정한 것과 동일합니다.

00:57.380 --> 01:02.220
이제 아이에게 가서 내려가서 중단점을 설정합니다.

01:02.310 --> 01:07.110
첫 번째는 가상 잠금으로, Enter 키를 누릅니다.

01:08.890 --> 01:10.660
여기에 있는 목록을 따르세요.

01:11.290 --> 01:16.080
두 번째는 가상 제품입니다.

01:16.680 --> 01:18.370
보호 입력.

01:20.900 --> 01:25.130
다음 질문은 디버거가 존재하느냐는 것입니다.

01:25.910 --> 01:32.900
따라서 중단점이 켜져 있으면 디버거가 존재합니다.

01:34.460 --> 01:39.830
그런 다음 내부 프로세스를 생성합니다.

01:42.110 --> 01:44.090
프로세스 만들기.

01:44.900 --> 01:53.330
내부에서 엔터 키를 누르면 다음 항목은 프로세스 메모리 쓰기입니다.

01:54.320 --> 01:57.380
그러니 쓰기를 입력하세요.

01:59.870 --> 02:02.120
프로세스 메모리.

02:04.490 --> 02:05.000
알겠습니다.

02:05.000 --> 02:07.910
그리고 스레드를 다시 시작할 때까지 마지막은 생략해도 됩니다.

02:08.180 --> 02:11.300
따라서 필요하지 않습니다.

02:11.510 --> 02:14.330
이제 모든 중단점을 확보했는지 확인합니다.

02:14.810 --> 02:18.500
중단점 탭을 클릭하면 아무것도 없는 것을 확인할 수 있습니다.

02:18.590 --> 02:23.300
이 두 번째 프로세스가 있기 때문에 이런 일이 발생합니다.

02:24.360 --> 02:25.220
어디 보자.

02:25.230 --> 02:26.760
아마도 일시 중단된 상태일 것입니다.

02:27.330 --> 02:30.900
따라서 우리가 해야 할 일은 첫 번째를 사용해야 한다는 것입니다.

02:32.470 --> 02:37.300
두 번째 프로세스를 활성화하려면 여기에서 프로세스를 진행합니다.

02:37.330 --> 02:38.490
하위 프로세스.

02:38.500 --> 02:45.190
여기에서 사용자 코드 실행을 클릭하면 됩니다.

02:45.190 --> 02:48.370
따라서 이 실행을 클릭하면 사용자 코드로 이동합니다.

02:48.400 --> 02:48.820
참고하세요.

02:48.820 --> 02:50.170
우리는 첫 번째 프로세스를 진행 중입니다.

02:54.430 --> 02:55.480
그는 달리고 있어야 합니다.

02:57.140 --> 02:57.410
알겠습니다.

02:57.410 --> 02:58.940
이제 이 과정을 반복할 수 있습니다.

02:59.300 --> 03:03.110
중단점을 가상으로 설정합니다.

03:03.170 --> 03:03.530
여보세요?

03:05.480 --> 03:06.560
좋아요, 엔터를 누르세요.

03:06.770 --> 03:08.300
그리고 이번에는 작동합니다.

03:09.050 --> 03:15.020
따라서 여기 첫 번째 목록의 모든 중단점을 첫 번째 프로세스에서 반복하면 됩니다.

03:17.330 --> 03:24.770
중단점을 보호할 중단점을 설정합니다.

03:26.540 --> 03:27.890
디버거가 있나요?

03:33.500 --> 03:36.560
Create프로세스 내부의 중단점.

03:39.440 --> 03:39.980
W.

03:43.170 --> 03:48.030
그리고 쓰기 프로세스 메모리에 대한 중단점.

03:48.450 --> 03:50.910
그러니 모든 것을 갖추었는지 다시 한 번 확인하세요.

03:51.210 --> 03:58.320
모든 것이 완료되었음을 확인했으면 여기에서 CPU를 클릭하고 첫 번째 프로세스로 돌아갈 수 있습니다.

03:58.350 --> 03:59.730
CPU도 클릭합니다.

03:59.940 --> 04:01.620
이것이 첫 번째 프로세스입니다.

04:01.620 --> 04:07.800
이제 실행을 클릭하여 동물 중단점에 도달하는지 확인하겠습니다.

04:08.850 --> 04:17.670
아니요, 디버거 존재 여부가 확인되어 리턴을 실행할 수 있도록 디버거가 실행 중입니다.

04:17.670 --> 04:18.030
Code.

04:18.180 --> 04:26.100
그리고 API의 결과는 001로 디버거의 존재가 양수임을 의미합니다.

04:26.130 --> 04:29.460
따라서 이를 0으로 변경하여 무효화할 수 있습니다.

04:30.300 --> 04:31.020
그러니 클릭하세요.

04:31.020 --> 04:33.480
좋아, 다시 실행해 보세요.

04:34.980 --> 04:36.660
여기에서도 마찬가지입니다.

04:37.550 --> 04:40.730
반환을 실행하려면 이 실행이 표시됩니다.

04:40.880 --> 04:44.350
그리고 그 API 호출의 결과는 다시 하나입니다.

04:44.360 --> 04:46.690
따라서 하나는 디버거가 감지되었음을 의미합니다.

04:46.700 --> 04:54.950
따라서 이를 다시 0으로 설정하고 확인을 클릭한 다음 다시 실행하여 이를 우회해야 합니다.

04:56.330 --> 04:56.660
알겠습니다.

04:56.660 --> 05:03.590
이번에는 여기에서 볼 수 있듯이 자유롭게 실행되고 있으며 더 이상 중단점에 부딪히지 않습니다.

05:03.590 --> 05:11.090
이제 하위 프로세스 잔여 관리자로 돌아가서 여기서 분석을 계속할 수 있습니다.

05:11.090 --> 05:17.810
그리고 아마도 이 자식 프로세스에서 언팩 코드를 덤프할 것입니다.

05:18.470 --> 05:20.300
이제 그렇게 해보겠습니다.

05:20.300 --> 05:22.400
이제 이 문제를 확장할 수 있습니다.

05:23.150 --> 05:31.490
이제 실행해보고 중단점에 도달하면 이 가상 프로텍트에 도달하는지 확인해 보겠습니다.

05:31.910 --> 05:44.430
점프, 점프, 점프를 반복하면서 계속 분석하여 무엇을 하려고 하는지 확인할 수 있습니다.

05:44.430 --> 05:46.140
매개 변수를 푸시하도록 합니다.

05:46.560 --> 05:49.860
이제 이 감시자를 보호라고 부를 것입니다.

05:50.280 --> 05:53.790
두 번째 매개변수를 살펴봤습니다.

05:54.210 --> 05:59.400
이 메모리 영역에 대한 보호 기능을 변경하고 있습니다.

05:59.520 --> 06:00.530
4000.

06:02.180 --> 06:07.130
그리고 우리가 원한다면 어둠 속에서도 이걸 따라갈 수 있습니다.

06:07.280 --> 06:15.590
여기에서 이 항목을 마우스 오른쪽 버튼으로 클릭하고 덤프를 따라가면 됩니다.

06:17.890 --> 06:20.500
현재 댐의 D-word를 통한 왕국.

06:21.460 --> 06:26.560
여기에 무언가가 있고 이에 대한 메모리 맵을 살펴보세요.

06:26.830 --> 06:30.550
이를 마우스 오른쪽 버튼으로 클릭하고 메모리 맵에서 따라갑니다.

06:32.200 --> 06:38.740
자, 여기에서 현재 메인 실행 파일은 읽기만 가능한 것을 볼 수 있습니다.

06:40.240 --> 06:45.820
메모리 덤프에서 이를 따라가다가 다시 메모리 맵으로 돌아가는 이유는 갈 수 없기 때문입니다.

06:45.820 --> 06:47.620
여기에서 메모리 맵으로 바로 이동합니다.

06:48.160 --> 06:50.830
이것이 바로 덤프에서 이를 따르는 이유입니다.

06:50.830 --> 06:52.750
그리고 덤프에서 메모리 맵을 따라갑니다.

06:53.170 --> 07:00.130
이제 이 API를 실행하면 어떤 일이 발생하는지 살펴보겠습니다.

07:01.210 --> 07:05.260
이제 돌아가서 올바른 권한이 추가되었습니다.

07:05.260 --> 07:10.900
즉, 004부터 이 메모리 영역에 무언가를 수행한다는 뜻입니다.

07:11.500 --> 07:13.930
아마 뭔가를 풀어줄 것 같습니다.

07:14.770 --> 07:15.880
이제 시작하겠습니다.

07:18.990 --> 07:21.180
보호 대상은 다음과 같습니다.

07:21.300 --> 07:23.700
이제 계속 넘어가 보겠습니다.

07:23.700 --> 07:24.450
가상 보호.

07:25.080 --> 07:25.590
점프.

07:26.250 --> 07:30.930
가상 보호로 이동하여 이 통화로 오세요.

07:31.530 --> 07:34.030
이제 모든 매개변수를 스택에 푸시했습니다.

07:34.050 --> 07:36.300
두 번째도 마찬가지입니다.

07:36.690 --> 07:42.030
여기에 있는 이 메모리 영역에 대한 권한을 변경할 것입니다.

07:42.180 --> 07:44.010
다시 돌아가서 살펴보겠습니다.

07:44.190 --> 07:46.590
이제 읽기, 쓰기가 가능합니다.

07:46.890 --> 07:48.870
이제 이 통화를 넘어가 보겠습니다.

07:49.530 --> 07:52.080
해당 메모리 영역에 어떤 일이 일어나는지 확인하세요.

07:52.560 --> 07:53.820
그래서 우리는 넘어섰습니다.

07:54.150 --> 07:56.610
이제 돌아가서 점검해 보겠습니다.

07:56.760 --> 07:58.170
쓰기 가능 항목이 제거되었습니다.

07:58.500 --> 08:02.880
즉, 이 메모리 영역 어딘가에 이미 압축을 풀었다는 뜻입니다.

08:03.210 --> 08:04.710
그러면 이걸 버릴 수 있을까요?

08:04.950 --> 08:11.100
확실하지 않은 경우 다른 도구 등을 사용하여 덤프하고 분석할 수 있습니다.

08:11.880 --> 08:14.850
이곳이 올바른 덤프 장소인지 확실하지 않습니다.

08:15.000 --> 08:16.770
그래서 계속 진행합니다.

08:16.870 --> 08:17.440
첫째.

08:17.740 --> 08:19.840
이제 계속 진행하겠습니다.

08:21.540 --> 08:25.830
실행을 클릭하면 이번에는 가상 할당에 도달합니다.

08:26.910 --> 08:30.470
자, 이제 이 점프 로그를 살펴 보겠습니다.

08:31.860 --> 08:35.250
이 통화로 이동합니다.

08:35.490 --> 08:42.040
그리고 이를 호출하면 할당된 메모리가 X 레지스터에 표시됩니다.

08:42.060 --> 08:44.580
그럼 이쪽으로 가서 확인해 보겠습니다.

08:45.030 --> 08:46.290
여기까지입니다.

08:46.290 --> 08:49.890
따라서 이제 2번을 선택하기 위해 이를 함께 따릅니다.

08:50.010 --> 08:54.540
그리고 여기에서 다음 엄지 손가락을 마우스 오른쪽 버튼으로 클릭합니다.

08:55.020 --> 08:58.650
이제 2번은 여기 메모리에 있습니다.

08:58.860 --> 09:06.120
그리고 그것은 제대로 수행되면 1번은 무언가를 풀려고 하기 때문에 메인 X가 아니라는 것을 보여줍니다.

09:06.120 --> 09:06.870
그렇지 않다면 아마도 끝났을 것입니다.

09:06.870 --> 09:13.710
1번은 최종 압축을 푸는 데 사용할 중간 프로그램일 뿐입니다.

09:13.710 --> 09:21.000
코드 또는 첫 번째 덤프인 휴대용 실행 파일을 사용하여 두 번째 덤프의 압축을 풀 수 있습니다.

09:21.150 --> 09:23.880
따라서 이것이 가설에 불과한지는 확실하지 않습니다.

09:23.880 --> 09:26.490
어쨌든 계속 살펴봅시다.

09:26.970 --> 09:29.490
이제 다시 달려보겠습니다.

09:31.260 --> 09:33.030
한 번에 허용되는 수입니다.

09:33.930 --> 09:36.450
그래서 우리는 이 문제를 계속 해결해 나가고 있습니다.

09:39.150 --> 09:39.480
잠급니다.

09:42.700 --> 09:51.970
그리고 나서 이걸 넘어가면 새로 할당된 영역이 들어오고, 이걸 넘어가면 두 개가 표시됩니다.

09:51.970 --> 09:53.350
3 뒤에 0이 네 개 있습니다.

09:53.350 --> 09:58.720
즉, 이 메모리 영역에서 시작하여 코드를 계속 언패킹하고 있다는 뜻입니다.

09:58.930 --> 10:01.330
원한다면 3번 덤프를 따라갈 수도 있습니다.

10:01.330 --> 10:04.450
따라서 덤프를 마우스 오른쪽 버튼으로 클릭합니다.

10:04.900 --> 10:07.600
이 작업을 수행하기 전에 먼저 덤프 3을 선택해야 합니다.

10:08.140 --> 10:10.810
이제 3번 덤프가 등장합니다.

10:11.230 --> 10:12.130
가자.

10:13.920 --> 10:15.400
다시 그의 동작에 따라.

10:15.790 --> 10:16.960
다시 시작합니다.

10:17.980 --> 10:22.690
함께 보기로 이동하여 이 통화로 와서 한 발짝 떨어져 보세요.

10:23.140 --> 10:31.330
이제 다른 영역 메모리를 2D로 할당하고 있으므로 덤프 파일 선택 덤프 4에서 이를 따라갈 수 있습니다.

10:31.690 --> 10:34.270
그리고 마우스 오른쪽 버튼을 클릭하고 덤프에서 팔로우합니다.

10:35.790 --> 10:40.950
이제 아래 2번은 언팩 코드가 있고, 3번과 4번은 비어 있습니다.

10:41.220 --> 10:42.300
이제 시작하겠습니다.

10:44.280 --> 10:46.470
그리고 이제 몰락을 보게 됩니다.

10:46.650 --> 10:49.680
4번 덤프에 언팩 코드가 있습니다.

10:50.610 --> 10:51.000
알겠습니다.

10:51.000 --> 10:57.710
이번에는 가상 보호에 도달했고 이제 덤프 4가 이미 Z로 채워진 것을 볼 수 있습니다.

10:58.260 --> 11:02.010
이제 Virtualprotect를 호출합니다.

11:02.910 --> 11:03.210
알겠습니다.

11:03.210 --> 11:09.360
따라서 이 시점에서는 덤프 4를 덤프해도 되지만 확실하지 않은 경우 계속 진행해도 됩니다.

11:09.360 --> 11:11.580
탐색을 계속 진행하려면.

11:11.580 --> 11:17.340
하지만 이 시점에서는 전에도 해봤고, 전에도 해본 적이 있기 때문에 말씀드릴 수 있습니다.

11:17.340 --> 11:19.290
이곳이 덤프할 올바른 장소임을 확인합니다.

11:19.650 --> 11:20.970
그렇다면 무엇을 버릴까요?

11:20.970 --> 11:25.020
프로세스 해커를 사용하여 덤프하고 있습니다.

11:25.200 --> 11:27.580
다음 단원에서 그 방법을 알아보겠습니다.

11:27.600 --> 11:28.410
다음 동영상.

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