본문 바로가기

Research/Etc

Hex-rays Decompilation failure




디컴파일을 시도할 때 아래처럼 IDA 가 징징거리는 경우가 있다.



TL;DR
call analysis failed 에러가 난 주소의 함수를 디컴파일하고 다시 오세요.









항상 '어 디컴파일이 안되나 보네 ?' 하고 넘어갔던 에러인데,
최근에 codegate 2018 boom 문제를 풀다가 이제서야 알게 된; 내용이라 기록한다.

문제 풀이에 키가 되는 주요 함수 func1::hbc30.. 을 디컴파일하려 하니 나온 메시지로, 

'0x55555556511B 주소에 있는 인스트럭션이 뭔말인지 모르겠어...' 이다.

저 주소를 직접 찍어가 보면,


call 호출부임을 알 수 있다. 함수 분석에 실패했으니. func5::h0a9... 내부에서 다시 디컴파일 호출해 보면,



'0x55555556511B 주소에 있는 인스트럭션이 뭔말인지 모르겠어...' 
'0x55555556889F 주소에 있는 인스트럭션이 뭔말인지 모르겠어...'  로 바뀌었다.
다시 한번 트레이싱 해 보면,


또 함수 호출부가 나오는 것을 알 수 있다.

해당 함수인 func13::h25577... 를 디컴파일하면, 이번엔 제대로 동작한다.



헥스레이가 analyses failed 였던 함수를 분석 성공했으니,

callee 함수인 func5::h0a9... 의 디컴파일을 재시도해 보면



디컴파일이 되는 걸 확인할 수 있다.


이렇게 역참조로 다시 찾아올라가서, func1::hbc30.. 를 디컴파일 하면



처음에 분석 실패했던 함수도 디컴파일 성공하게 된다.







정적분석 하다가 그 함수를 모르겠다고 하는 경우 << 

call depth 가 많은 경우 <<

이런 에러가 뜨는 것이지 않을까 예측들 해주셨(?)다.



레퍼런스

- http://r00tus3r.blogspot.kr/2018/02/codegate-ctf-2018-preliminary-boom.html

- null2root 그룹 loossy 님





'Research > Etc' 카테고리의 다른 글

ws filter  (0) 2016.09.06
[github] syncing a fork - fork 한 리파지토리 업데이트 하기  (0) 2015.07.16
입출력 리다이렉션  (0) 2015.04.06
설치된 드라이버 살펴보기  (0) 2013.12.10