안녕하세요, 환영합니다.
이 새 동영상에서는 dnSpy를 사용하여 Remcos의 압축을 푸는 방법을 보여드리겠습니다.
그리고 32비트 버전의 dnSpy가 필요합니다.
일반적으로 플레어와 플레어에서 찾을 수 있습니다.
로 이동합니다. NET.
dnSpy에는 두 가지 버전이 있어야 합니다.
이것은 64비트입니다.
이것은 32비트입니다.
이 중 어느 것도 작동하지 않는 경우.
제 경우를 예로 들어보겠습니다.
32비트가 작동하지 않습니다.
따라서 다운로드할 수 있으며 다운로드 링크는 리소스 섹션(여기)에 제공됩니다.
이 파일을 다운로드하고 이 웹사이트로 이동하여 32비트 버전을 다운로드할 수 있습니다.
이미 32비트 버전을 다운로드하여 데스크톱에 설치한 후 이 버튼을 클릭하기만
하면 시작됩니다.
32비트 또는 64비트 버전을 실행 중인지 확인하려면 왼쪽 상단에서 조회할 수 있습니다.
여기에 작은 부분이 보이면 32비트 버전입니다.
이제 렘코스를 드래그합니다. exe를 dnSpy로 바꾸면 dnSpy가 이를 디컴파일합니다.
가장 먼저 살펴봐야 할 것은 주요 진입 지점입니다.
일반적으로 여기에 적혀 있으므로 메인 버튼을 클릭하면 해당 페이지로 이동합니다.
이제 포장을 푸는 코드입니다.
따라서 압축을 푼 코드이므로 압축을 푼 후 압축을 푼 실행 파일을 호출합니다.
따라서 호출 메서드를 추적하는 데 관심이 있습니다.
이제 살펴봅시다.
여기가 진입점이자 주요 기능이며, 그다음은 여기입니다.
78번 라인은 우리가 관심 있는 라인입니다.
이것이 유일한 함수 호출입니다.
이 두 가지는 환경을 설정하는 것일 뿐입니다.
그러니 이걸 따라하세요.
MyObject.
따라서 내 객체를 클릭하면 이것이 내 객체 클래스임을 알 수 있습니다.
그리고 여기에는 루프가 있습니다.
그리고 루프는 이 프로그램에 있는 모든 유형의 객체를 통과합니다.
그런 다음 특정 유형과 일치하는지 확인합니다.
그러면 플래그가 true로 설정됩니다.
따라서 플래그가 참인 상태로 바로 이동하는 한 가지 방법은 여기에 중단점을 설정하는 것입니다.
따라서 여기에 중단점을 설정하고 실행을 클릭하면 플래그가 참일 때마다 이 페이지로 이동합니다.
이렇게 하면 각 루프를 하나씩 거치는 수고를 덜 수 있습니다.
이제 실행을 클릭하고 이 시점에서 오류가 발생하면 확인을 클릭합니다.
이제 이 중단점에 도달했습니다.
여기에서 이 버튼을 클릭해 들어가 보겠습니다.
들어가기.
호출 메서드를 찾고 있다는 점을 기억하세요.
이제 우리는 배열 안에 있습니다.
분석해 보면 중요한 블록은 if입니다.
그래서 우리는 이 깃발이 사실이었으면 합니다.
이 또한 사실이기를 바라며, 저희는 이것이 사실이기를 바랍니다.
즉, 세 가지 플래그가 모두 참이어야 합니다.
따라서 가장 안쪽의 함수 호출이 가장 중요합니다.
그래서 가장 안쪽에 중첩되어 있습니다.
따라서 여기에 중단점을 설정하면 세 개의 플래그가 모두 참이 될 때까지 반복해야 하는 번거로움을
줄일 수 있습니다.
따라서 여기에 중단점을 설정하고 바로 실행합니다.
자, 이제 여기까지 왔습니다.
X 함수를 클릭하여 들어가면 여기에서 호출을 찾을 수 있습니다.
이것이 바로 우리가 원하는 것입니다.
이제 호출 기능을 찾았으니 클릭하여 입력하면 됩니다.
이것은 스텝 인을 사용하는 것이 아니라 클릭하여 검토하는 것입니다.
이제 우리는 여기 안에 있습니다.
여기에 중단점을 설정한 다음 실행하면 됩니다.
이제 여기에 도달했으므로 여기를 클릭하여 이 중단점으로 이동할 수 있습니다.
그리고 여기서 우리는 이 방법에 도달합니다.
이 방법을 자세히 분석해 보면 여기에 수익이 있음을 알 수 있습니다.
따라서 중단점을 설정하고 이 리턴을 따릅니다.
압축을 푼 코드를 실행할 준비가 된 위치를 찾고자 합니다.
그래서 우리는 지금 이걸로 달려갑니다.
그리고 여기서 이 중단점에 도달합니다.
그래서 저희도 이 문제에 뛰어들었습니다.
알겠습니다.
그리고 여기서 인수가 null이거나 인자 길이가 0인 두 가지 조건에 대해 이 메서드를 호출하고 있음을 알 수 있습니다.
그렇지 않으면 이 조건에 대해 호출됩니다.
따라서 여기와 여기에 두 가지 결과, 즉 두 가지 가능한 결과에 대해 중단점을 설정할 수 있습니다.
그래서 지금 달려가면 이쪽이 맞습니다.
이제 여기에 들어가서 그 안에 무엇이 있는지 확인해 보겠습니다.
따라서 호출을 가장 안쪽 코어까지 추적하고 있다는 점을 기억하세요.
이제 이걸 클릭해 들어가 보겠습니다.
알겠습니다.
이제 호출 함수의 가장 안쪽 코어에 도달한 것 같고, 호출 함수의 매개 변수를
살펴보면 여기에 이러한 매개 변수가 있습니다.
이를 확장하면 그 안에 요소 0과 배열 요소 1이라는 두 개의 매개 변수가 있는 것을 볼 수 있습니다.
흥미롭게도 여기서 두 번째 매개변수는 렘코스의 경로입니다. exe. 그리고 이것이 실행 매개변수가
될 수 있습니다.
그런 다음 첫 번째 매개 변수를 확장하면
알았죠?
예.
위로 드래그하세요.
MZ 헤더가 있는 것을 볼 수 있습니다.
M과 Z의 16진수 코드입니다.
즉, 실행 가능한 코드입니다.
그렇다면 이것이 풀린 코드일까요?
가장 안쪽에 있는 호출 함수까지 추적했기 때문일 가능성이 높습니다.
이제 이걸 버릴 수 있습니다.
이 첫 번째 매개변수를 마우스 오른쪽 버튼으로 클릭하기만 하면 됩니다.
그런 다음 저장합니다.
그리고 이전 덤프와 구분하기 위해 Remcos 덤프 2번이라고 부를 것입니다.
여기서는 x64dbg를 사용합니다.
지금 저장을 클릭합니다.
이제 이걸 멈추고 가서 확인할 수 있습니다.
그리고 이것을 보면 때때로 Remcos가 vbc라는 하위 프로세스를 생성합니다.
여기에 vbc가 표시되면 마우스 오른쪽 버튼으로 클릭하여 종료할 수 있습니다.
또한 dnSpy로 압축을 푸는 동안 실수를 한 경우 다시 실행할 수 있습니다.
하위 프로세스를 종료해야 합니다.
그렇지 않으면 두 번째 세션에서 디버깅이 실패할 수 있습니다.
이제 PE Studio를 통해 성공적으로 포장을 풀었는지 확인해 보겠습니다.
이제 PE 스튜디오로 이동하여 실행하세요.
PE Studio는 유틸리티 폴더에 있습니다.
그런 다음 새로 덤프한 파일(덤프 번호 2)을 PE Studio로 드래그하여 분석하도록 합니다.
그리고 바로 엔트로피가 6이라는 것을 알 수 있는데, 이는 압축이 풀렸음을 의미하며 서명은 C++입니다.
이는 포장을 성공적으로 풀었음을 나타냅니다.
그리고 여기, 32비트입니다.
그러니 계속 분석하게 두세요.
문자열을 살펴보겠습니다.
이제 문자열을 클릭하면 이벤트 뷰어 가 표시됩니다. exe 및 레지스트리 키 권한 에스컬레이션을 사용합니다.
그런 다음 아래로 스크롤하여 나머지 문자열을 모두 찾을 수 있습니다.
멀웨어를 나타내는 모든 특징적인 문자열을 볼 수 있습니다.
그리고 여기에 Remcos 문자열도 표시됩니다.
따라서 이것은 우리가 실제로 렘코스의 포장을 풀었다는 긍정적인 확인입니다.
이 영상은 여기까지입니다.
시청해 주셔서 감사합니다.