Unpacking binaries

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

패킹된 이진 파일 식별하기

  • 문자열 부재: 패킹된 이진 파일에서는 거의 어떤 문자열도 찾을 수 없는 것이 일반적입니다.

  • 많은 사용되지 않는 문자열: 악성 코드가 상업용 패커를 사용하는 경우, 교차 참조 없이 많은 문자열을 찾는 것이 일반적입니다. 이러한 문자열이 존재한다고 해도 이진 파일이 패킹되지 않았다는 의미는 아닙니다.

  • 일부 도구를 사용하여 이진 파일을 패킹한 패커를 찾을 수도 있습니다:

기본 권장 사항

  • 패킹된 이진 파일을 분석할 때는 IDA에서 아래에서 위로 분석을 시작하세요. 언패커는 언패킹된 코드가 종료되면 종료되므로 시작 시 언패킹된 코드로 실행을 전달하는 경우는 드뭅니다.

  • 레지스터 또는 메모리 영역으로의 JMP 또는 CALL 또는 인수를 푸시하고 주소 방향을 호출한 다음 retn을 호출하는 함수를 검색하세요. 이 경우 함수의 반환은 호출하기 전에 스택에 푸시된 주소를 호출할 수 있으므로 해당 주소를 따라가야 합니다.

  • VirtualAlloc중단점을 설정하세요. 이는 프로그램이 언패킹된 코드를 작성할 수 있는 메모리 공간을 할당하기 때문입니다. 함수를 실행한 후 EAX 내부의 값을 얻으려면 "run to user code" 또는 F8을 사용하여 "덤프에서 해당 주소를 따라가세요". 언패킹된 코드가 저장될 영역인지 확실하지 않기 때문에 이를 알 수 없습니다.

  • **VirtualAlloc**의 인수로 "40"이라는 값을 사용하면 Read+Write+Execute(실행이 필요한 일부 코드가 여기에 복사됨)를 의미합니다.

  • 코드를 언패킹하는 동안 산술 연산memcopy 또는 VirtualAlloc과 같은 함수를 여러 번 호출하는 것이 일반적입니다. 산술 연산만 수행하는 함수에 도달하면 (아마도 JMP 또는 레지스터로의 호출) 함수의 끝을 찾거나 적어도 마지막 함수를 호출하여 코드가 흥미로운지 확인하세요.

  • 코드를 언패킹하는 동안 메모리 영역을 변경할 때마다 메모리 영역 변경이 언패킹 코드의 시작을 나타낼 수 있습니다. Process Hacker(프로세스 --> 속성 --> 메모리)를 사용하여 메모리 영역을 쉽게 덤프할 수 있습니다.

  • 코드를 언패킹하려고 할 때 이미 언패킹된 코드로 작업 중인지 확인하는 좋은 방법은 이진 파일의 문자열을 확인하는 것입니다. 어느 시점에서 점프(메모리 영역 변경)를 수행하고 더 많은 문자열이 추가된 것을 알 수 있다면, 언패킹된 코드로 작업 중임을 알 수 있습니다. 그러나 패커에 이미 많은 문자열이 포함되어 있는 경우 "http"라는 단어를 포함하는 문자열의 수를 확인하고 이 수가 증가하는지 확인할 수 있습니다.

  • 메모리 영역에서 실행 파일을 덤프할 때 PE-bear를 사용하여 일부 헤더를 수정할 수 있습니다.

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

Last updated