본문 바로가기

공부/리버싱 핵심원리

Lena's Reversing for Newbies

1. 실행: Tut. ReverseMe1.exe

 


 

2. 분석

2.1 목표 (1) - 메시지 박스(Nag screen) 제거

>> 방법 1: 메시지 박스 함수를 호출하는 부분을 제거

>> 방법 2: 메시지 박스 함수를 호출하는 "상위 함수"가 호출되지 못하게 하거나, 또는 상위 함수가 바로 리턴하게 한다.

 

메시지 박스가 나타나는 경우

1) 프로그램이 시작될 때

2) "Part10Tut.ReverseMe" 박스에서 [Nag?] 버튼을 눌렀을 때

 

실행

Visual Basic에서 메시지 박스 이용하는 API: MsgBox << 이 함수를 사용하겠구나~

 

>> 방법 1: "Nag Screen" 문자열 검색

 

>> 방법 2: 메시지 박스 검색: MSVBVM50.rtcMsgBox() 함수

     1) 우클릭 > [Search for] > [All intermodular calls] : 프로그램에서 사용하는 API 리스트

     2) "Destination" 컬럼 선택

     3) rtcMsgBox() 함수 확인: 4개

     4) 우클릭 > [Set breakpoint on every call to rtcMsgBox] : BP 설정

     5) 실행: [F9]

BP 위쪽에 메시지 박스와 관련된 문자열이 있음 > 계속 실행하며 동작 분석

 

시작할 때와 [Nag?] 버튼을 눌렀을 때, 동일한 주소의 BP에서 멈춤  > "그렇다면 한 곳만 수정하면 OK!! "

 

2.2 패치: 메시지 함수 제거

>> 방법 1: 메시지 박스 CALL 부분 수정

우클릭 > [Binary] > [Edit]
원본
수정본

그런데...

오류가 발생한다. . .

선택한 부분: 함수의 실행 후 결과값 정리하는 부분. EAX값이 호출 후 변경되었는데, 방법 1은 이 부분 처리를 안함

그렇다고

ADD ESP, 14

MOV EAX, 1 로 수정할 수도 없다. << 8바이트가 필요하기 때문

 

그러니 다른 방법을 사용해야 한다.

 

>> 방법 2: 메시지 박스 함수의 상위 함수(Caller) 호출 부분 수정

     1) 메시지 박스 호출 함수 호출의 앞 부분 검토

          >> 스택 프레임 생성 부분을 찾는다

PUSH EBP MOV EBP, ESP

 

     2) 상위 함수가 바로 Return 하게 수정 (방법 1과 동일한 문제 발생할 수도 있다.)

4바이트 스택 리턴해줘야 하는 것 확인
4바이트의 스택 정리

 

     3) 수정 후 실행 > 메시지 박스가 나타나지 않음을 확인

실행할 때도, [Nag?]를 눌러도 안 나옴

 


 

3. 목표 2: 등록 코드 찾기

RegCode 값 찾기

단서를 찾기 위해 아무 값이나 입력해 본다.

 단서: 경고 문구 = "Sorry ! I Wrong registration code !"

 

코드 분석

문자열 검색으로 날아옴

I'mlena151를 입력하자 정상 처리가 된다.

'공부 > 리버싱 핵심원리' 카테고리의 다른 글

IAT 따라가기  (0) 2024.05.12
PE File Format  (0) 2024.05.11
abex' crackme #2 분석  (0) 2024.04.17
abex' crackme #1 분석  (0) 2024.04.15
Hello World! 리버싱  (1) 2024.04.15