[실습] 쉘 코드의 GetPC 루틴 구현 및 디버깅 실습 (FSTENV 패턴)

2025. 12. 19. 04:13·cs/sec
728x90

[실습] 쉘 코드의 GetPC 루틴 구현 및 디버깅 실습 (FSTENV 패턴)

쉘코드는 처음 실행될 때 자신이 로드된 가상주소를 알지 못하기 때문에 쉘코드 디코딩 과정이나 문자열 참조 과정 등이 필요할 경우 어디서부터 디코딩해야할지 어디를 참조해야 원하는 문자열을 얻을 수 있는지 알 수 없음
GetPC 루틴을 통해 현재 쉘코드가 자신의 주소 위치를 확인하고 해당 위치를 기준으로 원하는 행위를 수행함

FSTENV(FPU Stack Enviroment)

x86 아키텍처에서 사용되는 부동 소수점 관련 명령어 중 하나
x87 ControlWord, StatusWord, TagWord, FPU 프로그램 카운터 등 부동 소수점 환경과 관련된 값을 스택에 저장

Q. FSTENV 명령으로 어떻게 쉘코드가 올라간 메모리의 가상 주소값을 획득할 수 있을까요?

A.FPU 프로그램 카운터: 스택에 올라가는 값 중 프로그램 카운터와 관련된 값

쉘코드에서 FPU 명령을 실행하고 FSTENV로 FPU 프로그램 카운터를 스택에 저장

↳현재 쉘코드의 위치를 스택에 저장할  수 있음

이후 pop 명령으로 특정 레지스터에 해당 값을 저장함으로써 현재 쉘코드가 위치한 가상 주소 획득

FSTENV 패턴 이해

  • 메모리를 할당하고 해당 영역에 명령을 입력합니다.

덤프 D9 EE D9 74 F4 58

fldz 명령어와 fns tenv 명령을 확인한다.

pop eax

  • 시작 위치에 EIP를 설정합니다.

  • FSTENV 명령 실행 시. 스택 상태를 확인합니다. (FPU 연산과 관련한 환경 값들이 스택에 저장, 현재 스택에는 마지막으로 수행된 FPU연산의 명령 포인터가 저장)

  • POP EAX 실행 시 EAX에 마지막으로 수행된 부동소수점 명령의 주소를 획득할 수 있습니다.

*FSTENV 패턴의 GetPC루틴을 통해 쉘 코드가 위치한 포인터를 획득할 수 있는 것을 확인할 수 있습니다.

FSTENV 패턴 분석1

쉘 코드 분석 실습
대상 파일 analayeme-sc05.01.bin
MD5 2A76539003AA15DE7DBB6789C79443E1
  • 실습 시작 준비

메모리 맵- 메모리 할당

메모리 공간에 analayeme-sc05.01.bin

바이너리 편집기-붙여넣기(크기 무시X)

디스어셈블러에서 따라가기

ETP 설정

  • FSTENV 명령 실행 시 마지막으로 수행된 FPU 연산의 명령 포인터가 스택에 저장됩니다.

  • POP EDX 실행 시 EDX에 저장되는 값을 확인합니다.

  • EDX를 이용해 쉘 코드에 포함된 디코딩하고자 하는 데이터에 접근합니다.
  • EAX와 XOR연산을 수행하면서 셀프 디코딩 과정을 거칩니다.

*FSTENV 패턴의 GetPC루틴을 통해 쉘 쿠드에 포함된 디코딩 과정을 거칠 영역의 주소를 획득하고 디코딩 루프를 돌면서 해당 데이터 영역을 디코딩합니다.

FSTENV 패턴 분석2

쉘 코드 분석 실습
대상 파일 mailcious-10d12a43.doc.shellcode.bin
MD5 EAA9B772DDE827A11E95A8FF931D17F9

강의요약

  1. FNSTENV 명령어가 무엇인지
  2. FNSTENV로 어떻게 GetPC 과정을 수행하는지 쉘코드를 한 단계씩 진행해보며 확인
728x90
반응형

'cs > sec' 카테고리의 다른 글

[모의해킹]도파민을 이용한 iOS 15.8 탈옥 후 Burp  (0) 2026.01.11
[모의해킹]안드로이드 Galaxy S10e 루팅(Rooting) with Magisk  (1) 2026.01.11
[이론] 쉘 코드 개요  (0) 2025.12.19
[인프라와 웹의 위협기술]22. LFI와 RFI 개요  (0) 2025.12.19
웹 서비스 해킹을 위한 버프스위트 활용 가이드  (1) 2025.12.19
'cs/sec' 카테고리의 다른 글
  • [모의해킹]도파민을 이용한 iOS 15.8 탈옥 후 Burp
  • [모의해킹]안드로이드 Galaxy S10e 루팅(Rooting) with Magisk
  • [이론] 쉘 코드 개요
  • [인프라와 웹의 위협기술]22. LFI와 RFI 개요
lakedata
lakedata
lakedata 님의 블로그 입니다.
  • lakedata
    lakedata 님의 블로그
    lakedata
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • cs (82)
        • dev (28)
        • sec (29)
        • ops (25)
      • 자격증 (32)
        • 정보처리기사 (20)
        • 정보보안기사 (1)
        • aws dva (6)
        • aws dop (2)
      • IT서적 (27)
        • 클린아키텍처 (10)
        • 객체지향의사실과오해 (7)
        • 오브젝트 (10)
      • 코테 (42)
        • 알고리즘 (20)
        • 백준 (13)
        • 프로그래머스 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    docker
    Spring
    SQL
    Java
    CS
    Security
    AWS
    알고리즘
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
lakedata
[실습] 쉘 코드의 GetPC 루틴 구현 및 디버깅 실습 (FSTENV 패턴)
상단으로

티스토리툴바