티스토리 뷰
CodeEngn Basic RCE의 17번 문제입니다.
해당 프로그램의 key값을 이용해서 Name을 찾는 문제네요.
프로그램을 다운로드 받겠습니다.
'17.exe'라는 이름의 파일입니다.
실행시켜보면..
Name이 한자리라길래 한자리만 입력했더니 문자를 더 치라고 하네요.
이 부분부터 고쳐야 될 것 같습니다.
그 전에 먼저 PEID로 파일의 정보를 보겠습니다.
패킹은 되어있지 않습니다.
올리디버거로 열겠습니다.
아까 봤던 문자를 더 입력하라는 문자열을 찾았습니다.
해당 문자열이 사용되는 곳으로 이동해보겠습니다.
입력받은 Name이 세 자리 이상인지 비교하는 조건문이 보입니다.
저곳을 수정해주겠습니다.
Name이 한자리일 때도 실행되도록 수정해주었습니다.
이제 이 상태에서 프로그램을 저장하겠습니다.
이제 한자리만 입력해도 더 입력하라는 문자열이 출력되지 않습니다.
이제부터 Key값이 BEDA-2F56-BC4F4368-8A71-870B일때의 Name값을 찾겠습니다.
(Name에 1을 입력했습니다)
성공 문자열 위에 성공인지 아닌지를 가르는 조건문이 있습니다.
프로그램을 분석해보니 CALL _17.00404C3C는 Name값을 이용해서 만든 Serial을 호출하는 것이고,
45B850은 Name값을 이용해서 Serial을 만드는 함수라는 것을 알 수 있습니다.
Name값을 이용해서 Serial을 만드는 45B850 함수로 들어가서 살펴보겠습니다.
밑으로 내리다 보니 첫 번째 루틴이 나왔습니다.
위 연산이 끝나고
EDX에는 63E2EBF0이 저장되었습니다.
함수 45B850이 끝나고서는
EDX에 함수 45B850에서 생성된 Serial값이 저장되었는데요.
첫번째 루틴이 끝나고 EDX에 저장된 값과 4자리가 같습니다.
그러므로 이제 위 연산을 다시 진행해서 BEDA~~이 나오는 문자를 구하면 됩니다.
간단하게 C언어로 코드를 짜보았습니다.
0-9, a-z, A-Z까지 하나씩 for 문에 대입해서 연산을 진행한 후 결과를 출력해주었습니다.
실행시켜주었더니 F를 연산한 후 결과에서 beda가 출력되었습니다.
프로그램에 Name값으로 F를 입력하고 Serial값으로 BEDA-2F56-BC4F4368-8A71-870B를 입력하고 실행시켜보았습니다.
성공 문자열이 출력됩니다.
이제 F를 MD5로 암호화해서 알파벳을 대문자로 바꾼 후 코드엔진 사이트에 인증해주면...
'Reversing > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE - Level 19 풀이 (39) | 2017.11.26 |
---|---|
[CodeEngn] Basic RCE - Level 18 풀이 (87) | 2017.11.25 |
[CodeEngn] Basic RCE - Level 16 풀이 (80) | 2017.11.21 |
[CodeEngn] Basic RCE - Level 15 풀이 (108) | 2017.11.21 |
[CodeEngn] Basic RCE - Level 14 풀이 (103) | 2017.11.16 |
- Total
- Today
- Yesterday
- wargame
- Level 05
- HackingCamp
- Level 06
- Advance RCE
- hackerschool
- Write-up
- Level 03
- 유니티
- 멘토링
- C#
- Level 01
- pwnable
- Android
- unity2d
- reversing.kr
- Basic RCE
- Unity
- Level 04
- 17th HackingCamp CTF
- 안드로이드 멘토링
- c++
- 안드로이드
- 풀이
- Level 02
- Reversing
- xcz.kr
- ftz
- Programming
- CodeEngn
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |