본문 바로가기

REVERSING

[SWING] Reversing 03

과제 1

 

fastcall

 

기본적으로 stdcall과 방식이 같다.

함수에 전달하는 파라미터 일부(2개까지)를 스택 메모리가 아닌 레지스터를 이용하여 전달한다.

함수의 파라미터가 4개라면 앞의 두개는 ECX, EDX파라미터를 이용하여 전달한다.

파라미터 전달시 스택이 아닌 레지스터에 접근하기 때문에 훨씬 더 빠르다는 장점이 있다.

 

 

과제 2

 

Lena's Reversing

 

파일이 잘 열리지 않아서 구글링해서 같은 파일을 찾아 다운받았는데 코드가 중간에 조금 다른 부분이 있어 잘 되었는지 모르겠습니다. 너른 양해 부탁드립니다.

 

 

미션 : Nag 를 제거하고, 올바른 등록 코드를 찾아라!

Register me!
Nag?

 

 

MsgBox 쓰여있는 곳 클릭.

해당 함수가 사용된 모든 곳에 breakpoint 가 걸린다.

 

F9 눌러 실행하여 도착한 곳에서 스크롤을 조금 더 올리면 Nag Screen 을 찾을 수 있다.

윈도우 API 함수들은 마지막에 Call 되는 경우가 많아서 위로 올라가면 함수 코드가 나온다.

 

 

Nag 를 없애는 방법

 

1. 상위 함수를 호출하지 못하게 하기

2. 메시지 박스 호출 전에 RETURN 으로 종료

 

 

PUSH EBP : 스택 프레임의 시작

 

 

리턴하기로 되어있는 주소로 Ctrl + G 를 이용해서 가보자.

 

CALL EAX : 함수 호출

MOV ESP, EBP : 리턴

 

 

CALL EAX 가 있는 0F01E5A7 에 Breakpoint 를 걸고 실행하여 EAX 값을 확인한다.

00402656. 그리고 이것이 호출된 메시지 함수의 위치이다.

 

 

 

CALL EAX 명령에 의해 0F01E5A7 주소에 00402C17 함수가 호출되었다.

미션은 메시지 함수 호출 전에 리턴해서 호출을 막는 것이다.

그러기 위해 받는 파라미터 값만큼 스택을 정리해야 한다.

 

CALL 전
CALL 후

CALL EAX 명령 전 0019F0 에서 호출 후에 0019F9F4 로 스택값이 4만큼 증가한 것을 확인할 수 있다.

RETN 4 = RETN + POP 4.

 

 

00402C17 로 이동해 PUSH EBP 명령어를 RETN 4 로 바꾸어 준다.

 

 

 

 

이렇게 저장을 하고 실행하면

 

 

Nag Screen 제거에 성공한 것을 확인할 수 있다!

 

 

그럼 이제 올바른 등록 코드를 찾을 차례다.

 

 

Msgbox 의 함수에 Breakpoint를 걸어준 뒤 실행하면 아까의 00402CFE 와는 다른 주소인 00402AE8 에 Breakpoint가 걸려있는 것을 확인할 수 있다.

 

 

"Regcode is wrong!"

: Regcode 가 틀렸을 때와 관련있는 함수

 

"Sorry! Wrong registration code!" 

: 잘못된 코드를 입력했을 때 나오던 문구

 

"I'mlena151" 바로 아래줄의 __vbaStrcmp>

: 문자열 비교 API 함수. 즉 "I'mlena151" 과 입력받은 문자열을 비교하는 역할을 한다.

 

 

 

 

올바른 Regcode는 I'mlena151 이었던 것이다!

 

 

 

'REVERSING' 카테고리의 다른 글

[SWING] Reversing 06  (0) 2023.03.26
[SWING] Reversing 05  (0) 2022.08.26
[SWING] Reversing 04  (0) 2022.08.22
[SWING] Reversing 02  (0) 2022.08.06
[SWING] Reversing 01  (0) 2022.07.30