EASY7
[CodeEngn] Basic RCE L03 본문
실습환경
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 |