WEBVTT

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

00:02.690 --> 00:10.820
이 새 동영상에서는 dnSpy를 사용하여 Remcos의 압축을 푸는 방법을 보여드리겠습니다.

00:11.540 --> 00:15.380
그리고 32비트 버전의 dnSpy가 필요합니다.

00:16.840 --> 00:20.920
일반적으로 플레어와 플레어에서 찾을 수 있습니다.

00:22.450 --> 00:24.850
로 이동합니다. NET.

00:25.330 --> 00:28.320
dnSpy에는 두 가지 버전이 있어야 합니다.

00:28.780 --> 00:30.820
이것은 64비트입니다.

00:30.850 --> 00:32.800
이것은 32비트입니다.

00:33.400 --> 00:37.930
이 중 어느 것도 작동하지 않는 경우.

00:38.530 --> 00:40.750
제 경우를 예로 들어보겠습니다.

00:41.450 --> 00:43.460
32비트가 작동하지 않습니다.

00:43.460 --> 00:51.590
따라서 다운로드할 수 있으며 다운로드 링크는 리소스 섹션(여기)에 제공됩니다.

00:52.370 --> 00:58.250
이 파일을 다운로드하고 이 웹사이트로 이동하여 32비트 버전을 다운로드할 수 있습니다.

00:59.450 --> 01:05.750
이미 32비트 버전을 다운로드하여 데스크톱에 설치한 후 이 버튼을 클릭하기만

01:05.750 --> 01:07.610
하면 시작됩니다.

01:08.750 --> 01:16.430
32비트 또는 64비트 버전을 실행 중인지 확인하려면 왼쪽 상단에서 조회할 수 있습니다.

01:16.730 --> 01:21.260
여기에 작은 부분이 보이면 32비트 버전입니다.

01:22.520 --> 01:32.960
이제 렘코스를 드래그합니다. exe를 dnSpy로 바꾸면 dnSpy가 이를 디컴파일합니다.

01:34.640 --> 01:39.650
가장 먼저 살펴봐야 할 것은 주요 진입 지점입니다.

01:40.470 --> 01:44.580
일반적으로 여기에 적혀 있으므로 메인 버튼을 클릭하면 해당 페이지로 이동합니다.

01:45.930 --> 01:48.360
이제 포장을 푸는 코드입니다.

01:48.690 --> 01:57.030
따라서 압축을 푼 코드이므로 압축을 푼 후 압축을 푼 실행 파일을 호출합니다.

01:57.210 --> 02:00.450
따라서 호출 메서드를 추적하는 데 관심이 있습니다.

02:02.130 --> 02:03.570
이제 살펴봅시다.

02:03.600 --> 02:08.640
여기가 진입점이자 주요 기능이며, 그다음은 여기입니다.

02:10.280 --> 02:12.810
78번 라인은 우리가 관심 있는 라인입니다.

02:12.830 --> 02:15.230
이것이 유일한 함수 호출입니다.

02:15.980 --> 02:18.630
이 두 가지는 환경을 설정하는 것일 뿐입니다.

02:18.650 --> 02:20.340
그러니 이걸 따라하세요.

02:20.360 --> 02:21.140
MyObject.

02:23.140 --> 02:29.830
따라서 내 객체를 클릭하면 이것이 내 객체 클래스임을 알 수 있습니다.

02:30.160 --> 02:31.990
그리고 여기에는 루프가 있습니다.

02:32.320 --> 02:38.840
그리고 루프는 이 프로그램에 있는 모든 유형의 객체를 통과합니다.

02:38.860 --> 02:43.690
그런 다음 특정 유형과 일치하는지 확인합니다.

02:43.690 --> 02:45.520
그러면 플래그가 true로 설정됩니다.

02:45.700 --> 02:52.570
따라서 플래그가 참인 상태로 바로 이동하는 한 가지 방법은 여기에 중단점을 설정하는 것입니다.

02:53.200 --> 02:59.200
따라서 여기에 중단점을 설정하고 실행을 클릭하면 플래그가 참일 때마다 이 페이지로 이동합니다.

02:59.230 --> 03:04.420
이렇게 하면 각 루프를 하나씩 거치는 수고를 덜 수 있습니다.

03:04.870 --> 03:09.580
이제 실행을 클릭하고 이 시점에서 오류가 발생하면 확인을 클릭합니다.

03:10.940 --> 03:12.670
이제 이 중단점에 도달했습니다.

03:12.680 --> 03:16.070
여기에서 이 버튼을 클릭해 들어가 보겠습니다.

03:16.070 --> 03:16.880
들어가기.

03:17.660 --> 03:20.090
호출 메서드를 찾고 있다는 점을 기억하세요.

03:21.380 --> 03:23.240
이제 우리는 배열 안에 있습니다.

03:23.780 --> 03:27.740
분석해 보면 중요한 블록은 if입니다.

03:28.640 --> 03:31.070
그래서 우리는 이 깃발이 사실이었으면 합니다.

03:31.100 --> 03:34.520
이 또한 사실이기를 바라며, 저희는 이것이 사실이기를 바랍니다.

03:34.550 --> 03:36.590
즉, 세 가지 플래그가 모두 참이어야 합니다.

03:36.620 --> 03:40.930
따라서 가장 안쪽의 함수 호출이 가장 중요합니다.

03:40.940 --> 03:43.280
그래서 가장 안쪽에 중첩되어 있습니다.

03:43.550 --> 03:49.370
따라서 여기에 중단점을 설정하면 세 개의 플래그가 모두 참이 될 때까지 반복해야 하는 번거로움을

03:49.370 --> 03:50.870
줄일 수 있습니다.

03:51.380 --> 03:54.470
따라서 여기에 중단점을 설정하고 바로 실행합니다.

03:57.250 --> 03:58.440
자, 이제 여기까지 왔습니다.

03:58.450 --> 04:04.150
X 함수를 클릭하여 들어가면 여기에서 호출을 찾을 수 있습니다.

04:04.720 --> 04:06.250
이것이 바로 우리가 원하는 것입니다.

04:07.690 --> 04:12.970
이제 호출 기능을 찾았으니 클릭하여 입력하면 됩니다.

04:13.450 --> 04:17.740
이것은 스텝 인을 사용하는 것이 아니라 클릭하여 검토하는 것입니다.

04:18.910 --> 04:20.260
이제 우리는 여기 안에 있습니다.

04:20.260 --> 04:23.710
여기에 중단점을 설정한 다음 실행하면 됩니다.

04:25.570 --> 04:31.210
이제 여기에 도달했으므로 여기를 클릭하여 이 중단점으로 이동할 수 있습니다.

04:33.620 --> 04:35.960
그리고 여기서 우리는 이 방법에 도달합니다.

04:36.200 --> 04:41.330
이 방법을 자세히 분석해 보면 여기에 수익이 있음을 알 수 있습니다.

04:41.900 --> 04:44.810
따라서 중단점을 설정하고 이 리턴을 따릅니다.

04:45.320 --> 04:53.390
압축을 푼 코드를 실행할 준비가 된 위치를 찾고자 합니다.

04:53.870 --> 04:55.610
그래서 우리는 지금 이걸로 달려갑니다.

04:57.670 --> 05:00.190
그리고 여기서 이 중단점에 도달합니다.

05:00.340 --> 05:02.350
그래서 저희도 이 문제에 뛰어들었습니다.

05:06.080 --> 05:06.440
알겠습니다.

05:06.440 --> 05:19.520
그리고 여기서 인수가 null이거나 인자 길이가 0인 두 가지 조건에 대해 이 메서드를 호출하고 있음을 알 수 있습니다.

05:19.880 --> 05:24.020
그렇지 않으면 이 조건에 대해 호출됩니다.

05:24.470 --> 05:32.330
따라서 여기와 여기에 두 가지 결과, 즉 두 가지 가능한 결과에 대해 중단점을 설정할 수 있습니다.

05:32.930 --> 05:35.870
그래서 지금 달려가면 이쪽이 맞습니다.

05:36.500 --> 05:41.300
이제 여기에 들어가서 그 안에 무엇이 있는지 확인해 보겠습니다.

05:43.190 --> 05:47.090
따라서 호출을 가장 안쪽 코어까지 추적하고 있다는 점을 기억하세요.

05:47.660 --> 05:49.700
이제 이걸 클릭해 들어가 보겠습니다.

05:52.600 --> 05:52.930
알겠습니다.

05:52.930 --> 05:58.990
이제 호출 함수의 가장 안쪽 코어에 도달한 것 같고, 호출 함수의 매개 변수를

05:58.990 --> 06:03.080
살펴보면 여기에 이러한 매개 변수가 있습니다.

06:03.100 --> 06:11.920
이를 확장하면 그 안에 요소 0과 배열 요소 1이라는 두 개의 매개 변수가 있는 것을 볼 수 있습니다.

06:12.790 --> 06:21.880
흥미롭게도 여기서 두 번째 매개변수는 렘코스의 경로입니다. exe. 그리고 이것이 실행 매개변수가

06:21.880 --> 06:25.300
될 수 있습니다.

06:26.080 --> 06:28.930
그런 다음 첫 번째 매개 변수를 확장하면

06:30.290 --> 06:30.490
알았죠?

06:30.500 --> 06:31.010
예.

06:32.960 --> 06:33.770
위로 드래그하세요.

06:34.790 --> 06:37.100
MZ 헤더가 있는 것을 볼 수 있습니다.

06:37.130 --> 06:39.440
M과 Z의 16진수 코드입니다.

06:40.010 --> 06:42.920
즉, 실행 가능한 코드입니다.

06:43.490 --> 06:45.930
그렇다면 이것이 풀린 코드일까요?

06:45.950 --> 06:50.930
가장 안쪽에 있는 호출 함수까지 추적했기 때문일 가능성이 높습니다.

06:51.650 --> 06:54.020
이제 이걸 버릴 수 있습니다.

06:54.050 --> 06:56.330
이 첫 번째 매개변수를 마우스 오른쪽 버튼으로 클릭하기만 하면 됩니다.

06:57.490 --> 06:58.810
그런 다음 저장합니다.

07:00.800 --> 07:11.960
그리고 이전 덤프와 구분하기 위해 Remcos 덤프 2번이라고 부를 것입니다.

07:11.990 --> 07:13.100
여기서는 x64dbg를 사용합니다.

07:14.130 --> 07:18.030
지금 저장을 클릭합니다.

07:18.480 --> 07:22.170
이제 이걸 멈추고 가서 확인할 수 있습니다.

07:24.250 --> 07:32.230
그리고 이것을 보면 때때로 Remcos가 vbc라는 하위 프로세스를 생성합니다.

07:32.770 --> 07:36.280
여기에 vbc가 표시되면 마우스 오른쪽 버튼으로 클릭하여 종료할 수 있습니다.

07:39.010 --> 07:45.430
또한 dnSpy로 압축을 푸는 동안 실수를 한 경우 다시 실행할 수 있습니다.

07:45.460 --> 07:48.310
하위 프로세스를 종료해야 합니다.

07:48.640 --> 07:52.720
그렇지 않으면 두 번째 세션에서 디버깅이 실패할 수 있습니다.

07:53.770 --> 07:58.930
이제 PE Studio를 통해 성공적으로 포장을 풀었는지 확인해 보겠습니다.

07:59.650 --> 08:03.070
이제 PE 스튜디오로 이동하여 실행하세요.

08:03.670 --> 08:06.220
PE Studio는 유틸리티 폴더에 있습니다.

08:10.280 --> 08:17.450
그런 다음 새로 덤프한 파일(덤프 번호 2)을 PE Studio로 드래그하여 분석하도록 합니다.

08:18.020 --> 08:25.010
그리고 바로 엔트로피가 6이라는 것을 알 수 있는데, 이는 압축이 풀렸음을 의미하며 서명은 C++입니다.

08:25.670 --> 08:28.820
이는 포장을 성공적으로 풀었음을 나타냅니다.

08:29.900 --> 08:31.280
그리고 여기, 32비트입니다.

08:32.630 --> 08:36.210
그러니 계속 분석하게 두세요.

08:36.920 --> 08:39.200
문자열을 살펴보겠습니다.

08:39.650 --> 08:50.030
이제 문자열을 클릭하면 이벤트 뷰어 가 표시됩니다. exe 및 레지스트리 키 권한 에스컬레이션을 사용합니다.

08:50.930 --> 08:55.610
그런 다음 아래로 스크롤하여 나머지 문자열을 모두 찾을 수 있습니다.

08:56.510 --> 09:03.110
멀웨어를 나타내는 모든 특징적인 문자열을 볼 수 있습니다.

09:04.220 --> 09:07.430
그리고 여기에 Remcos 문자열도 표시됩니다.

09:08.000 --> 09:13.070
따라서 이것은 우리가 실제로 렘코스의 포장을 풀었다는 긍정적인 확인입니다.

09:13.400 --> 09:15.950
이 영상은 여기까지입니다.

09:16.070 --> 09:17.870
시청해 주셔서 감사합니다.
