IDA 간단 사용법.

홈 > 커뮤니티 > 보안 정보 게시판
보안 정보 게시판

IDA 간단 사용법.

1 ddddh 40 12650 3
img.png

설치 후  바탕화면에 32비트, 64비트 바로가기 링크 파일 2개가 생겼을겁니다. 

분석하고자 하는 대상의 바이너리(파일)이 몇 비트 대상으로 컴파일 되었는지에 따라 결정되는 겁니다.

 

 

 

img.png

예를들면, 컴파일 시 위 처럼 x86 버전으로 빌드하였을 경우 ida 32비트 바로가기를 사용해 주시면 됩니다. (반대인 경우 x64)

대상 파일의 아키텍쳐를 모르신다면 그냥 x64로 열어보면 됩니다. (드래그앤드롭으로 바로가기 아이콘에 바이너리를 넣으시면 편합니다)

 

img.png

x86 아키텍쳐인 경우 "Portable executable for 80386 (PE)"라고 나옵니다.

img.png

 

x64 아키텍쳐인 경우입니다.

 

 

 

 

img.png

Ok 버튼을 누르고 대상 바이너리를 IDA로 열었을 때 왼쪽 "Function window" 창이 있습니다. "Function Window"에서 sub_XXXXXXXX으로 네이밍된 함수들은 IDA에서 자동으로 바이너리를 파싱해서 만들어준 겁니다.

대상 바이너리의 심볼이 살아있을 경우 함수 이름이 제작자가 네이밍한 이름으로 설정되지만 웬만해서는 심볼이 다 죽어있습니다... Win API들은 패턴기반으로 IDA에서 심볼을 살려줍니다! 그나마 다행이죠.

 

 

 

 

'''''' ! ! ! 

img.png

대상 바이너리 크기가 클 경우 파싱하는데 시간이 좀 걸릴 수 있습니다. 왼쪽 하단에 숫자 같은게 올라가거나 하면 파싱 중이니 잠시 기다려주세요.

'''''' ! ! !

 

자! 이제부터 시작입니다.

IDA의 hex-ray가 임의 코드(Pseudocode)를 지원해주지만 분석하고자 하는 함수를 찾지 못하면 쓸모가 없죠.

 

지금 Function Window 창의 "start"가 프로그램이 시작될 때, 메모리에 올라올 때 제일 처음 실행되는 진입점이라고 보시면 됩니다. 하지만 보통 여기를 분석하실 필요는 없으십니다.

해당 start 부분은 프로그램이 메모리에 올라와서 정상적으로 실행이 되도록  이니셜라이징 하는 부분이기 때문입니다. 즉, 개발자가 직접 건드리는 부분이 아니게 때문에 굳이 볼 필요는 없다 이 말이죠.

 

그렇다면 이제 Main 함수는 어디서 실행되는가 궁금하실 겁니다. 이 부분은 start를 잘 살펴보면 알아낼 수 있습니다. 

 

 

    --->img.png

start 를 잘 살피어 보면 보시는 바와 같이 call, call, call, call, 을 연속으로 하며 인자를 레지스터에 담아(x64 기준 기본 인자 전달방법 __fastcall ) 메인 함수를 호출하는 부분이 보입니다. 


img.png

사실 지금 심볼이 살아있어서 __p__argc, __p__argv라는 함수명이 제대로 보이는거라 실전은 더 어려울 수 있으며, x86 architecture일 경우 push로 인자를 전달하기 때문에 위 사진과 다소 차이가 있을 수 있습니다. 

 

음.. 사실 컴파일러 및 버전, 사용한 언어 등에 따라 start 부분에서 main 함수로 까지 등 다소 많이 차이가 나서 원하는 핵심 루틴은 찾기 매우 어려울 겁니다. 경험이 필요한거죠...

 

 

그래서 야매[?]가 조금 필요합니다. IDA에서 Ctrl + 1 을 누르시면 Quick View 창이 뜰겁니다.

 

img.png

 

 

여기서 Strings를 눌러주십시오. 바이너리 내의 문자열을 탐색해 주는 기능입니다.

 

 

 

img.png

img.png


여기서 Setup... 을 눌러주신 후 탐색할 스트링 타입에 전부 v 해주면 됩니다... 그 후 다시 재탐색 될 때 까지 기다리시면 됩니다.


img.png

느낌있게 생긴 원하는 문자열이 보이면 더블 클릭을 해줍니다. 더블 클릭시  IDA View 창으로 넘어갈 수도, Hex View 창으로 넘어갈 수도 있습니다. 이전에 어떤 창에 있었느냐에 따라 다르지만 Default로 IDA View 창으로 넘어가집니다.

 


img.png

IDA View 창으로 넘어가졌을 경우 IDA가 미리 문자열을 네이밍 시켜놨습니다. "aKey0x08x"

저 네이밍된 변수?를 클릭 후 x를 누르시면 External Reference 기능을 이용할 수 있습니다.  w000w

img.png

IDA의 강력한 기능 중 하나인 외부참조(External Reference) 기능입니다. 어디서 이 문자열을 사용하는지 알 수 있는거죠.

문자열 외의 전역변수들도, 지역변수들도 (함수내에서만) 가능한 기능입니다.

img.png

자 이제 OK 버튼을 누를경우 사용되는 곳으로 이동이 됩니다.

 

이제 나왔습니다... 제일 필요하고 원하는 기능 Hex-ray ... tab 키나 f5를 눌러주시면 됩니다.

 

img.png

 

 

짠, IDA Hex-ray에서 임의코드를 주었습니다. 실망하실 수 있지만 사람이 어느정도 분석할 정도는 됩니다.

 

현존하는 C/CPP 디컴파일러 중 가장 강력한 툴이 hex-ray라서 다른 툴을 찾으셔도 더 안좋거나 만족스럽지 못하실겁니다.

또한, Hex-ray는 함수만을 디컴파일 할 수 있습니다. 즉, 함수 영역이 존재하는, 함수만의 Stack Frame이 할당되는 곳만 가능합니다.

 

함수 프롤로그 / 에필로그 부분을 예를들어 보겠습니다.

push ebp            // 이전 함수의 stack base pointer backup

mov ebp, esp     // 스택 최상단(esp)을 새로운 stack base pointer로 할당. (새로운 함수영역을 할당하겠다는 의미)

sub esp, 0x40    // 이 함수에서는 0x40만큼의 스택 공간이 필요함. (함수 공간 확장)

.

.

.

.

.

leave                    // 호출되기전의 base pointer로 복귀.

ret                         // 호출되기전 다음 주소로 이동 (계속하여 진행)

 

에필로그는 언어, 함수, 컴파일러 최적화 옵션 등 마다 달라지긴 하지만 이렇게 함수가 시작되어서 정상적으로 끝 마쳐 져야지 hex-ray가 디컴파일을 할  수 있게됩니다.

이것또한 hex-ray의 한계라고 볼 수 있죠..

 

물론 여러가지 방법?을 통해서 분석을 할 수 있긴합니다만... 역시 상황에 따라 다르기 때문에 그 상황에 놓여 봐야지만 알 수 있을것 같네요.


 

도움이 되셨기를!!!!

 

40 Comments
1 봉달샘123 01.22 20:52  
상세한 자료 감사합니다 고맙습니다
1 베르 2023.06.06 15:09  
대박 입니다 좋은 자료 감사합니다!

Congratulation! You win the 2 축하드립니다! 당첨되셨어요~!

1 COOL7372 2023.04.11 12:15  
대박 입니다 좋은 자료 감사합니다!
3 초보해커 2022.06.12 22:38  
좋은 정보 감사합니다
1 글을남기면고소 2022.03.11 23:37  
I don't know how i...
1 코알라찡 2021.11.12 17:23  
감사합니다 사진 잘 보여요
3 Shdlem 2021.10.14 11:20  
마침 아이다 공부중이였는데 감사합니다
1 bitbit 2021.09.25 14:01  
오오 좋은 정보 감사합니다
1 Kkaqqq 2021.08.21 20:37  
감사합니다!
1 루인 2021.08.14 23:19  
와 더 공부해야겠네여
3 Jaedy 2021.08.07 18:40  
좋은자료 감사합니다!
3 Jaedy 2021.05.16 23:35  
감사합니다~
1 Myster 2021.03.14 08:15  
Idapro and DnSpy are vital in reversing Android apps. Good stuff
3 aa22s1 2021.03.11 12:32  
정보 감사합니다
5 킹왕짱 2021.01.31 14:35  
많은 도움이 될 것 같습니다
감사드립니다
2 nz3ro 2021.01.23 17:40  
감사합니다.
1 다이스 2020.12.19 23:31  
좋은 정보 감사합니다.
1 이알 2020.11.24 19:15  
감사합니다!!
1 은이 2020.11.13 21:15  
먼가 복잡하지만 도전
1 킁컹이 2020.10.25 17:10  
좋은정보 공유 감사합니다 잘쓸게요
28 이마로 2020.09.15 16:09  
자료감사합니다
2 붉은앙마 2020.09.11 15:54  
좋은 정보 감사합니다.
1 fioshd39 2020.09.09 14:51  
정보감사합니다.
1 fioshd39 2020.09.09 14:42  
좋은 자료감사합니다
1 rotceto 2020.09.09 11:54  
자료 감사합니다
4 blingbling 2020.08.31 23:32  
자료 감사합니다.
1 나난논가다 2020.08.29 14:19  
감사합니다.
1 김고로 2020.08.17 18:40  
소중한 사용법 안내 감사드립니다!
1 KDNF 2020.08.17 16:58  
감사합니다.
2 킹덤bk 2020.08.17 02:23  
감사합니다.
1 지숭이 2020.08.16 02:40  
정보감사합니다
4 쿨록 2020.08.09 17:07  
감사합니다!
2 linnewbie 2020.08.04 22:56  
감사합니다!!
1 dasd12 2020.08.04 15:41  
감사합니다!
3 hykim73 2020.07.26 02:26  
자료감사합니다
2 You012 2020.07.20 01:24  
lib 파일 덤프 할때는 역시 IDA가 최고인 것 같아요!!
2 간식마렵다 2020.07.17 20:04  
감사합니다.
4 가즈아가차 2020.06.30 13:40  
자료감사합니다!
아쉽게도 사진이엑박이네요ㅠㅠ
1 ddddh 2020.06.30 13:42  
사진 다 엑박뜨나요?
1 ddddh 2020.06.30 13:43  
아 ㅋㅋ 사진 다 복붙했더니 주소가 고대로 남아졋네여 ㅠ