안녕하세요.
돌아온 것을 환영합니다.
이제 가상 머신을 복원하여 멀웨어가 변경한 내용을 모두 취소했습니다.
이제 x64dbg를 사용하여 멀웨어의 압축을 풀겠습니다.
따라서 x64dbg를 열고 옵션을 클릭한 다음 환경설정을 클릭합니다.
시스템 중단점 및 콜백을 선택 취소하고
저장을 클릭한 다음 바탕 화면의 멀웨어 코드 샘플 폴더에서 Hancitor를 엽니다.
여기에서 모든 파일을 클릭하고 설치를 클릭하여 엽니다.
이제 중단점을 추가합니다.
앞서 한 것처럼 두 개의 중단점을 설정하겠습니다.
가상 할당에 중단점을 설정합니다.
Enter 키를 누른 다음 VirtualProtect에서 중단점을 설정합니다.
Enter 키를 누릅니다.
중단점 탭을 클릭하여 두 가지가 모두 있는지 확인합니다.
이제 첫 번째 중단점으로 이동할 수 있습니다.
여기에서 F9 또는 이 버튼을 클릭합니다.
이제 첫 번째 중단점이 생겼습니다.
따라서 F8 키를 눌러 그 위로 이동하거나 여기에서 이 버튼을 클릭하여 그 위로 이동할 수
있습니다.
가상 보호로 이동하면 이제 매개 변수를 스택에 푸시하고 여기 아래에 있는 가상 보호
실행을 준비합니다.
그러니 계속 진행하세요. 매개 변수를 밀어붙이도록 놔두겠습니다.
이 가상 보호에는 5개의 매개변수가 있습니다.
이 가상 보호에는 다섯 가지 매개 변수가 있습니다.
따라서 여기에는 확장 기능이 있는 VirtualProtect의 다섯 가지 매개 변수가 있습니다.
두 번째 매개변수는 우리가 관심을 갖고 있는 매개변수입니다.
이 주소에 대한 보호 또는 권한 비트를 변경하려고 합니다.
따라서 아래로 스크롤하여 읽으면 액세스 보호 속성을 변경할 페이지 영역의 기본 주소에
대한 포인터인 두 번째 매개 변수인 LP 주소에 대한 설명을 볼 수 있습니다.
이것이 두 번째 매개 변수입니다.
두 번째 매개변수는 바로 이 매개변수입니다.
여기, 이것이 첫 번째 매개변수인 것을 볼 수 있습니다.
이것이 두 번째 매개 변수입니다.
따라서 이 메모리를 보려면 여기 메모리를 따라가면 됩니다. 마우스 오른쪽 버튼을 클릭한
다음 단어
팔로우를 선택한 다음 덤프에서 단어를 팔로우합니다.
따라서 이 메모리 영역이 보호 기능을 변경하려는 메모리 영역입니다.
따라서 이 포장을 풀기 위한 최종 장소가 될지 여부를 확인하기 위해 보관할 수 있습니다.
그래서 저희는 그 목록을 계속 주시하고 있습니다. 4 뒤에 0이 네 번 나옵니다.
이제 우리는 계속 달려갑니다. F9를 누르거나 이 실행 버튼을 클릭하여 다음 중단점인 VirtualAlloc으로 이동합니다.
이제 여기까지 왔습니다.
이를 클릭하거나 F8 키를 눌러 넘어갑니다.
이제 가상 할당으로 이동하겠습니다.
이제 가상 할당에 대한 모든 매개 변수를 푸시할 것입니다.
이제 여기까지, 이 모든 매개변수는 VirtualAlloc 호출을 위해 스택으로 푸시되었습니다.
그리고 이 특별한 VirtualAlloc에는 확장 기능도 있습니다.
따라서 이 특정 VirtualAlloc에는 5개의 매개변수가 있으며, 이것이 MSDN의 참조입니다.
다섯 가지 매개변수.
하나, 둘, 셋, 넷, 다섯.
하지만 우리는 반환 값에 관심이 있습니다.
따라서 반환 값은 아래로 스크롤하여 읽을 수 있습니다.
무엇을 반환하나요?
반환 값입니다.
함수가 성공하면 반환값은 할당된 페이지 영역의 기본 주소가 됩니다.
그래서 우리는 반환 값에 관심이 있습니다.
이제 함수가 반환되면 -로 결과를 반환합니다.
따라서 이 호출 후에는 - 메모리에 할당된 영역의 주소가 포함되어야 합니다.
이제 우리는 이 문제를 해결하고 지켜보겠습니다. 한 단계 넘어가면 이제
0이 두 개 뒤에 네 개가 표시됩니다.
따라서 이 항목을 마우스 오른쪽 버튼으로 클릭하고 2번 덤프를 따라가면 됩니다.
이제 이것이 할당된 메모리 영역임을 알 수 있습니다.
이제 계속 실행하여 여기서 무슨 일이 일어나는지 확인할 수 있습니다.
이 시점에서 중단점을 살펴보면 첫 번째 세션에서 작성한 메모를 기억하기 때문에 두 API가
각각 한 번씩 호출되었습니다. 여기 아래에는 카운트, 중단점 카운트가 있습니다.
덤프할 준비가 되려면 VirtualAlloc을 7번, VirtualProtect를 한 번 눌러야 한다는 것을 알고 있습니다.
그래서 우리는 계속 달릴 수 있습니다.
달리면서 여기서 어떤 일이 일어나는지 확인합니다.
이제 F9 또는 이 버튼을 클릭합니다.
다음 페이지로 이동합니다.
그리고 이미 여기에 일부 코드가 압축 해제된 것을 알 수 있습니다.
GetCurrentProcess, GetProcAddress를 볼 수 있습니다.
그리고 아래로 스크롤하면 다른 API인 GetModuleHandle을 볼 수 있습니다.
그리고 더 스크롤하면 더 많은 API, LoadLibraryA
등을 볼 수 있습니다.
따라서 여기에서도 VirtualAlloc을 사용할 수 있습니다.
따라서 이것은 아마도 최종 EXE 파일의 압축을 푸는 데 사용되는 중간 코드일 것입니다.
아직 끝나지 않았습니다.
이제 두 번째 가상 할당에 도달했습니다. 우리는 계속 나아갑니다.
가상 할당으로 이동합니다. 이제 다음 5개의 매개변수를 스택에 푸시합니다.
이제 매개변수가 스택에 푸시되었습니다.
의 수익률 배분을 살펴보기 위해 한 걸음 물러서겠습니다.
이제 우리는 한 걸음 더 나아가서
이 메모리 영역을 할당했습니다.
이 항목을 마우스 오른쪽 버튼으로 클릭하고 2번 덤프, 3번 덤프를 차례로
진행합니다.
따라서 이것은 할당된 또 다른 메모리입니다.
이제 중단점 탭을 살펴보겠습니다.
VirtualAlloc이 두 번 공격당했습니다.
아직 끝나지 않았습니다.
그래서 우리는 달려가서 여기서 무슨 일이 일어나는지 확인합니다.
알겠습니다.
이제 여기에 몇 가지 코드가 압축 해제된 것을 볼 수 있는데, 아마도 RC4 복호화일 것입니다.
이것 좀 보세요.
행과 열이 멋지게 정렬되어 있습니다.
RC4인지는 확실하지 않지만 RC4 복호화일 수 있습니다.
이제 우리는 계속해서 넘어갑니다.
따라서 암호 해독은 아직 끝나지 않았다는 것을 의미합니다.
따라서 이 코드도 최종 포장을 푸는 데 도움을 주기 위해 풀린 중간 코드입니다.
그러니 계속 넘어가세요.
가상 할당, 가상 할당.
VirtualAlloc은 이제 다음 5개의 파라미터를 스택에 푸시합니다.
이제 반환 주소로 이동하여 반환 주소를 살펴보겠습니다.
알겠습니다.
이제 이 메모리가 할당되었으므로 이 메모리를 따라갈 수 있습니다. 마우스 오른쪽 버튼을 클릭하고 덤프에서
팔로우합니다. 네 번째 덤프.
이것이 새로운 메모리 할당입니다. 이것이 바로 F9이며, 여기에서 실행하여 압축을 푸는 것을 확인하세요.
실행. 그리고 다시, 추가 암호 해독이 필요할 수도 있습니다. 잘 모르겠습니다.
따라서 이것은 아직 최종적으로 풀린 코드가 아닙니다.
그래서 우리는 계속 넘어갑니다.
따라서 이 시점에서 중단점을 보면 VirtualAlloc이 네 번 도달했습니다.
따라서 이 VirtualAlloc을 계속 진행하세요. VirtualAlloc으로 이동하면 이제 다음 5개의 파라미터를
스택에 푸시합니다.
알겠습니다.
이 시점에서 스택에 5개의 파라미터를 푸시하여 다음 VirtualAlloc을 호출합니다.
이제 이 부분을 넘어 반환 주소를 살펴보겠습니다.
이제 반환 주소는 3
뒤에 0이 네 개로 표시됩니다.
이걸 마우스 오른쪽 버튼으로 클릭하고 덤프, 5번 덤프입니다.
알겠습니다.
따라서 이것은 추가 코드를 압축 해제할 새 메모리 주소입니다.
이제 실행해서 이 메모리 영역에 어떤 일이 일어나는지 살펴봅시다.
알겠습니다.
아무 일도 일어나지 않습니다.
알겠습니다.
문제 없습니다.
그리고 이 시점에서 우리는 이미 VirtualAlloc을 다섯 번이나 사용했습니다.
이제 새로운 VirtualAlloc에 대해 살펴보겠습니다.
VirtualAlloc으로 이동하면 이제 5개의 파라미터를 스택에 푸시하여 여기 VirtualAlloc을
호출할 준비를 합니다.
이 시점에서 다섯 개의 매개변수가 스택에 푸시되었으며,
이 위로 이동하면 할당된 반환 주소를 볼 수 있습니다.
이쪽으로 오시면 반납 주소입니다.
똑같습니다.
따라서 변경 사항은 없습니다.
여전히 아무것도 없습니다.
이미 여기 5번 덤프에서 따라가고 있으므로 이제 따라가야 합니다.
3 뒤에 0이 네 개 있습니다.
이제 실행해보고 어떤 일이 일어나는지 살펴봅시다.
이제 실행 중입니다.
보실 수 있습니다.
중단점에 도달할 때까지 실행합니다.
몇 초만 기다려주세요.
그래서 몇 초 후 다시 중단점에 도달했습니다.
여전히 이 메모리 영역에는 아무것도 언패킹되지 않았으며, 이제 다음 VirtualAlloc으로
이동하여 중단점을 클릭합니다.
이제 VirtualAlloc이 6번 공격을 받은 것을 확인할 수 있습니다.
앞서 첫 번째 실행에서 VirtualAlloc이 7번 공격을 받았다는 사실을 기억하세요.
즉, 메모리를 덤프하기 전에 한 번의 히트가 더 남았다는 뜻입니다.
그럼 이제 따라가 보겠습니다. 다음 가상 할당으로 넘어가서 가상 할당으로 이동합니다.
이제 다음 5개의 파라미터를 스택에 푸시합니다.
그래서 다섯 가지 매개 변수를 밀어붙였습니다.
이제 VirtualAlloc을 다시 호출하고 -에서 반환 주소를 확인합니다.
이제 반환 주소는 0000으로 넘어가 보겠습니다.
따라서 이 메모리 주소에서는 압축을 풀 수 없으므로 따라갈 필요가 없습니다.
그래서 우리는 다음 VirtualAlloc으로 계속 달려갑니다.
그래서 우리는 중단점에 도달했습니다. 다시 실행합니다.
이제 VirtualAlloc을 다시 한 번 더 실행합니다.
이제 넘어가 보겠습니다.
이 VirtualAlloc.
맞습니다.
다음 5개의 파라미터를 스택에 푸시하여 VirtualAlloc 호출을 준비합니다.
그래서 우리는 지금 여기에 있습니다. 이동해 보겠습니다.
이제 반환 주소는 1C에 0이 네 개 뒤따르는 1C가 됩니다.
따라서 덤프가 부족하므로 이 덤프를 마우스
오른쪽 버튼으로 클릭한 다음 1번 덤프를 따라가면 됩니다.
그래서 지금 버리러 갑니다.
그래서 지금 덤프가 여기에 있습니다.
이제 실행해서 이 덤프가 어떻게 되는지 확인해 보겠습니다.
이 메모리 주소에 EXE 파일의 압축을 푼 것 같습니다.
저것 좀 보세요.
1C 뒤에 0이 네 개 있습니다.
보이시죠?
MS 헤더가 있고 이 문자열이 있습니다.
즉, 이 프로그램은
DOS 모드에서 실행할 수 없습니다.
PE 헤더가 있습니다.
그런 다음 아래로 스크롤하면 . 텍스트 섹션에서 . 데이터 섹션에서 . rdata 섹션에서
. 재배치 섹션을 클릭합니다.
알겠습니다.
그래서 이것은 다음과 같습니다.
덤프할 준비가 되었습니다.
이제 중단점을 클릭하면 가상 할당에 7번 도달한 것을 볼 수 있고, 여기로 이동하면
실행 중인 것을 확인할 수 있습니다. 자유롭게 실행되고 있으며 더 이상 중단점에 도달하지
않습니다.
이제 마지막 가상 할당에 도달했음을 확인했습니다.
이제 덤프할 준비가 되었습니다.
이번 주소는 1C 뒤에 0이 네 개 있습니다.
코드를 실행할 때마다 여기에 다른 주소, 다른 반환 주소가 표시될 수 있습니다.
따라서 사용자에 따라 다를 수 있습니다.
따라서 1C 뒤에 0이 네 개 있습니다.
1C 뒤에 0이 네 번 온다는 것을 기억하세요.
다음 동영상에서는 계속해서 덤핑하고 매핑을 해제할 것입니다.
다음 동영상에서 뵙겠습니다.