Never Stop Running

[CodeEngn] BASIC 05 본문

Training/Codeengn

[CodeEngn] BASIC 05

Gyoran 2018. 9. 24. 08:57

리버싱 공부를 위한 문제풀이로

정답을 찾는 것과는 조금 다를 수 있습니다.

[CodeEngn] BASIC 05


문제 풀이 환경

Windows 10 / Intel / x32dbg / UPX

 문제 URL

https://www.codeengn.com/challenges/basic/05


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
Comments