- rev.ng는 디컴파일러 백엔드 revng-c를 공개해 디컴파일 엔진을 오픈 소스로 전환하고, UI 비공개 베타·새 웹사이트·rev.ng Hub·문서를 함께 내놓음
- 로컬에서는 설치 스크립트로 CLI를 구성한 뒤
revng artifact와 revng ptml을 사용해 유효한 C 코드 형태의 디컴파일 결과를 확인할 수 있음
- 인터랙티브 UI는 VSCode 기반으로 브라우저와 독립 실행 앱을 목표로 하며, 뉴스레터 구독자를 FIFO 방식으로 초대하는 비공개 베타에서 제공됨
- 자동 자료구조 복구, 협업 리버싱, 다양한 아키텍처 지원, 확장성이 핵심 목표지만 현재 QA는 Linux x86-64 바이너리에 가장 집중됨
- 프레임워크와 CLI는 오픈 소스이고, 클라우드 UI는 공개 프로젝트에 무료 제공되며 비공개 프로젝트·오프라인 독립 실행 UI는 유료 모델로 구분됨
오픈 소스 전환과 비공개 베타
- rev.ng는 디컴파일러 백엔드인
revng-c를 오픈 소스로 공개함
- 이 공개로 전체 디컴파일 엔진이 오픈 소스가 됨
- 초기 문서도 함께 제공됨
- UI는 뉴스레터 구독자를 대상으로 비공개 베타 초대를 시작할 예정임
- 초대는 FIFO 방식으로 진행됨
- 베타 참여를 위해 뉴스레터 등록이 필요함
- 새 웹사이트와 rev.ng Hub도 함께 공개됨
- rev.ng Hub는 클라우드 버전 진입점임
- 베타 사용자는 프로젝트를 만들고, 브라우저에서 UI를 실행하고, 다른 사용자와 협업할 수 있음
- 비공개 베타 대상자가 아니어도 공개 프로젝트는 둘러볼 수 있음
- rev.ng 기능을 직접 확인하려는 사용자를 대상으로 비공개 데모도 진행함
CLI로 rev.ng 사용해 보기
revng는 root 권한 없이 단일 디렉터리에 설치할 수 있고, 해당 디렉터리를 삭제하면 제거됨
curl -L -s https://rev.ng/downloads/revng-distributable/master/install.sh | bash
cd revng
source ./environment
- 예제
example.c는 argc * 3을 반환하는 간단한 프로그램임
int main(int argc, char *argv[]) {
return argc * 3;
}
gcc로 컴파일한 뒤 revng artifact를 실행하면 단일 파일 형태의 디컴파일 결과를 얻을 수 있음
gcc example.c -o example -O2
revng artifact \
--analyze \
--progress \
decompile-to-single-file \
example \
| revng ptml --color \
| grep -A2 -B1 '[^_]main\b' \
> decompiled.c
베타 범위와 테스트 대상
- UI를 사용하려면 뉴스레터에 등록해야 하며, 초대는 작은 배치로 진행됨
- 이번 릴리스는 UI와 디컴파일 결과를 일부 바이너리에서 데모하고, 실제 바이너리 작업에 대한 피드백과 버그 리포트를 받는 데 초점을 둠
- 테스트에 사용한 비단순 바이너리와
.text 크기는 다음과 같음
- rev.ng는 여러 ABI와 플랫폼을 지원하지만, 이 단계의 초기 QA는 Linux x86-64 바이너리에 집중됨
- 문제가 생기면 Discourse에서 도움을 받을 수 있음
rev.ng가 목표로 하는 디컴파일 경험
- rev.ng의 주요 초점은 자동 자료구조 복구, 현대적인 UX, 협업 리버싱, 넓은 플랫폼 지원, 확장성임
-
자동 자료구조 복구
- Data Layout Analysis로
struct 레이아웃을 프로시저 간 분석을 통해 자동 복구할 수 있음
- 연결 리스트 노드 예제는
int64_t data[5] 배열과 다음 노드 포인터를 가진 구조체를 대상으로 함
- rev.ng 출력은 배열 크기 5와 다음 원소 포인터 접근을 자동 감지한 구조체와 함수 코드를 생성함
- 디컴파일러 출력은 문법적으로 유효한 C 코드임
- 이 기능은 현재 사용 가능함
-
VSCode 기반 인터랙티브 UI
- UI는 VSCode 기반이라 VSCode 사용자는 익숙한 방식으로 접근할 수 있음
- 브라우저 탭과 독립 실행 애플리케이션 양쪽에서 실행될 수 있음
- 주요 단축키는 다음과 같음
Ctrl + Click: 커서 아래 함수나 타입 정의로 이동
N: 이름 변경
Y: 타입 편집
X: 참조 표시
- rev.ng는 변경이 생기면 영향을 받는 부분만 다시 계산하는 인터랙티브 디컴파일러임
- UI는 현재 비공개 베타 참가자에게 제공됨
-
협업 리버싱
- rev.ng UI는 클라이언트-서버 아키텍처를 사용함
- 여러 사용자가 같은 데몬 인스턴스에 접속해 같은 프로젝트에서 동시에 작업할 수 있음
- 클라우드 버전에서는 프로젝트 관리를 위한 GitHub 유사 애플리케이션인 rev.ng Hub를 사용할 수 있음
- 협업 기능은 동작하지만 사용자 경험 개선이 필요하며, 로드맵 항목 #797에서 추적됨
아키텍처와 플랫폼 지원 방식
- rev.ng는 QEMU 파이프라인의 앞부분을 사용해 실행 코드를 tiny code로 리프트하고, 이를 LLVM IR로 변환한 뒤 디컴파일을 진행함
- 이 구조 덕분에 QEMU가 지원하는 아키텍처를 비교적 쉽게 지원할 수 있음
- 아키텍처 지원만큼 플랫폼, 특히 ABI 지원도 중요함
- 현재 지원 상태는 다음과 같음
- 아키텍처: x86, x86-64, ARM, AArch64, MIPS, s390x를 서로 다른 성숙도로 지원
- 바이너리 형식: ELF, PE/COFF, Mach-O 지원
- 가져오기:
.idb, DWARF 디버그 정보, PDB 디버그 정보 지원
- 대부분의 QA는 Linux x86-64 바이너리에서 수행됐고, 나머지는 추가 QA가 필요함
- 더 많은 플랫폼 QA는 로드맵 항목 #58에서 추적됨
확장성과 스크립팅
- rev.ng는 리버스 엔지니어링 도구를 위한 프레임워크를 목표로 하며, 인터랙티브 UI를 제외한 전체 프로젝트가 오픈 소스임
- 프로젝트 파일인 model은 YAML 문서라 JSON이나 YAML을 파싱할 수 있으면 rev.ng를 스크립팅할 수 있음
- 모델에는 디컴파일 대상 바이너리의 아키텍처, 기본 ABI, 세그먼트, 함수 목록, 타입 목록 등이 포함됨
- Python과 TypeScript용 래퍼로 모델을 수정할 수 있음
- 현재 모델 조작 래퍼는 있지만, 분석 실행과 아티팩트 가져오기를 쉽게 수행하는 방식은 아직 없음
- 완전한 Python 클라이언트는 로드맵 항목 #17에서 추적됨
- 내부 표현에는 LLVM IR이 많이 사용되어 LLVM 생태계 도구를 활용할 수 있음
오픈 소스 CLI와 유료 UI의 구분
- rev.ng 프레임워크는 완전히 오픈 소스이며, CLI에서 원하는 대상을 디컴파일할 수 있음
- UI 제공 형태는 세 가지로 나뉨
- 공개 프로젝트용 클라우드 UI는 무료 사용 가능
- 비공개 프로젝트용 클라우드 UI는 구독 필요
- 완전 독립 실행·완전 오프라인 UI는 유료로 제공
- 클라우드 사용 방식은 다음과 같음
- rev.ng Hub에서 프로젝트를 만들고 협업자를 초대함
- UI는 브라우저에서 실행됨
- 백엔드는 rev.ng 클라우드에서 실행됨
- 프로젝트 파일을 공개해도 괜찮다면 UI를 포함한 클라우드 버전 rev.ng를 무료로 사용할 수 있음
- Kubernetes를 사용하는 온프레미스 프라이빗 클라우드 서비스 설치도 논의 가능함
1.0 로드맵과 연락 채널
- 1.0까지의 로드맵은 4개 티어로 나뉨
- Tier 1: 알파 버전, 지인 대상 데모, 완료됨
- Tier 2: 베타 버전, 뉴스레터 구독자에게 클라우드 버전 접근 제공, 현재 시작됨
- Tier 3: 오픈 베타, 예정
- Tier 4: 1.0 릴리스, 예정
- 자세한 진행 상황은 로드맵 페이지에서 확인할 수 있음
- 프로젝트 소식과 지원 채널은 다음과 같음