본문 바로가기

IDA Python Search Flags 정리 IDA Python Search Flags 정리 ida_search 모듈의 variables 임. 변수 Bit 의미 SEARCH_UP 0 search towards lower addresses 위로 서치 SEARCH_DOWN 1 search towards higher addresses 아래로 서치 SEARCH_NEXT 2 for other find_.. 반복문 돌릴 때 NEXT 옵션 안주면 처음 것만 반복됨. SEARCH_CASE 4 case-sensitive search (case-insensitive otherwise) 대소문자 구분 여부 SEARCH_REGEX 8 regular expressions in search string (only supported for txt search) 정규 표현식 ..
IDA Python Raw Data 접근 IDA Python Raw Data 접근 idc에서 쓰던 걸 그대로 쓰면 된다. idc.Byte(ea) idc.Word(ea) idc.Dword(ea) idc.Qword(ea) idc.GetFloat(ea) idc.GetDouble(ea) 예시 생략.
IDA Python 찾기(immediate, text, code 등) IDA Python 찾기(immediate, text, code 등) ida_search 모듈 도큐먼트를 보면 find 관련 함수들이 많이 있다.인자들만 봐도 사용법이 감이 올 것이다.몇가지만 사용해 보자. 1) Immediate 값 검색ida_search 모듈의 find_imm()함수를 이용.ex)print find_imm(MinEA(), SEARCH_DOWN, 0xff) 해석)MinEA() : base주소부터SEARCH_DOWN : 아래 방향으로 서치 하면서0xff : 0xff 값을 찾겠다. 2) Text 검색 ida_search 모듈의 find_text()함수를 이용. ex) string = "error"start = MinEA() #base addrend = MaxEA() #end addr whi..
IDA Python 바이너리 패턴 검색 IDA Python 바이너리 패턴 검색idc모듈의 FindBinary() 함수를 이용. FindBinary(ea, flag, searchstr, radix=16)ea : 검색 시작 주소flag : 검색 방향, 대소문자 구분, 검색 과정 생략 등의 flag (여러개 중첩 가능)searchstr : 찾고자 하는 문자열radix : 이건 뭐 무시해도됨. 16이 기본 값. Flags0 : SEARCH_UP1 : SEARCH_DOWN2 : SEARCH_NEXT4 : SEARCH_CASE #대소문자 구분해서 검색8 : SEARCH_REGEX16 : SEARCH_NOBRK32 : SEARCH_NOSHOW #검색 과정 생략64 : SEARCH_UNICODE #유니코드로128 : SEARCH_IDENT256 : SEAR..
IDA Python 상호참조 IDA Python 상호참조: 데이터/함수가 어디에서 쓰이는지 파악하여 활용. IDA Script는 자동화 분석이 목적이다.취약점을 유발시킬 수 있는 함수를 알고 있을 때1) 그 함수를 호출하는 부분의 주소를 쭉 출력2) 그 함수를 호출하는 부분에 색칠로 표시. --> SetColor() 함수 사용.등의 작업을 미리 해두면 분석 시 좀 더 편하다. idautils 모듈의 CodeRefsTo(ea, flow) 함수를 통해 코드 상호참조를 얻을 수 있다.(CodeRefsTo()는 object generator) 예시)취약점을 많이 유발시키는 memcpy 함수를 call 하는 부분을 다 찾아보자.memcpy_addr = idc.LocByName("memcpy")for addr in CodeRefsTo(memc..
IDA Python 함수 타입 IDA Python 함수 타입 함수 타입 ( Function Type )(하나의 함수가 여러 속성을 가지는 것도 가능) FUNC_NORET 리턴 명령어를 사용하지 않는 함수 FUNC_LIB 라이브러리 코드 식별 FUNC_STATIC 정적 함수로 컴파일된 함수 FUNC_FRAME 프레임 포인터(ebp)를 사용하는 함수 FUNC_BOTTOMBP ebp가 스택 포인터와 일치하는 함수 FUNC_HIDDEN 숨김 상태에 있는 함수 FUNC_THUNK thunk 함수들을 찾아내는 식별자 다시말해, (단순히 다른 함수로 점프하는 함수)
IDA Python 피연산자 타입 확인 IDA Python 피연산자 타입 확인 idc 모듈의 get_operand_type(ea, n) 함수로 피연산자의 타입을 확인할 수 있음 피연산자(Operands) Type o_void 오퍼랜드 없음 o_reg 오퍼랜드가 레지스터 o_mem 메모리 주소 o_phrase 베이스 레지스터와 인덱스 레지스터로 구성된 경우 o_displ 레지스터와 이동 범위로 구성된 경우 o_imm immediate 값
IDA Python 특정 함수 디스어셈블링 IDA Python 특정 함수 디스어셈블링 주소를 받아 주소에 해당하는 어셈블리 명령어를 반환받는 함수는 idc.GetDisasm() 함수이다.( idc 모듈의 GetDisasm 함수 검색 ) 간단하게 확인해보자. 현재 커서의 위치를 반환하는 here() 함수를 호출하여 그 위치의 어셈블리 명령어를 확인해 보자. 스크립트 작성. 실행 결과ida에서 본 어셈블리 명령어와 동일하게 잘 나온다. ==> 잘 됨 ! 그렇다면 자동화를 한다고 생각해보자. 코드를 훑다가 내가 원하는 구문, 상황이 나왔을 때 명령어가 속한 함수 전체를 디스어셈블링 해서 출력하도록 할 수도 있다. //쭉 훑으며 원하는 상황, 구문 검사 루틴 대신 지금은 here()로 대체하고//특정 함수 디스어셈블링이 잘 되는지 확인. ea = her..