EASY7

[CodeEngn] Basic RCE L03 본문

Project/CodeEngn

[CodeEngn] Basic RCE L03

E.asiest 2019. 11. 5. 17:09

실습환경

VMware Workstation

OS : Window XP

OllyDbg(shadow)

IDA 32

 

 

문제

비주얼베이직에서 스트링 비교함수 이름은?

 

파일에 대한 이해

EP : 0x1000

ImageBase : 0x400000

 

변기통 아이콘의 실행파일을 클릭하면

Entferne diesen nag, oder bekomme das richtige passwort heraus!(독일어...)

->Remove this nag or get a valid password!

->이 잔소리를 제거하거나 올바른 암호를 얻으십시오!

 

 

 

Error! Das Passwort ist falsch!

->Error! The password is invalid!

->오류! 암호가 잘못되었어!

 

 

 

문제 풀이

 

비주얼베이직에 사용하는 함수를 어떻게 알아낼까 생각하다가..

IDA에서 C언어로 해석해주던게 생각해서

IDA32로 열어보았더니 함수이름이 이렇게 똿...

답은 __vbaStrCmp였다..

 

1. 올리디버거에서 오른쪽 마우스-search for -all intermodular calls 클릭.

2. __vbaStrCmp 더블클릭

3. 커서를 함수에 두고 F4-> 메시지 박스가 뜨면 패스워드 입력(필자는 leelab입력함)->f7로 계속 진행

 

4. 중요한 로직 부분

표시한 CMP 부분이 올바른 비밀번호(2G83G35Hs2)와 입력한 비밀번호(leelab)을 비교하는 부분이다.

값을 비교한 후 같지 않으면 JNB가 점프 시킨다.

**의문점은 MOV EDI, DWORD PTR DS:[ECX-4]하면 leelab이 EDI에 들어간다는 점..

ECX+4를 해야할 것 같은데.. SS나 DS에 대해서 알아봐야겠다...

 

 

 

 

** 새로 배운 어셈블리어

JNB : 같지 않으면 점프

MOV a b : b의 내용을 a에 복사

DWORD PTR DS:[401DDC] 데이터 영역의 401DDC주소에서 4byte공간의 값.

DWORD PTR SS:[EBP+C] 스택영역의 EBP+C주소에서 4byte공간의 값.

C : 12

10 : 16

MOV CX, WORD PTR DS:[405034] 
데이터영역의 405034 주소의 값을 CX에 저장
WORD는 2byte이기 때문에 레지스터에 담기는 것도 2byte여야한다.
그러므로 ECX가 아닌 CX에 담긴다. 

'Project > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L06  (0) 2019.11.15
[CodeEngn] Basic RCE L05  (0) 2019.11.10
[CodeEngn] Basic RCE L04  (0) 2019.11.10
[CodeEngn] Basic RCE L02  (0) 2019.11.05
[CodeEngn] Basic RCE L01  (0) 2019.11.05
Comments