일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 신경망파이썬
- 파이썬
- 파이썬신경망
- 활성화함수파이썬
- 스트림암호
- 신경망 학습
- 백준
- 보안
- 소프트맥스함수
- 버퍼오버플로우
- 신경망
- 백준알고리즘
- 정보보안
- BOF
- 밑바닥부터시작하는딥러닝
- 8086CPU레지스터
- 알고리즘
- 딥러닝
- C언어알고리즘
- C알고리즘
- 신경망구현
- 항등함수
- c언어
- 달고나bof
- 인공지능
- 딥러닝파이썬
- 머신러닝
- C언어 알고리즘
- FTZlevel10
- BOJ
- Today
- Total
HeeJ's
Basic RCE L15 :: CodeEngn/BasicRCE 본문
문제:
파일을 저장했는데 .exe 파일이기에 우선 그냥 실행해보았다.
이렇게 Name과 Serial을 넣는 칸이 있는데,
Name은 CodeEngn으로 주어졌고, Serial에 아무 값을 넣어주고 Check를 해보았다.
Try Again ! 이라는 문구가 떴다.
이제 이 파일을 분석해보기 위해 Ollydbg로 열어주었다.
그리고, 분기문을 찾아주기 위해 문자열을 검색해 성공, 실패가 나눠지는 곳이 있는지
찾아주었다.
그랬더니 아까 실패했을 때 뜬 "Try Again !"이라는 문자열과
성공하면 보일 것 같은 "You cracked ..." 문자열이 보인다.
그래서 저 문자열로 가서 윗부분에 CMP 구문이 있는지 찾아주었다.
그 위치에서 성공, 실패를 가르는 분기문이 될 것이기 때문이다.
CMP 구문을 찾아서 보면
EAX와 DWORD PTR DS:[45B844]를 비교하는데,
DWORD는 Double WORD로 4byte를 뜻하고,
DS는 데이터 세그먼트,
즉 DWORD PTR DS:[45B844]는
DATA 영역의 45B844 주소의 4바이트 공간의 값을 뜻함
CMP 구문에 bp를 걸어주고 실행시켜보았다.
다시 아무 값이나 입력해 주면
EAX 값에 Serial에 입력해준 값이 들어가 있는 것을 알 수 있다.
그래서 45B844의 주소 값을 찾아주기 위해
Dump를 따라가 Memory address 값을 확인해주었다.
그러면 이 address에 들어있는 값을 찾을 수 있는데,
메모리 덤프 주소는 리틀 엔디언 방식으로 읽어주어야 하기 때문에
00 00 61 60 이 된다.
Serial은 10진수로 넣어주어야 하기 때문에
6160(16)을 10진수 변환해주면
Serial 값을 찾을 수 있다.
exe 파일을 실행시켜 name과 Serial을 입력해주면
이렇게 serial을 확인할 수 있다.
'<CTF> > <CodeEngn>' 카테고리의 다른 글
BasicRCE L02 :: CodeEngn/BasicRCE (0) | 2021.04.26 |
---|---|
Basic RCE L01 :: CodeEngn/BasicRCE (0) | 2021.03.29 |
Basic RCE L18 :: CodeEngn/Basic RCE (0) | 2020.06.07 |
Basic RCE L16 :: CodeEngn/Basic RCE (0) | 2020.06.06 |
Basic RCE L11 :: CodeEngn/BasicRCE (0) | 2020.06.06 |