본문 바로가기

IDA7

아이다(IDA)에 MS 심볼 서버 연동하기 아이다(IDA)로 윈도우 바이너리를 리버싱하게 되면 Functions window에서 함수의 이름이 보이지 않고 'Sub_주소' 으로 보이게 된다.(다음 화면은 winmine.exe를 open한 화면) 이러면 분석이 어려우므로 함수의 이름을 보기 위해 MS 심볼 서버와 연동을 시켜야 한다. MS 심볼 서버 : MS에서 디버그 심볼을 자동으로 다운로드 받아 디버깅 시 디버그 심볼도 같이 포함되어 디버깅을 편하게 할 수 있게 해준다. 콜스택이 제대로 보여지게 된다. (참고 : 심볼 서버의 기능을 요약하면 '덤프 파일이 생길 때의 환경을 재현하기 위해서 필요한 심볼들을 자동으로 다운로드하는 것'이다) Determina PDB Plugin for IDA Pro 라는 IDA 플러그인을 이용하면 IDA에서도 디버그.. 2009. 11. 6.
아이다(IDA)에 Hex-Ray 연동 IDA에 Hex-Ray라는 디컴파일러 플러그인을 장착하면 분석에 가속도를 붙일 수 있다. (참고 : IDA의 플러그인은 openRCE에 잘 정리되 있다.(OllyDBG의 플러그인도 이사이트다)) http://www.openrce.org/downloads/browse/IDA_Plugins hex-ray 다운 : http://dakuo.tistory.com/23 hex-ray를 설치하시고 IDA에서 F5를 누르시면 디컴파일된 C언어 코드를 볼수 있습니다. C언어 소스를 작성한 후 hex-ray로 디컴파일 한 후 각각의 소스를 비교해보면 코드가 정확하게 일치하는 것은 상당히 비슷하다는 걸 알수가 있다. 2009. 11. 6.
아이다(IDA)의 크로스레퍼런스 기능 - 지뢰찾기 맵핵 크로스레퍼런스 : 함수가 사용된 곳을 교차하여 참고할 수 있게 표시를 해주는 것 (참고 : 어떤 함수가 어디에서 또 쓰였는지를 찾기 쉽도록 표시를 해주며 Win32 API에 대해서는 심볼 함수 이름까지도 표현해준다. IDA의 가장 강력한 기능이라고도 할 수 있다) 지뢰찾기(winmine.exe)를 크로스레퍼런스 기능을 이용해 해킹해보도록 하겠다. 'C:\WINDOWS\system32\winmine.exe'를 IDA로 open한다. (참고 : 윈도우 기본 프로그램을 open할 경우 사용할 수 있는 디버거 정보가 담겨있는 심볼 파일을 IDA가 자동으로 연결하여 자세한 정보를 표현해준다. 설정법 : http://dakuo.tistory.com/entry/아이다IDA에-심볼-파일-연결하기) 함수 목록을 살펴본다.. 2009. 11. 6.
아이다(IDA)의 Debugging - IF문 분석 C언어로 if문을 컴파일한 것을 IDA로 분석해보자. #include void main() { int a = 3; int b = 5; if( a > b) { printf(" a 가 크다 "); } else { printf(" b 가 크다 "); } } IDA 그래프 기능으로 본 해당 소스의 흐름이다. 가운데 지점에서 빨간선과 초록선으로 분기하고 각각의 일을 실행한 후 하나로 합쳐지며 프로그램이 종료된다. .text:00411390 push ebp 에 breakpoint를 설정한다. 디버그 모드로 전환(F9)하여 분석을 해보겠다. 다음은 Main함수이다. .text:00411390 main proc near ; CODE XREF: j_mainj .text:00411390 .text:00411390 var_.. 2009. 11. 6.
아이다(IDA)의 Debugging - FOR문 분석 C언어로 for문을 컴파일한 것을 IDA로 분석해보자. #include int main(void) { int i = 0; int result = 0; for ( i ; i 2009. 11. 5.
아이다(IDA)의 Debugging - Stack 분석 IDA의 디버깅을 통한 스택의 Stack 분석 분석해볼 프로그램은 IDA의 사용법을 알아보기 위해 예제로 썻던 것을 계속 쓰겠다. 다시 한번 설명하면 func( ) 함수에 세 개의 값을 파라미터로 전달하고 그 값들의 합을 리턴하는 프로그램이다. #include func(int a, int b, int c) { return a+b+c; } int main(void) { int sum; sum = func(1, 2, 3); return sum; } 프로그램이 실행되기 전의 Stack이다. ESP, EBP의 위치를 살펴본다. .text:00401060 push ebp : EBP가 가리키는 곳이 SFP(Saved Frame Pointer)로 변하고, 그 윗부분이 RET로 바뀌며 스택에 EBP값 12FFC0h값을.. 2009. 11. 4.