일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바 기초
- 러스트 프로그래밍 공식 가이드
- 자바 개념
- 알고리즘
- Reversing
- Database
- Python
- 백준
- 자바
- 우분투
- Python challenge
- 오라클
- 데이터 통신
- C
- 오라클DB
- data communication
- OS
- 운영체제
- 러스트
- 파이썬 알고리즘
- 러스트 예제
- 데이터베이스
- 백준 러스트
- 파이썬
- Operating System
- java
- 파이썬 챌린지
- 파이썬 첼린지
- ubuntu
- Rust
- Today
- Total
IT’s Portfolio
[CodeEngn] Basic RCE Level 1 본문
CodeEngn Basic RCE Level 1
“너의 HD를 나의 CD-ROM으로 생각하게 만들어라”
“어쨌든... 이건 CD-ROM이 아니다!”
Entrypoint 후 프로그램에 “Make me think yout HD is a CD-Rom” text와 “abex’ 1st crackme” caption 인자를 전달함. WIN API MessageBoxA 함수 호출.
push 402094 부분은 함수호출을 위해 인자(C:\\)를 전달해준거고 그 다음 GetDriveTypeA라는 WIN API 함수가 호출됨. 이 함수의 리턴값은 eax 레지스터에 저장됨.
GetDriveTypeA 함수를 호출한 다음구문에 BreakPoint를 걸고 실행을 해보면 EAX 레지스터에 GetDriveTypeA의 반환값이 들어있음.
inc esi는 피연산자에 1을 더함. 이 구문이 실행되고 나서 피연산자는 esi가 되고 1을 증가시키면 00401001.
dec 옵코드는 inc와 반대로 피연산자에서 1을 뺌. 위에서 eax의 값이 3인걸 확인했으니 이 구문이 실행되면 eax의 값은 2가 됨.
jmp는 피연산자 위치로 이동. 01.401021의 위치는 다음구문인 inc esi임.
inc esi에서는 00401001에서 1을 더해준 값인 00401002. 마지막 구문은 똑같아서 esi의 값은 00401003이 됨.
dec eax 구문실행으로 eax의 값은 1.
그 다음 cmp라는 옵코드(opcode)는 두 개의 피연산자의 값이 같으면 아래의 구문, je를 통해 01.40103D로 이동.
참이라면 01.40103D로 이동하고 성공했다는 내용을 담고있는 WIN API MessageBoxA함수가 호출됨.
거짓이라면 실패했다는 내용을 담고있는 WIN API MessageBoxA함수를 호출함.
그렇기 때문에 cmp eax,esi 구문에서 거짓이 아닌 참이 되게 만들어줘야함.
두 개의 피연산자를 비교하는 구문에 BreakPoint를 걸어두고 ESI값과 EAX값이 동일하게 바꿈.
실행.
inc esi 구문 실행 전에 구문을 성공했다는 의미의 메시지박스를 출력하는 위치 이동.
inc esi 구문을 더블클릭해 jmp 0x40103d로 이동할 위치를 써주고 확인 후 실행.
'Security Study > Wargame Explanation' 카테고리의 다른 글
[Python Challenge] Level 0 풀이(Warming UP) (0) | 2019.11.19 |
---|---|
[CodeEngn] Basic RCE Level 5 (0) | 2019.10.25 |
[CodeEngn] Basic RCE Level 4 (0) | 2019.10.25 |
[CodeEngn] Basic RCE Level 3 (0) | 2019.10.17 |
[CodeEngn] Basic RCE Level 2 (2) | 2019.10.13 |