Try Attack/Reverse Engineering[basic]

악성코드와 리버싱

D4tai1 2018. 10. 9.

1. 컴파일 시 주소변경

- 컴파일시 이미지베이스가 변경되도록 하는 방어기법이 있다.

 

2. 컴파일러

- 어셈블리어로 코딩할 경우에는 스택에 하나씩 push, pop 한다.

- 그러나 실행파일을 디스어셈블 해보면 스택포인터를 한 번에 잡아놓고 빈 공간에 하나씩 넣는다.

- 즉, 변수를 하나씩 push하지 않는다.

 

3. Calling convention(콜링컨벤션)

- 함수호출규약이라고 부른다.

- 인자넘기는 방법을 말한다.

- 넘기는 순서는 오른쪽에서 왼쪽순서이다.

 

4. 악성코드와 리버싱

- 악성코드는 로직을 분석하고 리버싱은 흐름을 분석한다.

- 흐름을 분석하지 못하도록 하는 것을 안티리버싱이라 한다.

 

1) 안티리버싱

 [1] 이미지, 베이스주소가 변경되도록 한다.

 [2] 해커가 실행파일을 변조하기 때문에 변조하지 못하도록 개발자가 안티리버싱 기술을 사용한다.

 [3] 바이러스는 설치하는 사람이 희생자이기 때문에 만드는 사람이 자기꺼를 열어 분석하지 못하도록 해커가 안티리버싱 기술을 사용한다.

 [4] [2]와 [3]을 볼 때 안티리버싱 기술은 입장이 바뀌면 누구나 사용하는 것으로 볼 수 있다.

 [5] 실행압축(Packing)

  - 보통 압축을 풀어야 실행이 가능하나 압축을 풀지 않고 바로 실행하는 것을 실행압축이라고 한다.

  - 실행파일의 내부에 압축해제코드를 포함하고 있다.

  - 그래서 실행요청 시 메모리에서 압축을 해제 후 실행시킨다.

  - 실행 압축된 파일도 PE파일이다.

  - 악성코드의 분석을 불가능하도록 하기 위해 packing을 사용한다.

  - unpacking을 할 줄 알아야 악성코드를 분석하고 시스템을 보호할 수 있다.

 

5. 기본분석

- cdecl 호출방식의 c소스

 

- 가독성이 떨어지므로 [소스코드 영역 우클릭 - Analysis - Remove analysis from selection(Ctrl + Backspace)] 설정

 

- 소스코드를 가독성이 좋게 현재 스택포인터 기준으로 볼 수 있다.

 

- [스택영역 우클릭 - Addressing - Relative to EBP] 설정

 

- 스택영역이 절대주소 기준에서 EBP 기준으로 표시된 것을 확인할 수 있다.

 

- 메인함수이다.

[1] "start main"을 스택에 저장한다.

[2] 401500주소에 가서 출력한다.

[3] 현재 스택포인터에서 4만큼 더한 공간에 8을 넣는다.

[4] 현재 스택포인터에 10을 넣는다.

[5] push eip        ; 도착 후 실행할 주소를 저장

    jmp 401529    ; 호출한 함수의 주소로 이동

 

[6] push ebp

[7] mov ebp, esp    ; [6], [7]은 함수의 프롤로그이다.

[8] sub esp, 10       ; 현재 스택포인터에서 0x10(16)바이트만큼 공간을 확보한다.

[9] 두 수를 더해서 eax에 저장한다.

[10], [11] 은 컴파일러의 설계가 이러하다.

[12] mov esp, ebp / pop ebp 로 함수의 에필로그이다. 

[13] ret명령어로 pop eip / jmp eip 가 실행되며 다음실행할 주소로 복귀한다.

 

- 이 그림은 위 소스의 이해를 돕기위해 esp를 52라고 가정했을 때

- [esp+4] 즉 56번지에 8을 저장한다.

- [esp] 즉 52번지에 10을 저장한다,

- call 시 48번지에 다음 실행할 주소를 저장한다.

- 새로운 함수에서 프롤로그를 실행한다.

- [push ebp / mov ebp, esp] 44번지에 기존 ebp를 저장 후 현재 스택포인터를 기준주소로 저장한다.

- [ebp-4] 즉 40번지에 연산결과를 저장한다.

- 에필로그를 실행하고 복귀한다.

 

 

- stdcall 호출방식의 c소스

 

- 빨간네모를 보면 사용한 스택 8바이트만큼을 복원시키고 복귀한다.

 

'Try Attack > Reverse Engineering[basic]' 카테고리의 다른 글

[crackme2] abex' 2nd crackme 풀이 및 복원  (0) 2018.11.07
[crackme1] abex' 1th crackme 풀이 및 복원  (0) 2018.11.07
전략  (0) 2018.09.16
올리디버거  (0) 2018.09.16
리버싱에 필요한 도구  (0) 2018.09.09

댓글