le0s1mba

[CodeEngn] Basic L05 본문

Security Challenges/CodeEngn

[CodeEngn] Basic L05

le0s1mba 2025. 3. 12. 09:33

https://codeengn.com/challenge/rce_basic


문제 파일을 실행시켜 보면 저렇게 Unregistered와 "754-GFX-IER-954"란 것이 적혀 있다.

Unregistered에 aaaa를 입력하고 Register now 버튼을 클릭해 보면 "Wrong Serial, try again!"이 뜬다.

 

x32dbg로 열어보면 EP에 pushad가 있다.

pushad가 뭔가 하고 찾아보니 현재의 레지스터 값들을 스택에 저장시켜주는 친구였다.

그럼 pushad를 왜 사용하는 지 의문이 들 수 있는데, 간단하게 설명하자면 복호화를 실행하기 전의 레지스터 값들을 유지하기 위해 사용한다.

때문에 바로 unpacking을 하러 갔다.

 

exeinfope에서 열어보면 upx packing이 되어 있다고 한다.

때문에 win32 upx로 unpack을 해준 후, 해당 파일을 x32dbg로 다시 열어봤다.

 

문자열을 보면 제일 위쪽에는 이런 것들이 뜨는데 밑으로 내리다 보면

 

아까 봤던 "Wrong Serial, try again!" 문자열을 볼 수 있다.

 

그럼 그 위에 있는 "No Name entered"를 클릭하여 들어가면

Name과 Serial을 입력 받고 특정 조건에 따라 Congrats 또는 Wrong을 출력한다.

그럼 이제 "No Name entered" 위의 0x440ECF에 bp를 걸고 동적 분석을 시작하겠다.

 

Unregistered에 aaaa를 입력하고 Register now! 버튼을 클릭하면 0x440ECF에서 Name 값을 받고, 0x440EFB에서는 Serial 값을 입력받는다.

그리고 F8을 누르다 보면 0x440F39에서 jmp가 취해져 Wrong Serial을 출력한다.

 

때문에 바로 위의 0x440F34에서 함수 안으로 들어가면 0x403B2F에서 내가 입력한 Name 값을 가져오고 0x403B31에서 "Registered User" 값을 가져온다.

 

그리고 F8로 계속 실행하다 보면 0x403B59에서 내 Name 값 4자리(ecx)와 "Registered User" 4자리(ebx)를 비교한다.

이걸 보고 이곳이 Name 값을 비교하는 함수라는 것을 알 수 있다.

 

때문에 Name에 "Registered User" 값을 넣고 다시 실행해 보면 두 값이 같은 것을 볼 수 있다.

이렇게 Name 함수는 통과했고, 이제 Serial 함수를 봐야 한다.

 

0x440F56에서 jmp가 취해져 Wrong이 출력되기 때문에 바로 위의 0x440F51에 bp를 걸고 똑같이 안으로 들어가서 보면 0x403B2F에서 내 serial 값을 가져오고, 0x403B31에서 "GFX-754-IER-954" 값을 가져온다.

 

이 부분에서 아까 전의 Name처럼 앞의 4자리 값들을 비교한다.

 

때문에 이 Serial 값도 "GFX-754-IER-954로 바꾸고 다시 Register now 버튼을 누르면 "Congrats!"가 뜨면서 문제가 풀린다.


더보기
flag : GFX-754-IER-954

'Security Challenges > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic L07  (0) 2025.03.12
[CodeEngn] Basic L06  (0) 2025.03.12
[CodeEngn] Basic L04  (0) 2025.03.12
[CodeEngn] Basic L03  (0) 2025.03.11
[CodeEngn] Basic L02  (0) 2025.03.11