Lena tutorial Reversing

Lena tutorial Reversing

in

Lena Tutorial

1번문제 (메시지함수 우회)

Lena 문제중 한 문제
우선 프로그램을 실행시키면 다음과 같은 메시지 박스가 나오고 잔소리? 를 제거하고 올바른 키값을 찾으라고 한다.

lena1_1

확인을 누르면 다음과 같은 창이 뜨고 임의의 입력값을 입력시 잘못된 코드라고 창이 나온다.

lena1_2

우선 메시지박스를 호출하는 API를 찾아 모두 BP를 걸어준다.
Visual Basic에서 메시지 박스 출력 함수는 MSVBVM50.rtcMsgBox 이다.

lena1_3

해당 프로그램을 재시작(F9)를 해주면 걸어둔 BP에서 멈추게 되고 실행(F8)을 하게 되면 처음 보았던 창이 나오게 된다.

lena1_4

402CFE 코드에서 조금 위로 올라가면 402C17주소에 함수의 시작을 나타내는 스택 프레임의 프롤로그가 보인다.

push ebp  
mov ebp, esp

해당 메시지박스가 출력되지 않게 시작부분에 바로 리턴을 줘서 메시지가 출력되지 않게 할것이다.
그렇기 위해서는 리턴되는 함수의 파라미터 개수를 알아야한다.

lena1_5

우선 시작 주소에 BP를 걸어주고 재시작
그러면 402C17 함수시작 코드에서 스택에 저장된 리턴 주소(7401E5A9)를 확인할 수 있다.

lena1_6

리턴 주소로 가게되면 이 코드영역이 MSVBVM50.dll 모듈 영역인것을 확인가능.
7401E5A7주소의 CALL eax가 실행된 후 7401E5A9 주소로 리턴 되게 되므로 CALL 주소에 BP설치

lena1_7

그리고 프로그램을 재시작하여 실행하면 EAX의 값이 402656이라는 것을 확인할 수 있다.
또한 402C17의 함수 파라미터 개수 +4를 알수 있음.

lena1_8

다시 시작 스택 프레임으로 돌아가 어셈블리어를 변경하여 ret 값을 4로 주어 아무것도 실행되지 않도록 설정

lena1_9 lena1_10

그 후 프로그램을 재시작하면 메세지박스가 출력되지 않고 바로 본 프로그램이 실행되는 것을 확인할 수 있다.

2번문제 (시리얼 값 획득)

메시지박스 우회를 하고 입력값을 입력하면 잘못된 값이라고 출력이 된다.
우회 방법에는 2가지의 방법이 있다.

lena1_11

방법 1 (입력값 찾기)

값 입력시 나타나는 문자열을 검색하여 찾은 후 조금 위로 올려보면 값을 비교하는 함수를 찾을 수 있다.

i'mlena51
call <JMP .&__vbaStrCmp>  = 값 비교 함수

lena1_12

해당 값을 입력하면 성공 문구가 출력된다.

lena1_13

방법 2 (어셈블리어 패치)

성공했을때의 출력문구를 찾아 시작 코드를 찾는다

lena1_14

그 후 잘못된 입력값을 넣었을때 비교하는 시작 로직의 코드를 성공했을때의 시작 코드로 패치

lena1_15