본문 바로가기
Security/Reversing

Abex crackme #2 / ollydbg 단축키

by jino22 2021. 1. 25.

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

 

Abex crackme #2  문제 풀이

crackme2.exe
0.02MB


 

이 예제는 사용자가 입력한 이름과 관련 있는 일련번호를 찾아내는 것을 목적으로 하는 프로그램이다.

우선 프로그램을 실행해보면 0x00401238 (entry point)에서 멈췄다가 다시 F9로 실행하면 메인 함수인 ThunRTMain함수에서 실행이 멈추고 다음과 같은 메시지 창을 띄운다.

처음 프로그램 실행 화면

메시지 창에 값을 입력했을 때 나오는 결과는 크게 3가지로 보인다.

일련번호 오답, 정답, 이름 길이 부족.

 

프로그램의 길이가 길어 처음부터 살펴보기 어려울 땐 프로그램을 실행시켰을 때 뜨는 메시지에 포함된 문자열을 검색해서 그 부분부터 확인하는 방법을 사용하면 좋다.

ollydbg에서는 search for > all referenced strings에서 문자열을 선언한 부분과 사용하는 부분의 문자열을 확인할 수 있다.

사용하는 부분의 코드를 보면 0040237C 즉 ‘Please~’ 문자열을 스택에 넣는 명령어임을 알 수 있다.

문자열 확인

문자열 화면에서 BP(F2)를 설정하거나 해당 코드화면으로 바로 이동(Follow in Disassembler), 문자열 검색(Search for text)등을 사용할 수 있다.

 

본격적으로 분석을 시작한다. 우선 ‘Please~’ 문자열을 중심으로 스택을 분석해보았다.

문자열을 통해 코드를 보면 0040237C에 ‘please~’ 문자열이, 004023D0에 ‘Error!’ 문자열이 저장되어 있음을 확인할 수 있다. 00403054에 BP를 걸고 실행하고 BP에서 step over를 이용해 한 줄씩 실행해본다.

BP 지정
BP까지 실행 후 한줄씩 실행

00403066까지 실행하고 각각 레지스터, 스택에 저장된 값을 확인해본다.

* stack에서 Addressing > Relative to EBP를 선택하면 EBP레지스터에 대한 상대주소로 나타남

 

현재 이름에 4글자 미만을 입력했을 때 프로그램 실행 결과의 타이틀이 ‘Error’로 나타나는데 이를 ‘Please~’로 바꿔본다. 현재 19F1E8 stack에 Error 문자열이 저장된 4023D0 주소가 들어있다. 이 데이터를 0040237C (please~문자열이 들어있는 주소)로 바꾼다. 해당 스택 주소에서 Edit > Binary edit를 선택하여 주소를 변경할 수 있다. 이때 리틀 엔디안 방식으로 입력해야 한다.

 

일련번호를 만드는 부분은 패스하고 아래에 정답인지 오답인지 판단하는 부분으로 간다. 이름에 1234, 일련번호에 aaaa를 입력하고 실행했다.

TEST AX, AX에서 정오답을 판단해 결과를 낸다. AX의 값에 따라 결정되므로 EAX의 하위비트를 확인한다.

403307주소를 보면 EAX의 데이터 4바이트만큼을 [EBP-94]에 복사한다. Follow in dump > Memory address를 선택하면 해당 데이터가 저장된 위치로 간다. 값을 쉽게 볼 수 있도록 메모리영역에서 Integer > Address with ASCII dump를 선택한다.

 

이후 4바이트 단위의 아스키 값이 나오고 19F238주소에 문자열 ‘C5C5C5C5’가 저장되어 있음을 확인할 수 있다. 또한 19F244에 6C8BB4값 즉 ‘1234’를 가리키고 있다. 이 내용은 힌트부분에서도 확인이 가능하다. 따라서 C5C5C5C5는 ‘aaaa’를 의미함을 추측할 수 있고 이름에 ‘aaaa’를 일련번호에 ‘C5C5C5C5’를 입력해본다.

정답

그러면 위와 같이 정답 메시지창을 확인할 수 있다.

 


Ollydbg 자주 사용되는 단축키

F9 =실행 (BP가 걸려 있으면 거기까지)

F4 =현재 커서 위치까지 실행

F2 =BP 설정/해제

ctrl+F2 =Restart, 다시 처음부터 디버깅

ctrl+F7 =step into, 한줄씩 실행하는데 함수를 만나면 안으로 들어감

ctrl+F8 =step over, 한줄씩 실행하는데 함수를 만나면 함수 실행 결과만 보여줌

ctrl+G =원하는 주소로 이동

; =Comment 추가

+ / -(Numlock) =전진/후진, 코드를 실행하는 것은 아니고 바로 전에 봤던 로그로 되돌아가는 것

 

 

 

728x90
반응형

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

Abex crackme #3  (0) 2021.02.07
PEB TEB  (0) 2021.02.02
Reversing Basic Challenge #1  (0) 2020.12.20
Reversing Basic Challenge #0  (0) 2020.12.19
x64dbg 기본 사용법  (0) 2020.12.17

댓글