Never Stop Running
[CodeEngn] BASIC 05 본문
* 리버싱 공부를 위한 문제풀이로
정답을 찾는 것과는 조금 다를 수 있습니다.
[CodeEngn] BASIC 05
문제 풀이 환경 |
Windows 10 / Intel / x32dbg / UPX |
문제 URL |
BASIC 5번 문제.
문제는 프로그램의 등록키를 찾는 것이다.
프로그램을 실행시키면 다음과 같은 창들이 나타난다.
메모리 맵을 보니 UPX로 패킹된 것을 확인할 수 있다.
UPX를 이용하여 언패킹한다.
언패킹 한 프로그램을 열어보니 정상적으로 언패킹 되었다는 것을 알 수 있다.
코드 부분에서 오른쪽 마우스 클릭을 하여 [다음을 찾기] - [현재 모듈] - [문자열 참조]를 누르면 그 코드부분에 사용된 문자열들이 나온다.
문자열을 찾아보니 성공했을 때 나올 것 같은 문자열을 발견했다.
문자열이 출력되기 전 구간에 Break Point를 걸었다.
임의의 값을 넣어 실행시켜보았다. Name = abcde, Serial = 12345를 넣었다.
일단 첫번째 JNE문 전에 어떤 함수를 CALL한다. CALL하기 전에 내가 넣은 'abcde'와 'Registered User' 값을 레지스터에 저장하는 것을 확인했다. 그래서 Name에 'Registered User'를 넣어야 한다고 추측했다. 그리고 CALL한 [00403B2C]위치의 함수가 문자열을 비교하여 검증하는 함수라고 생각했다.
Name = Registered User, Serial = 12345를 넣었다.
Name을 검증할 때 맞았는지 무사히 점프문을 지나쳤다.
아까 확인했던 [00403B2C]위치의 문자열 검증 함수를 호출하기 전에 '12345'와 'GFX-754-IER-954'를 레지스터에 넣는걸로 보아 Serial은 'GFX-754-IER-954'라고 생각했다.
결과적으로 맞았으며 문제를 해결하였다.
'Training > Codeengn' 카테고리의 다른 글
[CodeEngn] BASIC 07 (0) | 2018.09.24 |
---|---|
[CodeEngn] BASIC 06 (0) | 2018.09.24 |
[CodeEngn] BASIC 04 (0) | 2018.09.24 |
[CodeEngn] BASIC 03 (2) | 2018.09.24 |
[CodeEngn] BASIC 02 (0) | 2018.09.24 |