본문 바로가기
Security/Reversing

KeyLogger 분석

by jino22 2021. 9. 27.

틀린 부분이 있다면 언제든지 댓글 남겨주세요! 


CodeCure 동아리_KeyLogger 프로그램 작성 및 분석

 

1. 개요

File Name KeyLogger.exe
File Size 51,712 byte
File Type Win32 EXE
분석 도구 x32dbg / Visual Studio 2019

 

2. 프로그램 빌드 및 동작

Visual Studio을 이용하여 코드 작성 후 Key Logger 프로그램 keyLogger.exe을 빌드한다.

GetAsyncKeyState API를 이용하여 현재 키의 상태를 알아온다.

이전에 키를 누른 적이 없고 현재 시점에서 눌리지 않은 경우 0을 반환하고 눌린 경우 0x8000을 반환하며,

이전에 키를 누른 적이 있고 현재 눌리지 않은 경우 1을 반환하고 현재 눌린 경우 0x8001을 반환한다.

반환 값의 자료형이 short이므로 -32767= 0xFFFF 8001임을 이용한다.

 

Shift key 혹은 control key가 눌린 경우 각각 ‘[SHIFT]’, ‘[CONTROL]’ 이 출력되며, 그 외의 키가 눌린 경우 해당 문자를 출력하도록 구현하였다.

동작 시켜보면 프로그램 실행 중 입력된 모든 키가 key logging 되어 출력되는 것을 확인할 수 있다.

keylogger.cpp
프로그램 동작

 

3. 코드 분석

x32dbg에서 keylogger.exe파일을 열어 상세 분석을 진행한다.

메인 함수로 진입해보면 keylogger 함수를 call하는 코드로 간단하게 되어있다.

핵심코드를 찾기 위해 '[SHIFT]' 문자열을 찾아가본다.

진입점
문자열 찾기

VK_SHIFT=0x10, VK_CONTROL=0x11이므로 반환 값에 따라 값을 비교하여 같으면 분기하지 않고 해당하는 문자열을 출력하지만 같지 않으면 다음 문자열 비교를 위해 분기한다.

+) https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes

10과 11 두 숫자와 비교해서 모두 해당하지 않는 경우 해당 문자열은 ‘key:’ 문자열과 함께 문자 그대로 출력한다.

shift  확인
control  확인
그 외 문자 출력

위의 코드는 keylog 값에 따른 결과를 출력해주는 함수이다.

이 함수는 key 입력이 들어온 경우에 진입하게 되는데, 이 함수로의 진입을 위해 key 입력을 확인하는 함수는 [그림 8]의 코드이다.

GetAsyncKeyState API를 이용하여 키 입력을 확인하고 입력이 있는 경우 keylog 함수로 이동하게 된다.

이 loop문은 al의 값이 255 이하일 때까지 반복되며, 255가 되면 loop문을 빠져나와 7E2C98주소로 분기한다.

이 부분은 while문에 해당하는 loop로 프로그램이 종료될 때까지 계속 반복된다.

LOOP 문

 

728x90
반응형

'Security > Reversing' 카테고리의 다른 글

디버깅 탐지 방법  (0) 2021.10.15
[CodeEngn] Challenges Basic RCE L17, L18, L19  (0) 2021.10.14
Debugger software BP의 원리  (0) 2021.09.08
relocation과 .reloc섹션  (0) 2021.08.28
[CodeEngn] Challenges Basic RCE L13, L14, L15, L16  (0) 2021.08.22

댓글