자, ECX로 이동한 후 이 위치로 이동하면 여기에 압축을 푼 코드의 일부가 있습니다.
여기 아래쪽을 보면 또 다른 변칙이 있습니다.
반환 전에 주소를 푸시하는 또 다른 이상 현상입니다.
일반적으로는 밀지 말고 튕겨야 합니다.
따라서 이 매우 의심스러운 것은 아마도 또 다른 압축 해제 코드일 수 있습니다.
따라서 여기에 중단점인 F2를 설정하고 실행하면 됩니다.
이제 덤프에서 이 주소의 내용을 따라가 보면 여기 아래에서 이것이 이전에 VirtualAlloc을
호출하여 새로 할당된 메모리임을 확인할 수 있습니다.
이제 푸시할 것입니다.
여기로 옮기려고 합니다.
먼저 중단점인 F2를 제거하고 F8로 넘어가 보겠습니다.
그래서 EDX로 옮겼고 이제 F8이 이를 스택으로 푸시할 것입니다.
그리고 이제 반환할 때 이전 함수로 돌아가는 일반적인 반환 대신 이 주소로
돌아갑니다.
이제 F8 키를 눌러 거기로 이동해 보겠습니다.
이제 우리는 메모리의 새로 풀린 섹션에 들어왔습니다.
이제 이 첫 번째 호출부터 시작하여 그 안에 있는 다양한 호출을 살펴보겠습니다.
여기로 오면 F7을 눌러 이 안으로 들어가서 안에 무엇이 있는지 확인합니다.
알겠습니다.
별다른 효과가 없습니다.
여기로 돌아가기만 하면 됩니다.
이제 중단점을 저쪽에 놓고 바로 복귀로 이동한 다음, F2를 눌러 중단점을 제거하고 복귀로 넘어가
보겠습니다.
그래서 우리는 지금 여기에 있고 F8을 계속 누르고 있으며 반복해서 반복되는 것 같습니다.
따라서 여기에 중단점을 설정하고 F2 키를 눌러 루프에서 벗어나면 루프에서 벗어날 수 있습니다.
그런 다음 중단점을 제거합니다.
기본적으로 이 압축을 푼 코드가 무엇을 하려고 하는지 살펴보려고 합니다.
대부분 실행 파일을 메모리에 압축을 풀고 해당 EXE
파일을 덤프하려는 경우입니다.
이제 이 아래의 모든 호출을 분석해 보겠습니다.
실제로 메모리에서 어떤 부분이 언패킹되는지 확인하세요.
이제 F8을 넘어 F7 내부로 들어가 보겠습니다.
그리고 스택 문자열을 사용하고 있음을 알 수 있습니다.
따라서 이것은 푸시 대신 스택을 사용하는 비정상적인 방법입니다.
이동을 사용하여 다양한 문자열을 스택으로 직접 이동합니다.
따라서 멀웨어 작성자가 코드를 난독화하기 위해 사용하는 또 다른 일반적인 방법은 실제로 이 모든 것을
스택에 푸시하고 이 모든 것을 여기 호출의 매개 변수로 사용하는 것입니다.
따라서 이 호출은 실제로 스택에 간접적으로 푸시되는 이 모든 것을 활용하고
있으며, 실제로 실행하려는 라이브러리는 LoadLibrary 커널32라는 것을 알 수 있습니다.
이것이 이 호출의 매개 변수입니다.
이제 바로 반환으로 넘어가 보겠습니다.
우리는 여기서 무엇을 하려는지 알고 있습니다.
이쪽의 반환으로 바로 이동합니다.
여기에 중단점을 설정합니다.
F2.
실행해 보세요.
중단점을 제거하고 F2를 다시 누른 다음 F8을 눌러 복귀로 이동한 다음 다시 F8을 눌러 기본 기능으로 돌아갑니다.
그래서 방금 이 통화를 마치고 나왔습니다.
다음 함수는 직접 들어가 보는 대신 실제로 더블클릭하여 내부에 무엇이 있는지 확인해 보겠습니다.
그리고 스택 문자열을 사용하는 동일한 트릭을 사용하는 것처럼 보이며,
우리는 라이브러리의 주소를 실행하는 것이 목적이 무엇인지 알고 있으며, 이에 대해서는 원하지 않으며 관심이 없습니다.
따라서 빼기 키를 눌러 통화를 종료합니다.
저희는 실제로 들어가지 않았습니다.
방금 점검했습니다.
따라서 F8 키를 눌러 이 통화를 건너뛰고 그 위로 이동합니다.
그러니 F8을 누르고 계속 내려가세요.
그래서.
이 통화에 들어가지 않고도 두 번 클릭하여 내부 내용을 확인할 수 있습니다.
알겠습니다.
같은 수법입니다.
그래서 저희는 여기에 관심이 없습니다. 플러스, 마이너스, F8 키를 계속 누릅니다.
그리고 이것을 몇 번 호출하고 있습니다.
여기, 여기, 여기에서도 같은 통화를 볼 수 있습니다.
따라서 그냥 무시하고 넘어가면 됩니다.
다른 무언가가 나올 때까지.
알겠습니다.
이제 우리는 다시 여기에 있습니다.
저희도 같은 방법을 사용합니다.
직접 들어가지 않고 더블클릭하여 내부에 무엇이 있는지 확인합니다.
알겠습니다.
다시 말하지만, 여기에는 관심 있는 전화가 없습니다.
마이너스를 클릭하고 키보드에서 마이너스를 눌러 뒤로 이동한 다음 F8을 눌러 계속 넘어가면 됩니다.
그리고 이번에도 같은 방법을 사용했습니다.
알겠습니다.
저희는 이렇게 합니다.
그다지 많지는 않습니다.
그래서 다시 마이너스를 빼고 나가면 이것이 마지막 함수 호출인 것처럼 보입니다.
그래서.
이번이 마지막입니다.
그곳에 도착할 때까지 한 걸음씩 넘어가 보겠습니다.
F8.
F8 키를 눌러 보겠습니다.
따라서 마지막 함수 호출이 중요하므로 이 부분을 살펴볼 필요가 있습니다.
따라서 이 키를 눌러 들어가거나 바로 가기 키인 F7을 눌러 들어가면 됩니다.
그리고 흥미롭게도 여기 아래에서 볼 수 있습니다.
여기에 푸시 EAX가 있습니다.
그리고 여기에 아이디어가 있습니다.
그리고 여기 푸시 40이 있습니다.
따라서 이것은 아마도 VirtualAlloc의 매개변수처럼 보입니다.
VirtualAlloc을 보면 이 40은 의미 있는 상수입니다.
그렇기 때문에 가상 할당이라는 인상을 줍니다.
VirtualAlloc의 네 가지 파라미터.
네 번째는 보호입니다.
가상 보호와 보호에 대한 설명으로 이동하면 다음과 같습니다.
그리고 메모리 보호 상수를 분석하고 조회합니다.
아래로 스크롤합니다.
0x40은 메모리 위치를 읽기, 쓰기 및 실행 가능, RWX로 설정하는 것을 의미합니다.
그렇기 때문에 이 40달러는 정말 큰 선물입니다.
푸시 40이 표시되면 대부분 VirtualAlloc이 여기 있다는 뜻입니다.
네 번째 매개변수입니다.
4, 3, 2, 1, 4개의 매개변수가 있습니다.
따라서 VirtualAlloc이 되어야 합니다.
그리고 악성코드가 해당 메모리 영역에 코드를 언패킹한 후 실행할 수 있도록 메모리 영역에 대한 권한을
설정하기 위해 언패킹 중에 VirtualAlloc이 항상 호출된다는 것을 알고 있습니다.
그리고 이제 그 선에 도달할 때까지 한 걸음씩 나아가면 이를 확인할 수 있습니다.
이 호출에 도달할 때까지 F8 키를 계속 눌러 보겠습니다.
그리고 의심했던 대로 VirtualAlloc이라는 것을 알 수 있습니다.
그리고 네 번째 매개변수는 1, 2, 3, 4입니다.
네 번째 매개변수는 해당 메모리 영역을 읽기, 쓰기, 실행으로 설정하는 것입니다.
가상 할당에 대한 설명서를 다시 참조하면 가상 할당 반환 값은 할당된 페이지
영역의 기본 주소입니다.
그렇죠?
이것이 바로 VirtualAlloc이 반환하는 결과입니다.
따라서 모든 함수는 결과를 EAX로 반환합니다.
이제 이 부분을 살펴보면 새로 할당된 메모리 영역의 주소인 리턴 주소가 보일
것입니다.
F8 키를 눌러 그 위로 이동하면 새로 할당된 지역이 표시되므로 여기로 이동하여 마우스 오른쪽 버튼을 클릭하고 덤프에 따라가면
됩니다.
Dump.
그리고 이제 거기서 무언가를 풀려고 합니다.
그래서 우리는 그냥 스텝, 스텝, 스텝, 스텝을 계속할 수 있고, 저는 VirtualAlloc을
호출한 후 계속 스텝, 스텝,
스텝을 계속하고 여기에서 이 호출 후 매직 바이트 MZ와 PE 헤더도 복사했습니다.
이쪽입니다.
또한 "이 프로그램은 DOS 모드에서
실행할 수 없습니다."라는 문장이 표시되므로 새로 할당된 메모리 영역에 EXE 파일을 복사하는
것처럼 보입니다.
이제 계속 진행하여 복사가 완료될 때까지 기다리겠습니다.
텍스트 섹션을 복사하는 것을 볼 수 있습니다. 계속 발걸음을 옮기세요.
따라서 이 모든 작업은 할당된 메모리 영역에 바이트를 복사하는 것에 불과합니다.
이제 계속 넘어가 보겠습니다.
F8 단계를 계속 진행하면서 그대로 두세요.
이제 데이터 섹션을 복사하고 있습니다.
계속 진행하겠습니다.
시간이 걸릴 수 있습니다.
그리고 여기서는 데이터 섹션을 메모리에 복사합니다.
좋아요, 눌러 보겠습니다.
그냥 F8 키를 눌러서 복사를 진행합니다.
이제 이전 섹션으로 이동합니다.
복사합니다.
모든 복사를 마칠 때까지 이 작업을 계속할 수 있습니다.
그리고 수익이 발생하면
반환이 표시되면 모든 복사 작업이 완료되어 메모리에 압축이 풀렸다는 뜻입니다.
여기까지입니다.
따라서 이 호출이 완료될 때쯤이면 모든 내용이 메모리에 복사되어 있을 것입니다.
이제 F8로 넘어가 보겠습니다.
알겠습니다.
짐 풀기만 마치겠습니다.
계속 진행하겠습니다.
여기에서 포장이 풀린 것을 볼 수 있습니다.
다음에 어떤 일이 일어날지 계속 살펴보겠습니다.
다시 돌아와 보겠습니다.
알겠습니다.
포장을 다 푼 것 같습니다. 이제 원하신다면 삭제할 수 있습니다.
이 영상은 여기까지입니다.
다음 강의에서 뵙겠습니다.
시청해 주셔서 감사합니다.