바이너리 파일 형식을 리버스 엔지니어링하는 데 도움이되는 도구


81

알 수없는 이진 데이터 형식을 디코딩하는 데 도움이되는 도구는 무엇입니까?

나는 Hex Workshop과 010 Editor가 모두 구조를 지원한다는 것을 알고 있습니다. 알려진 고정 형식의 경우 제한적으로 괜찮지 만, 특히 알 수없는 형식의 경우 더 복잡한 것은 사용하기 어렵습니다. 스크립팅 언어 또는 스크립팅 가능한 GUI 도구에 대한 모듈을 찾고있는 것 같습니다.

예를 들어, 제한된 알려진 정보 (아마도 매직 넘버)에서 데이터 블록 내에서 구조를 찾을 수 있기를 원합니다. 구조를 찾으면 알려진 길이와 오프셋 단어를 따라 다른 구조를 찾습니다. 그런 다음 의미가있는 곳에서 반복적으로 반복합니다.

제 꿈에서는 시스템에 이미 말한 내용을 기반으로 가능한 오프셋과 길이를 자동으로 식별 할 수도 있습니다!


1
질문에 대한 직접적인 대답이 아닙니다 : 알 수없는 형식의 이진 파일과 함께 작동하는 실행 파일이 없습니까? OllyDbg와 같은 ring3 디버거를 사용하여 리버스 엔지니어링하는 대신 파일 형식을 무차별 대입하는 것보다 훨씬 쉽습니다.
Daniel Sloof

오 예, "어떤 프로그램을 작성하고
싶었지만

어떤 경우에는 어느 정도 처리하는 실행 파일이 있습니다. 때로는 파일이 실행 가능한 코드 (표준 형식이 아님)이며 자체 디코딩 루틴을 포함 할 수 있습니다. 시작점으로 부분 문서의 제한된 파편이있을 수 있습니다. 다른 경우에는 아무것도 없습니다.
Mat

답변:


22

다음은 떠오르는 몇 가지 팁입니다.

경험상 대화 형 스크립팅 언어 (Python 사용)가 큰 도움이 될 수 있습니다. 바이너리 스트림과 몇 가지 간단한 알고리즘을 처리하는 간단한 프레임 워크를 작성할 수 있습니다. 그런 다음 바이너리를 가져와 다양한 것을 확인할 스크립트를 작성할 수 있습니다. 예를 들면 :

다양한 부분에 대한 통계 분석을 수행하십시오. 예를 들어 임의 데이터는이 부분이 아마도 압축 / 암호화되었음을 알려줍니다. 0은 부품 사이의 패딩을 의미 할 수 있습니다. 분산 된 0은 정수 값 또는 유니 코드 문자열 등을 의미 할 수 있습니다. 다양한 오프셋을 찾아보십시오. 바이너리의 일부를 2 바이트 또는 4 바이트 정수 또는 부동 소수점으로 변환하고 인쇄하여 의미가 있는지 확인하십시오. 데이터에서 반복되거나 매우 유사한 부분을 검색하는 몇 가지 함수를 작성하면 헤더를 쉽게 찾을 수 있습니다.

가능한 한 많은 문자열을 찾고 다른 인코딩 (c 문자열, 파스칼 문자열, utf8 / 16 등)을 시도하십시오. 이를위한 몇 가지 좋은 도구가 있습니다 (나는 Hex Workshop에 그런 도구가 있다고 생각합니다). 문자열은 많은 것을 알려줍니다.

행운을 빕니다!


아래 답변의 Hachoir 는 정확히 이러한 종류의 프레임 워크입니다. 다양한 종류의 문자열, 날짜, 비트, 부동 소수점, 패딩 등 미리 정의 된 필드 세트가 제공됩니다. 내장 파서는 문서와 함께 예제로 사용할 수 있습니다.
roolebo

15

Mac OS X의 경우 제 iBored보다 훨씬 더 뛰어난 새롭고 훌륭한 도구가 있습니다. Synaliyze It! ( http://www.synalysis.net/ )

iBored에 비해 차단되지 않은 파일에 더 적합하며 스크립팅 가능성 (Lua 사용)을 포함하여 구조를 완벽하게 제어 할 수 있습니다. 또한 구조를 더 잘 시각화합니다.


10

Tupni ; 내 지식으로는 Microsoft Research에서 직접 구할 수 없지만 유사한 프로그램 (아마도 오픈 소스)을 작성하려는 사람이 관심을 가질 수있는이 도구에 대한 문서가 있습니다.

Tupni : 입력 형식의 자동 리버스 엔지니어링 ( @ ACM 디지털 라이브러리 )

요약

최근 연구는 프로토콜 또는 파일 형식 사양의 자동 리버스 엔지니어링의 중요성을 확립했습니다. 그러나 이전 도구로 리버스 엔지니어링 된 형식은 보안 애플리케이션에 중요한 중요한 정보를 놓쳤습니다. 이 백서에서는 레코드 시퀀스, 레코드 유형 및 입력 제약을 포함한 풍부한 정보 세트로 입력 형식을 리버스 엔지니어링 할 수있는 도구 인 Tupni를 제시합니다. Tupni는 여러 입력에 대해 형식 사양을 일반화 할 수 있습니다. 우리는 Tupni의 프로토 타입을 구현하고 10 가지 형식으로 평가했습니다. 5 가지 파일 형식 (WMF, BMP, JPG, PNG 및 TIF)과 5 가지 네트워크 프로토콜 (DNS, RPC, TFTP, HTTP 및 FTP)입니다. Tupni는 테스트 입력에서 모든 레코드 시퀀스를 식별했습니다. 또한 여러 WMF 파일을 집계하여 Tupni는 WMF에 대한보다 완전한 형식 사양을 도출 할 수 있습니다. 또한 이전 리버스 엔지니어링 도구로는 불가능했던 제로 데이 취약성 서명 생성을 위해 제공하는 풍부한 정보를 사용하여 Tupni의 유용성을 시연합니다.



8

최근에 출시 한 내 자신의 도구 인 "iBored"가이 작업의 일부를 수행 할 수 있습니다. 파일 시스템 형식 (UDF, HFS, ISO9660, FAT 등)을 시각화하고 디버깅하는 도구를 작성하고 검색, 복사 및 나중에 구조 및 템플릿 지원을 구현했습니다. 구조 지원은 매우 간단하며 템플릿은 구조를 동적으로 식별하는 방법입니다.

모든 것을 Visual BASIC 언어로 프로그래밍 할 수 있으므로 값을 테스트하고 특정 블록을 읽는 등 모든 작업을 수행 할 수 있습니다.

이 도구는 무료이며 모든 플랫폼 (Win, Mac, Linux)에서 작동하지만, 공유하기 위해 방금 공개 한 개인 도구이므로 문서화되어 있지 않습니다.

하지만 시도해보고 피드백을주고 싶다면 더 유용한 기능을 추가 할 수 있습니다.

나는 그것을 오픈 소스로 만들었지 만 REALbasic으로 작성 되었기 때문에 많은 사람들이 그러한 프로젝트에 참여할 것 같지 않습니다.

링크 : iBored 홈페이지


2
참여하기 좋은 프로젝트 같네요 ... 제가 바이러스 백신 연구원으로 일할 때 정말 편리했을 것입니다. 대신, 손으로 내 모든 작업을 수행했습니다. 다운로드하여 확인하겠습니다. 이것에 감사드립니다, 나는 그것을 사용할 수 있습니다. :)
LarryF

멋진 이진 파일 분석 도구의 시작처럼 보이는,하지만 여전히 아주 디스크 중심이다 (512 바이트 블록은 ... (A)의 비트 공짜입니다)
스티브 베넷

@SteveBennett : 파일을 동일한 크기의 블록으로 클러스터링하는 것을 좋아합니다. 사실이지만 메뉴를 통해 블록 크기를 쉽게 변경할 수 있습니다. 또한 iBored는 전체 파일을 하나의 블록으로 처리 할 수 ​​있습니다. 유일한 단점은 단일 스크롤 가능한 블록보기에서 모든 데이터를 하나의 블록으로 표시하려고 시도하기 때문에 대용량 파일에 문제가 발생하여 성능 문제가 발생할 수 있다는 것입니다.
Thomas Tempelmann

6

나는 여전히 때때로 AXE, Advanced Hex Editor라는 오래된 16 진 편집기를 사용합니다. 지금은 인터넷에서 거의 사라진 것으로 보이지만 Google에서 여전히 찾을 수 있습니다. 내가 아는 마지막 버전은 3.4 버전 이었지만 실제로는 개인용 무료 버전 2.1 만 사용했습니다.

가장 흥미로운 기능이자 다양한 게임 및 그래픽 형식을 해독하는 데 가장 많이 사용했던 기능은 그래픽보기 모드입니다. 기본적으로 각 바이트가 색상 코드 픽셀로 변환 된 파일을 보여줍니다. 그리고 그렇게 간단하게 들리지만 때때로 리버스 엔지니어링 시도가 훨씬 쉬워졌습니다.

눈으로하는 것은 자동 분석을하는 것과는 정반대이며 그래픽 모드는 오프셋을 찾고 따르는 데 많이 사용되지 않을 것입니다.

최신 버전에는 사용자의 요구 사항 (스크립트, 정규성 파인더, 문법 생성기)에 맞는 것처럼 들리는 몇 가지 기능이 있지만 얼마나 좋은지 모르겠습니다.


URL은 어쩌면 지금 여기, 죽은 : advanced-hex-editor-axe.en.softonic.com
스티브 베넷

@Steve주의 해 주셔서 감사합니다. 그게 바로 그 거예요. 바이러스가 없다는 약속에도 불구하고 내 바이러스 스캐너는 다운로드를 시도하는 바이러스 경고를 받았기 때문에 신경 쓰지 않았습니다. 나는 내 대답을 바꾸었다.
mercator

5

Hachoir 필드에 바이너리 형식을 구문 분석을위한 파이썬 라이브러리입니다, 다음 필드를 검색합니다. 일반적인 형식에 대한 많은 파서가 있지만 파일에 대한 자체 파서를 작성할 수도 있습니다 (예 : 바이너리 파일을 읽거나 쓰는 코드로 작업 할 때 일반적으로 디버깅 지원을 받기 위해 먼저 Hachoir 파서를 작성합니다). 하지만 지금은 프로젝트가 거의 비활성 상태 인 것 같습니다.


(링크는 고장)
jacobq


0

비슷한 질문에 대한 내 대답의 cut'n'paste :

하나의 도구는 차량 엔진 관리 컴퓨터 바이너리 이미지 (대부분 룩업 테이블의 숫자 데이터)를 해석하고 편집하도록 설계된 WinOLS 입니다. 다양한 엔디안 형식 (PDP는 아니지만)을 지원하고 다양한 너비와 오프셋에서 데이터를보고 배열 영역 (맵)을 정의하고 모든 종류의 크기 조정 및 오프셋 옵션을 사용하여 2D 또는 3D로 시각화합니다. 또한 사용자에게 적합한 휴리스틱 / 통계 자동지도 찾기도 있습니다.

상용 도구이지만 무료 데모를 통해 모든 작업을 수행 할 수 있지만 바이너리에 변경 사항을 저장하고 필요하지 않은 엔진 관리 기능을 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.