le0s1mba

[CodeEngn] Basic L09 본문

Security Challenges/CodeEngn

[CodeEngn] Basic L09

le0s1mba 2025. 3. 12. 21:19

https://codeengn.com/challenge/rce_basic


문제 파일을 실행시키면 저렇게 두 창이 뜬다. 

 

문제에서는 StolenByte를 구하라고 한다.

뭔지 모르기에 찾아본 결과 unpack을 할 때 OEP로 가지 못한 코드를 stolen byte라고 부른다고 한다.

 

열어보면 pushad를 볼 수 있다.

 

밑에 popad로 가면 OEP 주소를 확인할 수 있다.

 

실행을 시켜서 OEP로 가보면 신기하게 OEP가 애매한 0x4001C에서 시작한다.

 

그럼 이제 stolen byte를 찾아야 하는데, 얘는 popad와 jmp OEP 사이에서 찾을 수 있다.

 

이 명령어들 중 stolen byte가 있다는 뜻인데, 일단 누가 봐도 stolen byte가 아닌 명령어들을 빼보면 "sub esp, 0xFFFFFF80"과 "lea eax, dword ptr ss:[esp-80]"이다.

 

push 0
push 09.402000
push 09.402012
. . .
push 0
cmp esp, eax
jne 09.40737E

때문에 정작 우리가 볼 부분은 이 코드 밖에 없다.

 

push 0
cmp esp, eax
jne 09.40737E

Claude한테 물어보니 이 코드는 안티디버깅 기법 중 하나로 스택이 정상적인지 검사하는 작업을 한다고 한다.

 

push 0
push 09.402000
push 09.402012

그럼 남은 이 코드가 stolen byte인 것을 확인할 수 있다.

 

6A 00
68 00204000
68 12204000

이 바이트들을 메모장에 저장해 둔 후, OEP로 가서 nop 부분에 넣어보면 바이트 사이즈가 딱 맞아떨어지는 것을 확인할 수 있다.


flag : 6A0068002040006812204000

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

[CodeEngn] Basic L11  (0) 2025.03.13
[CodeEngn] Basic L10  (0) 2025.03.13
[CodeEngn] Basic L08  (0) 2025.03.12
[CodeEngn] Basic L07  (0) 2025.03.12
[CodeEngn] Basic L06  (0) 2025.03.12