티스토리 뷰
코드 : https://github.com/Tribal1012/mipsHex
목적 : Mips 바이너리의 어셈블리어를 IDA Python을 이용해 C언어처럼 변환시켜, 최대한 어셈블리어를 적게 보고 빠르게 분석할 수 있도록 한다.
사용 방법
- IDA를 켜고 mips 바이너리 열기
- File - Run Script - hex-ray.py
- mips 바이너리 경로의 함수 명과 동일한 이름의 파일 확인
- 분석
파일별 설명(Proto version)
- hex-ray.py : main 함수
- base
- asm.py : 어셈블리의 기본적인 정보를 담는 class 선언
- asmutils.py : 어셈블리의 기본적인 정보를 변경 또는 뽑아내고자 할 때 사용
- error.py : 오류 메시지 출력, assert 사용
- function.py : hex-ray를 통해 함수를 생성하는데 필요한 정보를 저장
- Iasm.py : 특정 어셈블리에 맞는 메소드를 호출하기 위한 외부로 공개되는 인터페이스
- register.py : 레지스터 정보를 담는 class 선언
- mipsHex
- asm_type
- all.py : import를 축약하기 위해 사용
- mips_asm_arithmetic.py : mips의 사칙연산 어셈블리어
- mips_asm_bits.py : mips의 비트연산 어셈블리어
- mips_asm_branch.py : mips의 분기 어셈블리어
- mips_asm_etc.py : 종류를 정의하기 어려운 어셈블리어 모음
- mips_asm_jump : mips의 강제 분기 어셈블리어
- mips_asm_load : mips의 레지스터에 읽어들이는 어셈블리어
- mips_asm_move : mips의 레지스터간 값 이동 어셈블리어
- mips_asm_set : mips의 상황별 값 설정 어셈블리어
- mips_asm_store : mips의 메모리에 쓰는 어셈블리어
- mips_asm : mips 어셈블리의 기본적인 정보를 담은 class 선언, base.asm.py를 상속
- mips_asmutils : mips 어셈블리의 utils 제공, base.asmutils.py를 상속
- mips_function.py : mips 전송 hex-ray를 통해 생성되는 함수에 대한 정보를 저장하기 위해 사용, base.function.py 상속
- mips_Iasm.py : mips의 타입별 어셈블리를 확인하여 메소드 호출 인터페이스 제공, base.Iasm.py 상속
- mips_register.py : mips에서 사용되는 레지스터 관리, base.register.py 상속
주의 사항
- Exception 발생시 IDA를 한번 끈 후, Exception을 수정해야 한다. 안 끄면 수정해도 적용이 안 된다.
- 분기의 흐름을 따르지 않고 함수의 시작과 끝을 그대로 따라가기 때문에 완전 신뢰하지 말고 주석으로 나오는 내용을 검토하는게 좋다.
- argument register의 내용만을 인자로 참고하기 때문에 Stack에 저장된 인자는 체크하지 못 한다. 인자가 많은 함수의 경우, 함수 호출 전에 var_로 시작하는 지역 변수에 저장되는 값들이 있는데 이 값이 인자이다.
'Programming > Python' 카테고리의 다른 글
idapython 스크립트 모음 (0) | 2018.06.26 |
---|---|
'NoneType' object is not iterable 오류 해결 방법 (0) | 2018.06.20 |
python errno 사용 (0) | 2018.01.20 |
Python hexdump 구현 (0) | 2017.10.17 |
Python Network Fuzzer 기본 코드 (0) | 2017.10.17 |
댓글