돌아온 것을 환영합니다.
이전 비디오에서는 첫 번째 부모 Shbg에서 CreateProcessInternalW를 추적했습니다.
그리고 부모 프로세스에서 Ramnit 관리자라는 새 프로세스가 생성된 것을 발견했습니다.
두 번째 xdbg를 사용하여 첨부합니다.
이제 1초가 지났고 첫 번째 xdbg가 여전히 실행 중입니다.
따라서 여기 상단에서 제목을 보면 이것이 부모이고 이것이 자식임을 알 수 있습니다.
자식 람닛 관리자.
이제 이 프로세스와 이 프로세스를 동시에 분석할 수 있습니다.
따라서 지금은 자식 프로세스에 중단점을 설정해야 하며 중단점이 거의 설정되었습니다.
여기에서 볼 수 있듯이 부모에 설정한 것과 동일합니다.
이제 아이에게 가서 내려가서 중단점을 설정합니다.
첫 번째는 가상 잠금으로, Enter 키를 누릅니다.
여기에 있는 목록을 따르세요.
두 번째는 가상 제품입니다.
보호 입력.
다음 질문은 디버거가 존재하느냐는 것입니다.
따라서 중단점이 켜져 있으면 디버거가 존재합니다.
그런 다음 내부 프로세스를 생성합니다.
프로세스 만들기.
내부에서 엔터 키를 누르면 다음 항목은 프로세스 메모리 쓰기입니다.
그러니 쓰기를 입력하세요.
프로세스 메모리.
알겠습니다.
그리고 스레드를 다시 시작할 때까지 마지막은 생략해도 됩니다.
따라서 필요하지 않습니다.
이제 모든 중단점을 확보했는지 확인합니다.
중단점 탭을 클릭하면 아무것도 없는 것을 확인할 수 있습니다.
이 두 번째 프로세스가 있기 때문에 이런 일이 발생합니다.
어디 보자.
아마도 일시 중단된 상태일 것입니다.
따라서 우리가 해야 할 일은 첫 번째를 사용해야 한다는 것입니다.
두 번째 프로세스를 활성화하려면 여기에서 프로세스를 진행합니다.
하위 프로세스.
여기에서 사용자 코드 실행을 클릭하면 됩니다.
따라서 이 실행을 클릭하면 사용자 코드로 이동합니다.
참고하세요.
우리는 첫 번째 프로세스를 진행 중입니다.
그는 달리고 있어야 합니다.
알겠습니다.
이제 이 과정을 반복할 수 있습니다.
중단점을 가상으로 설정합니다.
여보세요?
좋아요, 엔터를 누르세요.
그리고 이번에는 작동합니다.
따라서 여기 첫 번째 목록의 모든 중단점을 첫 번째 프로세스에서 반복하면 됩니다.
중단점을 보호할 중단점을 설정합니다.
디버거가 있나요?
Create프로세스 내부의 중단점.
W.
그리고 쓰기 프로세스 메모리에 대한 중단점.
그러니 모든 것을 갖추었는지 다시 한 번 확인하세요.
모든 것이 완료되었음을 확인했으면 여기에서 CPU를 클릭하고 첫 번째 프로세스로 돌아갈 수 있습니다.
CPU도 클릭합니다.
이것이 첫 번째 프로세스입니다.
이제 실행을 클릭하여 동물 중단점에 도달하는지 확인하겠습니다.
아니요, 디버거 존재 여부가 확인되어 리턴을 실행할 수 있도록 디버거가 실행 중입니다.
Code.
그리고 API의 결과는 001로 디버거의 존재가 양수임을 의미합니다.
따라서 이를 0으로 변경하여 무효화할 수 있습니다.
그러니 클릭하세요.
좋아, 다시 실행해 보세요.
여기에서도 마찬가지입니다.
반환을 실행하려면 이 실행이 표시됩니다.
그리고 그 API 호출의 결과는 다시 하나입니다.
따라서 하나는 디버거가 감지되었음을 의미합니다.
따라서 이를 다시 0으로 설정하고 확인을 클릭한 다음 다시 실행하여 이를 우회해야 합니다.
알겠습니다.
이번에는 여기에서 볼 수 있듯이 자유롭게 실행되고 있으며 더 이상 중단점에 부딪히지 않습니다.
이제 하위 프로세스 잔여 관리자로 돌아가서 여기서 분석을 계속할 수 있습니다.
그리고 아마도 이 자식 프로세스에서 언팩 코드를 덤프할 것입니다.
이제 그렇게 해보겠습니다.
이제 이 문제를 확장할 수 있습니다.
이제 실행해보고 중단점에 도달하면 이 가상 프로텍트에 도달하는지 확인해 보겠습니다.
점프, 점프, 점프를 반복하면서 계속 분석하여 무엇을 하려고 하는지 확인할 수 있습니다.
매개 변수를 푸시하도록 합니다.
이제 이 감시자를 보호라고 부를 것입니다.
두 번째 매개변수를 살펴봤습니다.
이 메모리 영역에 대한 보호 기능을 변경하고 있습니다.
4000.
그리고 우리가 원한다면 어둠 속에서도 이걸 따라갈 수 있습니다.
여기에서 이 항목을 마우스 오른쪽 버튼으로 클릭하고 덤프를 따라가면 됩니다.
현재 댐의 D-word를 통한 왕국.
여기에 무언가가 있고 이에 대한 메모리 맵을 살펴보세요.
이를 마우스 오른쪽 버튼으로 클릭하고 메모리 맵에서 따라갑니다.
자, 여기에서 현재 메인 실행 파일은 읽기만 가능한 것을 볼 수 있습니다.
메모리 덤프에서 이를 따라가다가 다시 메모리 맵으로 돌아가는 이유는 갈 수 없기 때문입니다.
여기에서 메모리 맵으로 바로 이동합니다.
이것이 바로 덤프에서 이를 따르는 이유입니다.
그리고 덤프에서 메모리 맵을 따라갑니다.
이제 이 API를 실행하면 어떤 일이 발생하는지 살펴보겠습니다.
이제 돌아가서 올바른 권한이 추가되었습니다.
즉, 004부터 이 메모리 영역에 무언가를 수행한다는 뜻입니다.
아마 뭔가를 풀어줄 것 같습니다.
이제 시작하겠습니다.
보호 대상은 다음과 같습니다.
이제 계속 넘어가 보겠습니다.
가상 보호.
점프.
가상 보호로 이동하여 이 통화로 오세요.
이제 모든 매개변수를 스택에 푸시했습니다.
두 번째도 마찬가지입니다.
여기에 있는 이 메모리 영역에 대한 권한을 변경할 것입니다.
다시 돌아가서 살펴보겠습니다.
이제 읽기, 쓰기가 가능합니다.
이제 이 통화를 넘어가 보겠습니다.
해당 메모리 영역에 어떤 일이 일어나는지 확인하세요.
그래서 우리는 넘어섰습니다.
이제 돌아가서 점검해 보겠습니다.
쓰기 가능 항목이 제거되었습니다.
즉, 이 메모리 영역 어딘가에 이미 압축을 풀었다는 뜻입니다.
그러면 이걸 버릴 수 있을까요?
확실하지 않은 경우 다른 도구 등을 사용하여 덤프하고 분석할 수 있습니다.
이곳이 올바른 덤프 장소인지 확실하지 않습니다.
그래서 계속 진행합니다.
첫째.
이제 계속 진행하겠습니다.
실행을 클릭하면 이번에는 가상 할당에 도달합니다.
자, 이제 이 점프 로그를 살펴 보겠습니다.
이 통화로 이동합니다.
그리고 이를 호출하면 할당된 메모리가 X 레지스터에 표시됩니다.
그럼 이쪽으로 가서 확인해 보겠습니다.
여기까지입니다.
따라서 이제 2번을 선택하기 위해 이를 함께 따릅니다.
그리고 여기에서 다음 엄지 손가락을 마우스 오른쪽 버튼으로 클릭합니다.
이제 2번은 여기 메모리에 있습니다.
그리고 그것은 제대로 수행되면 1번은 무언가를 풀려고 하기 때문에 메인 X가 아니라는 것을 보여줍니다.
그렇지 않다면 아마도 끝났을 것입니다.
1번은 최종 압축을 푸는 데 사용할 중간 프로그램일 뿐입니다.
코드 또는 첫 번째 덤프인 휴대용 실행 파일을 사용하여 두 번째 덤프의 압축을 풀 수 있습니다.
따라서 이것이 가설에 불과한지는 확실하지 않습니다.
어쨌든 계속 살펴봅시다.
이제 다시 달려보겠습니다.
한 번에 허용되는 수입니다.
그래서 우리는 이 문제를 계속 해결해 나가고 있습니다.
잠급니다.
그리고 나서 이걸 넘어가면 새로 할당된 영역이 들어오고, 이걸 넘어가면 두 개가 표시됩니다.
3 뒤에 0이 네 개 있습니다.
즉, 이 메모리 영역에서 시작하여 코드를 계속 언패킹하고 있다는 뜻입니다.
원한다면 3번 덤프를 따라갈 수도 있습니다.
따라서 덤프를 마우스 오른쪽 버튼으로 클릭합니다.
이 작업을 수행하기 전에 먼저 덤프 3을 선택해야 합니다.
이제 3번 덤프가 등장합니다.
가자.
다시 그의 동작에 따라.
다시 시작합니다.
함께 보기로 이동하여 이 통화로 와서 한 발짝 떨어져 보세요.
이제 다른 영역 메모리를 2D로 할당하고 있으므로 덤프 파일 선택 덤프 4에서 이를 따라갈 수 있습니다.
그리고 마우스 오른쪽 버튼을 클릭하고 덤프에서 팔로우합니다.
이제 아래 2번은 언팩 코드가 있고, 3번과 4번은 비어 있습니다.
이제 시작하겠습니다.
그리고 이제 몰락을 보게 됩니다.
4번 덤프에 언팩 코드가 있습니다.
알겠습니다.
이번에는 가상 보호에 도달했고 이제 덤프 4가 이미 Z로 채워진 것을 볼 수 있습니다.
이제 Virtualprotect를 호출합니다.
알겠습니다.
따라서 이 시점에서는 덤프 4를 덤프해도 되지만 확실하지 않은 경우 계속 진행해도 됩니다.
탐색을 계속 진행하려면.
하지만 이 시점에서는 전에도 해봤고, 전에도 해본 적이 있기 때문에 말씀드릴 수 있습니다.
이곳이 덤프할 올바른 장소임을 확인합니다.
그렇다면 무엇을 버릴까요?
프로세스 해커를 사용하여 덤프하고 있습니다.
다음 단원에서 그 방법을 알아보겠습니다.
다음 동영상.
시청해 주셔서 감사합니다.