le0s1mba
[CodeEngn] Basic L09 본문

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 |