리버스 엔지니어링/연구

Code Injection 분석 연구

뿔맨 2018. 8. 8. 08:10
반응형
본 작성자는 초급 분석가이며, 많은 피드백 환영합니다.

이번 분석 건은 악성코드 분석은 아니며, Code Injection 기법 관련 분석입니다.
지금까지 분석한 악성코드 대부분은 자식프로세스를 생성하여 WriteProcessMemory 함수를 사용하여 Code Injection을 합니다.
WriteProcessMemory의 Buffer 를 가져와 mem파일을 만들어서 분석을 하였습니다.
그런데 간혹 안되는 경우가 있습니다. 그래서 아래 본문에 그에 관련된 연구? 내용을 한 번 적어봤습니다.

샘플은 GandCrab 4.2.1 입니다.

Code Injection 중 WriteProcessMemory의 Stack 부분이다.

4D5A(MZ)로 실행파일임을 확인하였으며, 특정 코드들이 들어있는 것을 확인할 수 있다.

HexEdit을 불러와 정리를 해 준 다음에 PE정보를 확인하였다.
알 수 없는 EXE 파일이라고 적혀있다.

OllyDbg로 열어보니 시작할 수 없는 파일이라며 에러창이 출력이 되었다.
간혹 이러한 경우가 많다.

여기서 연구방법을 2가지로 나누었다.
  1. PE Tools 프로그램을 사용하여 메모리에 올려서 Full Dump를 뜬다.
  2. 상세분석을 해서 어디서 PE를 불러오는지 확인한다.

  • PE Tools 프로그램을 사용하여 분석

먼저 악성코드를 실행 후에 Suspend를 걸고 PE Tools 프로그램을 사용하여 " Dump Full ..." 를 클릭하여 덤프를 뜬다.

그리고 PE정보를 확인하면 아래와 같이 PE정보들이 출력된다.

MS Visual C++ 로 만들어지는 프로그램이라고 알려주고 있다.

정상적으로 올라가져 있는 것을 볼 수 있다.

  • 상세분석을 통한 PE확인
상세분석을 하여 PE확인을 해보겠다.

먼저 VirtualAllocEx 함수에 BP를 설정한다. 그 이유는 PE를 쓰기위해 공간을 할당받기 위함이다.

1010000 주소에 빈 공간이 생겼다.

Loop를 계속 돌다보면 특정 구간에서 또 Loop를 계속 돌면서 REP MOVS 명령어를 사용하여 DUMP 창에 하나 씩 코드들이 적히는 것을 확인할 수 있다.
Loop를 빠져나오게 되면 모든 코드들이 적혀지며 다시 Loop를 돌게된다.

위 Dump 창의 코드들은 난독화 코드로 확인된다.

다시 LOOP를 돌게되면 아래와 같이 난독화 된 코드들을 복호화를 시키는 Loop를 만나게 된다.

한 줄씩 트레이싱 해보면 레지스터 끼리 연산을 하면서 복호화 작업을 하는 것을 확인할 수 있다.
복호화 작업을 마치게 되면 아래와 같이 실행파일임을 확인할 수 있다.

PE정보가 MS Visual C++로 빌드가 되어있다는 것을 알려주고 있다.

그리고 아래와 같이 OllyDbg에 정상적으로 올라가지는 것을 확인할 수 있다.


  • +번외 쉽게 분석하는 방법
쉽게 분석하는 방법을 알아보겠다.
Loop를 도는 중간 중간에 함수들을 호출하는 Call [EBP + ??] 들을 확인 했었다.
이 Call 문들을 전부 BP를 설정해서 PE가 쓰이는 것을 확인할 수 있다.
정확히 말하자면 BP가 실행되면 이미 PE복호화 작업이 끝난 상태이기 때문이다.

분석을 해 보자면
  1. VirtualAllocEx 함수에 BP설정
  2. 함수를 호출하는 Call [EBP + ??]문 들을 BP 설정
  3. F9 실행

아래 그림은 Loop 중간 중간에 함수를 호출하는 Call 문들을 전부 BP 설정 한 것이다.


감사합니다.

반응형

'리버스 엔지니어링 > 연구' 카테고리의 다른 글

NullSoft GandCrab 4.3 (Thread Injection)  (0) 2018.10.09
GandCrab 4.3 Javascript 분석 -2  (0) 2018.09.16