Skip to content
KitploitKITPLOIT
도구블로그
Log in
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
attesor — AI-powered reverse-engineering of Rosetta (2 for Linux). Disclaimer: due to the user agreement, I will not touch the code. All is done by AI, so there might be messy implementation. | Kitploit
도구/GitHubGitHub/inokinoki/attesor
Reverse EngineeringHardware SecurityBinary AnalysisLearning & EducationAI-Assisted ReversingFirmware Analysis
GitHubinokinoki/attesor

attesor

AI-powered reverse-engineering of Rosetta (2 for Linux). Disclaimer: due to the user agreement, I will not touch the code. All is done by AI, so there might be messy implementation.

저장소 보기
723211개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Rosetta 2 Reverse Engineering Project

License: MIT Status

Apple의 Rosetta 2 바이너리 변환 기술을 이해하고 문서화하기 위한 포괄적인 리버스 엔지니어링 프로젝트입니다.

목차

  1. 배경
  2. Rosetta란?
  3. Rosetta 2란?
  4. Apple이 macOS에서 Rosetta 2를 제공하는 방식
  5. 기술 아키텍처
  6. 이 프로젝트
  7. 파일 구조
  8. 사용 방법
  9. 진행 상황
  10. 참고 자료

배경

아키텍처 전환

2020년 11월, Apple은 첫 Apple Silicon Mac을 발표하며 Intel x86_64 프로세서에서 자체 ARM 기반 M1 칩으로의 역사적인 전환을 알렸습니다. 이는 Apple의 세 번째 주요 아키텍처 전환이었습니다:

  1. 1994년: Motorola 68000 -> PowerPC
  2. 2006년: PowerPC -> Intel x86_64
  3. 2020년: Intel x86_64 -> Apple Silicon (ARM64)

각 전환 과정에서는 마이그레이션 기간 동안 기존 소프트웨어를 실행할 수 있는 바이너리 변환 솔루션이 필요했습니다. Rosetta 2는 현재까지 Apple의 가장 정교한 바이너리 변환 시스템입니다.


Rosetta란?

Rosetta(2006~2011)는 Apple의 첫 동적 바이너리 변환 소프트웨어로, PowerPC 애플리케이션이 Intel 기반 Mac에서 실행될 수 있도록 해주었습니다.

주요 기능:

  • 동적 변환: PowerPC 코드를 런타임에 x86_64로 변환
  • OS 통합: Mac OS X 10.4(Tiger)부터 10.6(Snow Leopard)까지 내장
  • 투명한 작동: 사용자가 PowerPC 앱을 일반적으로 실행
  • 성능 오버헤드: 일반적으로 네이티브 코드보다 20~50% 느림

Rosetta는 Mac OS X 10.7(Lion)에서 제거되어 Intel 전환이 완료되었습니다.


Rosetta 2란?

Rosetta 2는 Intel x86_64 Mac용으로 컴파일된 애플리케이션이 Apple Silicon(ARM64) Mac에서 실행될 수 있도록 해주는 Apple의 고급 동적 바이너리 변환 기술입니다.

아키텍처 개요```

┌─────────────────────────────────────────────────────────────┐ │ User Application (x86_64) │ ├─────────────────────────────────────────────────────────────┤ │ Rosetta 2 Layer │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ │ │ Translator │ │ Runtime │ │ System Call │ │ │ │ (AOT/JIT) │ │ Library │ │ Translation │ │ │ └─────────────┘ └─────────────┘ └─────────────────────┘ │ ├─────────────────────────────────────────────────────────────┤ │ macOS Kernel (ARM64) │ ├─────────────────────────────────────────────────────────────┤ │ Apple Silicon Hardware │ └─────────────────────────────────────────────────────────────┘

### 주요 기술

1. **Ahead-of-Time (AOT) 변환**
   - 설치 시 x86_64 바이너리를 ARM64로 변환합니다
   - 번역된 코드를 캐시에 저장하여 이후 실행 속도를 높입니다
   - 순수 JIT 변환에 비해 런타임 오버헤드를 줄입니다

2. **Just-in-Time (JIT) 변환**
   - 실행 중 필요에 따라 코드 블록을 변환합니다
   - 동적 로드 코드와 자가 수정 코드를 처리합니다
   - 효율성을 위해 변환 캐시를 유지합니다

3. **명령어 집합 변환**
   - x86_64 → ARM64 명령어 매핑
   - SSE/AVX → NEON 벡터 명령어 변환
   - x86_64 플래그 → ARM64 조건 코드

4. **시스템 호출 변환**
   - x86_64 macOS 시스템 호출을 ARM64 해당 호출로 변환합니다
   - 서로 다른 호출 규칙을 처리합니다
   - 시스템 호출 경계를 넘어 레지스터 상태를 관리합니다

5. **런타임 지원**
   - CPU 기능 감지 에뮬레이션
   - 스레드 지역 저장소 처리
   - 시그널 및 예외 처리

---

## Apple이 macOS에서 Rosetta 2를 제공하는 방법

### 설치 위치

Rosetta 2는 다음 위치에 있습니다:```
/Library/Apple/usr/libexec/oah/
├── rosetta        # Main translator binary
├── rosettad       # Rosetta daemon
└── librosetta.*   # Runtime libraries

oah 디렉토리는 "Old Architecture Hardware"(구형 아키텍처 하드웨어)를 의미하며, PowerPC 전환 시대에서 이어진 용어입니다.

자동 설치

Apple Silicon Mac에서 Rosetta 2는 기본적으로 설치되지 않습니다. 다음 두 가지 방식으로 설치가 시작됩니다:

  1. 최초 실행 프롬프트 ``` The "Rosetta" software is not installed on your Mac. Rosetta translates apps from Intel-based Macs for use on Apple Silicon Macs.
  2. 명령줄 설치 ```bash softwareupdate --install-rosetta --agree-to-license

제공되는 구성 요소

ComponentDescription
RosettaLinux/rosetta번역 엔진을 포함하는 핵심 ARM64 바이너리
RosettaLinux/rosettad번역 서비스를 관리하는 시스템 데몬
debugserver -> /usr/libexec/rosetta/debugserver번역된 프로세스의 디버깅 지원
libRosettaRuntime번역 중에 연결되는 런타임 라이브러리
translate_tool -> /usr/libexec/rosetta/translate_tool번역된 바이너리를 빌드하기 위한 번역 도구

macOS와의 통합

  1. launchd 통합: Rosetta 데몬이 시스템 서비스로 실행됩니다
  2. 코드 서명: 번역된 바이너리가 자동으로 코드 서명됩니다
  3. Gatekeeper: Rosetta로 번역된 앱이 보안 검사를 통과합니다
  4. System Integrity Protection: 수정으로부터 보호됩니다

기술 아키텍처

번역 프로세스```

┌──────────────────────────────────────────────────────────────────┐ │ Phase 1: Binary Loading │ │ ─────────────────────────────────────────────────────────────── │ │ 1. Load x86_64 Mach-O binary │ │ 2. Parse segments, sections, symbols │ │ 3. Validate code signatures │ │ 4. Map into translation context │ └──────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────┐ │ Phase 2: AOT Translation │ │ ─────────────────────────────────────────────────────────────── │ │ 1. Disassemble x86_64 code sections │ │ 2. Translate instructions to ARM64 │ │ 3. Apply optimizations │ │ 4. Store in translation cache (~/.oah) │ └──────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────┐ │ Phase 3: Runtime Execution │ │ ─────────────────────────────────────────────────────────────── │ │ 1. Load translated ARM64 code │ │ 2. Set up x86_64 emulation context │ │ 3. Handle JIT translations for dynamic code │ │ 4. Translate syscalls on-the-fly │ └──────────────────────────────────────────────────────────────────┘

### 주요 변환 과제

1. **레지스터 매핑**
   - x86_64는 16개의 GPR을 가지고, ARM64는 31개의 GPR을 가짐
   - x86_64 플래그 레지스터 -> ARM64 NZCV 플래그
   - RIP (명령어 포인터) 에뮬레이션

2. **메모리 순서**
   - x86_64: 강한 메모리 순서 (TSO)
   - ARM64: 약한 메모리 순서
   - 정확성을 위해 메모리 배리어 필요

3. **벡터 명령어**
   - SSE (128비트) -> NEON (128비트) 직접 매핑
   - AVX (256비트) -> NEON 쌍 에뮬레이션
   - SIMD에 대한 예외 처리 방식이 다름

4. **호출 규약**
   - x86_64: 처음 6개 인자를 레지스터로 전달 (RDI, RSI, RDX, RCX, R8, R9)
   - ARM64: 처음 8개 인자를 레지스터로 전달 (X0-X7)
   - 스택 프레임 배치 방식이 다름

---

## 이 프로젝트

이 저장소는 Rosetta 2 바이너리에서 추출한 함수들의 역공학 구현체를 포함합니다. 세심한 분석과 디컴파일을 통해 수백 개의 함수에 대한 의미론적 목적을 식별하고 문서화했습니다.

### 목표

1. **교육**: Rosetta 2가 내부적으로 어떻게 작동하는지 이해
2. **문서화**: 변환 기술에 대한 포괄적인 문서 작성
3. **구현**: 깔끔하고 잘 문서화된 C 구현체 제공
4. **커뮤니티**: 역공학 커뮤니티와 지식 공유

### 우리가 이룬 성과

- **828개 함수** 식별 및 주요 `rosetta` 바이너리에서 이름 부여
- **612개 함수** 깔끔한 C 코드로 완전히 구현
- **66개 범주**의 기능 문서화
- 의미론적 이름이 포함된 완전한 함수 이름 매핑

### 함수 범주

| 범주 | 함수 수 | 설명 |
|----------|-----------|-------------|
| 진입점 | 1 | Rosetta 초기화 |
| 부동소수점/벡터 연산 | ~20 | 부동소수점 및 SIMD 상태 관리 |
| SIMD 메모리 연산 | ~10 | SIMD를 사용한 memchr, memcmp, memcpy |
| 벡터 연산 | ~30 | NEON 벡터 산술, 비교 |
| 이진 변환 | ~50 | x86_64 -> ARM64 명령어 변환 |
| 시스템 콜 핸들러 | ~60 | 시스템 콜 변환 및 전달 |
| 메모리 관리 | ~20 | malloc, free, mmap 래퍼 |
| 해시 함수 | ~5 | 변환 캐시를 위한 주소 해싱 |
| 문자열 연산 | ~30 | SIMD 최적화 문자열 함수 |
| 암호화 확장 | ~30 | AES, SHA, CRC32 통과 |
| ELF 파싱 | ~15 | 리눅스 바이너리 형식 지원 |
| 변환 캐시 | ~20 | AOT/JIT 캐시 관리 |

---

## 파일 구조
도구 다운로드