티스토리 뷰

Programming/Python

mipsHex

Tribal 2018. 6. 20. 13:29

코드 : https://github.com/Tribal1012/mipsHex


목적 : Mips 바이너리의 어셈블리어를 IDA Python을 이용해 C언어처럼 변환시켜, 최대한 어셈블리어를 적게 보고 빠르게 분석할 수 있도록 한다.


사용 방법

  1. IDA를 켜고 mips 바이너리 열기
  2. File - Run Script - hex-ray.py
  3. mips 바이너리 경로의 함수 명과 동일한 이름의 파일 확인
  4. 분석


파일별 설명(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
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31