문제

저자가 덤프 빈을 사용하여 내보내기를 나열하고 내보낸 기능에 대한 조립 코드를 얻는 ollydbg가있는 튜토리얼에 따라 바쁩니다. 내보내기 테이블 RVA가 분해의 실제 주소에 해당하지 않기 때문에 완전한 분리에서 함수 코드를 어떻게 찾을 수 있습니까?

도움이 되었습니까?

해결책

RVA는 이전 가능한 가상 주소입니다. 프로세스 공간에서 실제 주소를 찾으려면 프로세스에 모듈이로드 된 기본 주소를 알아야합니다. 해당 기본 주소를 RVA에 추가하면 실제 주소가 있습니다. 나는 OllyDBG를 사용하지 않았지만 첨부 된 프로세스에로드 된 모듈의 기본 주소를 제공하지 않으면 놀랍습니다. 어떤 이유로 어떤 이유로 해당 정보를 제공하지 않으면 sysinternal 도구에서 procexp.exe를 사용하여 정보를 얻을 수 있습니다.

다른 팁

최소한 고급 언어로 작성된 프로그램의 경우 기능에 대한 좋은 표시기는 스택 프레임을 설정하는 코드입니다.

문제의 코드를 생성하는 데 사용 된 컴파일러를 알고 있다면 찾아야 할 사항을 찾을 수 있어야합니다.

예시

$ cat main.c
int main(int argc, char **argv) {
        return 1;
}
$ gcc -m32 -S main.c
$ cat main.s 
        .file     "main.c"
        .text
.globl main
        .type    main, @function
main:
        leal     4(%esp), %ecx
        andl     $-16, %esp
        pushl    -4(%ecx)
        pushl    %ebp
        movl     %esp, %ebp
        pushl    %ecx
        movl     $1, %eax
        popl     %ecx
        popl     %ebp
        leal     -4(%ecx), %esp
        ret
        .size    main, .-main
        .ident   "GCC: (Debian 4.3.3-4) 4.3.3"
        .section    .note.GNU-stack,"",@progbits

내 예에서 Movl %ESP, %EBP 명령어는 해당 설정 코드의 마지막 명령입니다.

상업적 분리 된 Ida Pro는 a 베어 버전 무료 버전 다운로드 할 수 있습니다. 기능을 자동으로 찾는 데 꽤 좋은 작업을 수행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top