본문 바로가기

study/악성코드분석&리버싱

IDA Pro 프로그램

728x90

1) idapractice.exe를 IDA 프로그램을 이용하여 연다. 

32비트 파일 실행위한 ida를 실행하고 분석할 파일을 선택합니다.

파일을 열면 어떤 파일을 분석할 것인지 자동으로 선택이 되어 보여줍니다. pe파일임을 자동으로 인식하니 그냥 ok하고 넘어갑니다.

그래프 모드로 보여지는 모습입니다.

2) 그래프모드로 열린 화면에서 텍스트 모드로 변경한다.

이 화면에서 텍스트 모드로 변경하려면 [스페이스바] 단축키를 사용합니다.

이전 그래프 모드로 돌아가려면 동일하게 스페이스 바를 누르면 됩니다.

3) 그래프모드에서 행번호와 명령어 코드를 출력하기 위한 옵션을 설정하시오.

option> General> 로 들어가서 위와같이 설정합니다.

4) 단축키를 사용하여 401D90 주소 위치로 이동하시오.

G를 누르고 401D90을 누릅니다.

5) 그래프 모드에서 화살표 색깔을 보고 무조건 점프, 조건 점프를 찾고 알아보시오.

- 조건점프

cmp eax, 1 : eax와 1을 비교해서 그 값이 같으면 0을 반환합니다. 그러면 jz 가 1이 설정이되어서 loc_401E00으로 이동하게 됩니다. 

yes면 초록색 화살표를 따라 바로 아래로 이동하고, no이면 빨간색 화살표를 따라 밑으로 갑니다. 

- 무조건 점프 (파란색 화살표)

무조건 점프가 되는 부분은 401E0C 입니다. jmp short loc_401DC0 이라는 부분이 무조건점프를 하기위한 모듈입니다.

6) 그래프 모드에서 반복되는 부분을 찾아 확인하시오.

반복되는 부분은 401DB6 주소부분이고, sub_401350부분을 더블클릭하거나 G> 401350 으로 이동하면 됩니다.

이동해서 아래쪽으로 내려와보니 writeFile부분의 반복되는 구간을 화살표를 통해 알아낼 수 있었습니다. 

7) 텍스트 모드에서 실선과 점선을 확인하고 의미를 기술하시오.

8) 현재 코드를 여러가지 graph 모드로 확인하시오.

실선과 점선을 확인해보려면 텍스트 모드로 돌아가야합니다. [스페이스바]

무조건 점프는 실선으로 표시되고, 조건점프는 점선으로 나타납니다. 

반복구문도 아까의 코드를 찾아 더블클릭후 보았습니다. 점선으로 되고있지만 위로 올라가는 것으로 보아 반복구문임을 알 수 있었습니다.

9) 바이트를 "83 EC 18"를 찾으시오.

바이트를 찾기위해서는 단축키 [alt+B]입니다. 저는 맥을 사용하므로 option+B로 하였습니다.

그냥 찾으면 처음 83 EC 18이 나오는 부분을 보여주지만, 전체코드내에서 83 EC 18이 있는 모든 부분을 다보고싶기 때문에 find all occurences를 체크해줍니다.  

83 EC 18에 해당하는 값인 sub esp, 18h 를 사용하는 위치를 다 보여줍니다. 더블클릭하면 해당 부분으로 이동가능합니다.

10) 문자열 윈도우로 단축키를 사용하여 이동하시오.

단축키는 [shift +F12]를 통해 문자열을 확인할 수 있습니다. 

11) 문자열 윈도우에서 검색 단축키를 사용하여 "idapractice.txt"를 찾아보시오.

[alt+T]> 우리가 검색하고자하는 문자열을 입력하면 됩니다.

그럼 이렇게 하이라이팅이 되고 .rdata영역의 403024주소에 있다고까지 확인 가능합니다. 

12) "'C:\idapractice.txt"를 사용하는 데이터 영역(.data)으로 움직인 뒤 xref 기능을 사용하여 코드 영역(.text)으로 이동하시오. 

더블클릭해서 데이터 영역으로 이동하고 옆에 XREF부분을 클릭하면 해당 코드 영역의 미리보기가 뜹니다. 더블클릭을 하면 코드부분으로 이동이 가능해집니다.

또는 filename을 클릭한 뒤에 X를 누르면 해당 영역의 정보를 보여줍니다. 더블클릭하면 코드 영역을 볼 수 있습니다. 

 

* 그래프 아이콘 사용방법 

메뉴창에서 우클릭> Graphs선택,

첫번째 아이콘을 클릭하면 실제로 우리가 보고있는 그래프, 함수를 보여주고 있습니다. 더 깔끔하고 한눈에 보기 쉽습니다. 

전체 프로그램에 대한 함수들의 흐름들을 보여줍니다. 너무 복잡해서 보기 힘들 수 있습니다. 

지금 우리가 있는 401350이라는 함수가 어디를 거쳐서 호출이 되었는지를 보여줍니다. 

현재있는 함수가 호출하는 함수들을 보여줍니다. 우리가 있는 함수는 writefile, createfile함수를 사용하고, 각 __imp_writefile, __imp_createfile을 호출합니다. 

원하는 부분을 지정할 수 있습니다. 보고싶은 부분의 주소를 넣고 ok하면 우리가 보고싶은 부분의 그래프들을 보여줍니다. 

13) CreateFile 함수를 Import 윈도우에서 찾은 후 임포트 영역(.idata)으로 움직인 뒤 xref 기능을 사용하여 코드에서 사용하는 위치(.text)로 이동하시오

import라고 써있는 윈도우를 클릭합니다. 많은 함수들 중에서 검색 단축키인 [alt+t]를 이용하여 원하는 함수를 검색합니다. 이 파일이 존재하는 주소영역으로 이동하기위해서는 함수이름을 더블클릭합니다.

createfilea함수를 호출하는 함수가 있는 부분으로 가기위해서는 createfilea를 클릭해놓고 x를 누르면 정보가 나옵니다. 이 함수는 401350이라는 함수에서 55번째줄떨어진 곳에 있다고 보여주고 있습니다. 

다시 더블클릭하여 실제 createfilea를 호출한 주소인 4013A5로 이동합니다. 

14) C:\idapractice.txt 에 "Hello"라고 문자열을 저장하는 함수의 이름을 "YourWriteFile"으로 변경하시오.

이 부분을 보면 createFileA라는 함수로 c 밑의 idapractice.txt파일을 hfile로 가져오고, 그 핸드값을 가지고 writefile하는 것을 볼 수 있습니다. 그리고 lpbuffer에 있는 것을 씁니다.

이 부분을 실제로 확인하고 싶으면 F5를 통해 c코드로 볼 수 있습니다.

버퍼부분을 클릭해놓고 R을 누르면 문자열로 변경이 되고, 두 부분을 문자열로 바꾸면 'lleh', 'o'가 나옵니다. 거꾸로 읽으면 'hello'입니다. 이 버퍼에 있는 데이터를 v1에 담은 후, 그 v1에 있는 데이터를 다시 desireAccess에 넣습니다. 결국 buffer, v1, desireaccess에 같은 내용이 들어있는 것으로 됩니다.

우클릭> rename global item 혹은 n을 누르고 YourWriteFile_을 추가해서 입력하면 바뀌게 됩니다. 

ida창에서도 바뀐것을 확인하였고, X를 누르고 함수를 호출한 부분도

원래는 sub_401350이라고 되어있던 부분이 YourWriteFile_sub_401350으로 바뀐것을 확인하였습니다. 

15) CALC.exe 파일을 Run레지스트리에 등록하는 함수의 이름을 "CreateRegistryKey"으로 변경하시오.

옆 부분에 create registry key... 라고 적혀있는 것으로 보아 puts 출력 뒤에 나올 것 같습니다. sub_401400을 더블클릭합니다. 

레지스트리 키들이 보이는데 너무 길어서안보입니다.  

subkey를 더블클릭하면 풀로 키 이름을 확인할 수 있습니다.

RegCreateKeyExA를 이용해서 레지스트리의 핸드값을 가져오고 그 값을 가지고 레지스트리에 접근할 수 있습니다. 접근 후 RegSetValue를 이용해서 Value값을 cal.c으로 만들고 데이터는 c:\... \calc.exe로 줍니다.

동일한 내용을 f5를 통해 c언어로 쉽게 볼 수 있습니다. 우리가 원하는 함수이름으로 변경합니다. 

뒤로가기 아이콘이나 x를 통해 이 함수가 호출된 부분으로 이동합니다.

16) 코멘트

RegSetValue쪽에 우클릭> enter comments 또는 세미콜론을 누르고 코멘트를 추가해줍니다. '

728x90
반응형