ScratchABit은 데이터/제어 흐름 분석 기능을 갖춘 대화형 증분 디스어셈블러입니다. ScratchABit은 OpenSource 리버스 엔지니어링 커뮤니티(공급업체가 제대로 지원하지 않는 하드웨어, 하드웨어 및 소프트웨어 상호 운용성, 보안 연구를 위한 OpenSource 드라이버/펌웨어를 생성하기 위한 리버스 엔지니어링)의 노력에 전념하고 있습니다.
ScratchABit은 커뮤니티 IDAPython API에서 잘 알려진 분해/확장 모듈 작성을 지원합니다.
ScratchABit은 진행 중인 작업이며 필요에 따라 기능이 추가되며 기여를 환영합니다.
ScratchABit은 GNU General Public License v3(GPLv3)의 조건에 따라 출시됩니다.
난독화된 언어로 작성해서는 안 됩니다. 여기에는 너무 낮은 수준의 언어, 초기화되지 않은 변수에 액세스할 수 있는 언어, 변수와 함수/프로시저를 구별하지 않는 언어, 임의의 숫자에서 배열 인덱스를 시작하는 언어 등이 포함됩니다. ScratchABit은 Python( 귀하의 즐거움과 건전함을 위해 최신 버전, Python3).
사용자 인터페이스 프레임워크는 프레임워크 버전 간의 종속성, 팽창, 문제 및 비호환성을 추가하지 않고 필요한 수준의 사용자 상호 작용을 허용해야 합니다. ScratchABit은 현재 ANSI/VT100 터미널 이스케이프 시퀀스를 사용하는 간단한 전체 화면 텍스트 사용자 인터페이스를 사용합니다(예, 저주 라이브러리도 사용자에게 강제하기에는 너무 큰 종속성으로 간주되었습니다).
사용하기 쉬운 텍스트 형식을 활용하여 "데이터베이스"를 저장하고 쉽게 재사용하고 도구를 작성하며 버전 제어 시스템에 저장해야 합니다.
ScratchABit을 사용하려면 Python3이 설치되어 있어야 하며(Python 3.3부터 3.7까지 테스트됨) VT100(최소) 또는 XTerm(권장) 터미널 또는 터미널 에뮬레이터(Linux/BSD/등과 같은 모든 Unix 시스템은 호환되어야 합니다. 자세한 내용은 아래 FAQ 참조) 더).
다음을 사용하여 코드를 복제합니다.
git clone --recursive https://github.com/pfalcon/ScratchABit
--recursive
없이 코드를 복제한 경우 ScratchABit 디렉터리에서 git submodule update --init
실행하세요.
ScratchABit은 이제 다양한 CPU 아키텍처에 대한 액세스를 허용하는 Capstone Engine 기반 CPU 플러그인과 함께 제공됩니다. 이를 사용하려면 Capstone용 최신 Python 바인딩 모듈을 설치해야 합니다(종종 오래된 OS 배포판에서 제공되는 패키지를 선호함). 이를 설치하는 가장 쉬운 방법은 Python 사용자 패키지 디렉터리에 설치하는 것입니다.
pip3 install --no-cache-dir --user capstone
대안은 ScratchABit 디렉터리 내의 Python 가상 환경에 설치하는 것입니다.
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
ScratchABit 작업을 위해 새 터미널 세션을 열 때마다 source .venv/bin/activate
명령을 다시 실행하여 가상 환경을 활성화하세요.
위의 방법 중 아무것도 작동하지 않으면 시스템 전체에 캡스톤 패키지를 설치해 볼 수 있습니다(권장되지 않음):
sudo pip3 install --system capstone
ELF와 같은 자체 설명적 실행 파일 형식으로 파일을 디스어셈블하려면 해당 파일을 ScratchABit.py
에 인수로 전달하면 됩니다. 저장소에는 빠른 시작을 위한 다양한 아키텍처에 대한 다수의 example-*.elf
파일이 포함되어 있습니다. 예를 들어 x86 32비트 버전을 사용해 보려면 다음과 같이 하세요.
python3 ScratchABit.py example-x86_32.elf
또는 원시 바이너리 파일을 디스어셈블하려면 .def(정의) 파일을 생성하여 코드에 대해 정의된 메모리 영역, 바이너리 파일을 로드할 주소 등을 지정해야 합니다. (참고: . def 파일은 .elf 및 유사한 파일에도 유용할 수 있습니다.) 저장소에는 간단한 x86_64 원시 바이너리 코드와 해당 example-x86_64.def 파일이 포함되어 있습니다(사용 가능한 옵션에 대한 설명은 내부를 살펴보세요).
python3 ScratchABit.py example-x86_64.def
메뉴에 액세스하려면 F9를 누르십시오(마우스는 XTerm 호환 터미널에서도 작동합니다). 키 바인딩에 대한 도움말을 보려면 F1을 누르세요(대부분의 작업은 메뉴를 통해서도 액세스할 수 있습니다). ScratchABit의 작업 흐름은 다른 대화형 디스앰블러와 유사합니다(일부 이전 경험이나 배경 지식이 도움이 될 수 있음).
IDAPython 프로세서 플러그인은 Python 모듈 경로의 어느 곳에서나 로드할 수 있습니다. 또는 플러그인 .py
파일을 plugins/cpu/
하위 디렉터리에 심볼릭 링크/복사할 수 있습니다.
플러그인을 사용할 수 있게 되면 cpu xxx
라인에 플러그인 모듈 이름( .py
확장자 없음)을 설정하는 example-x86_64.def
기반으로 새 정의 파일을 생성합니다.
외부 플러그인을 사용하는 매우 간단한 예를 보려면 ida-xtensa2 저장소의 xtensa.py 플러그인과 함께 작동하는 이 esp8266.def 파일을 참조하세요.
Q: 어떤 프로세서/아키텍처가 지원됩니까?
A: ScratchABit은 자체적으로 프로세서 아키텍처를 지원하지 않으며 IDAPython API 플러그인을 사용하여 완전히 대상 변경이 가능합니다. 많은 플러그인을 사용할 수 있으므로 새 플러그인을 작성하는 것은 쉽습니다. 사용자가 ScratchABit을 테스트할 수 있도록 내부적으로 Pymsasid 디스어셈블러를 사용하여 간단한 x86 프로세서 플러그인이 배포판에 포함되어 있습니다.
버전 2.0부터는 Capstone 플러그인도 포함되어 x86, ARM, MIPS, PowerPC, SPARC 등을 포함한 다양한 아키텍처에 액세스할 수 있습니다. (아키텍처 지원은 사용자 테스트를 기반으로 점진적으로 활성화됩니다.)
plugins/cpu/
dir에 대한 README에서 ScratchABit과 함께 제공되는 플러그인에 대해 읽을 수 있습니다.
질문: 디버거?
A: ScratchABit은 정적 분석과 새로운 CPU 아키텍처에 대한 손쉬운 지원에 전념하고 있습니다(Python에서 새 CPU 플러그인을 코딩하기만 하면 됩니다. 몇 시간 안에 초기 결과를 얻을 수 있습니다). 동적 분석은 핵심 기능으로 생각되지 않았으며 이를 즉시 구현할 계획도 없습니다. 그래도 패치는 환영합니다.
Q: 디컴파일러?
A: 심층적인 프로그램 분석, 변환 및 역컴파일을 위한 ScratchABlock이라는 관련 프로젝트가 있습니다. ScratchABlock이 성숙해짐에 따라 일부 기능을 ScratchABit 내에서 (아마도 플러그인을 통해) 사용할 수 있을 것으로 예상됩니다.
Q: 저는 Linux를 사용하지 않습니다. ScratchABit을 어떻게 실행할 수 있나요?
A: 시스템의 에뮬레이터/VM에 Linux를 설치하고 기뻐하십시오.
Q: 필수 스크린샷인가요?
답: 물론이죠: