Notice
Recent Posts
Recent Comments
Archives
04-28 07:03
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
관리 메뉴

줴림이 공부하줴림

[CodeEngine] Basic RCE L09 본문

Study/CodeEngine

[CodeEngine] Basic RCE L09

줴림 2025. 4. 22. 10:52

이번 문제는 StolenByte를 구하는 것이다. 09.exe를 열면 처음에 막히는 듯 싶다가 다음 창이 뜬다. 그냥 확인을 누르면 Error가 뜨는데, 뭔가를 해줘야 하는 듯 하다.

Stolen Byte가 뭔가 했더니, 원래의 바이너리에서는 사라졌지만 패커의 일부분처럼 동작하기 위해 패커 코드 내에 사용된 코드를 의미한다고 한다. OEP를 찾은 뒤에 바이너리를 덤프하면 stolen byte는 덤프된 바이너리 내에 존재하지 않거나 이상한 자리에 존재한다고 한다. 또 POPAD와 JMP OEP사이에 PUSH 명령어 등을 통해서 원래 OEP부터 실행되어야 할 코드를 스택으로 빼돌리는 것을 Stolen byte라고 부른다고도 하는데... 어쨌든 그럼 이제 HxD로 09.exe가 패킹되었는지 확인해봐야겠다.

보니까 UPX로 패킹이 된 것 같아서 언패킹을 해줬다. 그리고 언패킹한 파일을 Ollydbg로 연다.

 

일단 파일을 열어보니 스택 push가 시작되는 부분의 주소는 '0040100C'임을 알 수 있었다. 다른 인터넷 블로그들 보니까 시작 부분의 주소는 '00401000'라고는 하는데... 이제 어떻게 하는 거지? Stolen byte를 찾아야 하는 거니까 다시 패킹된 파일을 열어야 하는 건가?

+) 좀 생각해보니까, OEP는 00401000이 맞는 것 같다. 다만, 밑에서는 JMP OEP라고 했는데 정확히는 JMP OEP보다는 스택이 시작하는 주소를 말하고 싶었던 것 같다.

 

그래서 패킹된 파일을 열어서 POPAD를 찾아서 헤매고 다녔다. 마침내 POPAD와 JMP 0040100C(OEP) 부분을 발견했다!!! 아까 Stolen Byte의 정의가 POPAD랑 JMP OEP 사이에서 PUSH로 빼돌리는 거라고 했으니까..

결론! Stolen Byte는 6A0068002040006812204000 일 것이다.

코드엔진 사이트에 넣어보면 정답임을 알 수 있다!

 

'Study > CodeEngine' 카테고리의 다른 글

[CodeEngine] Basic RCE L11  (0) 2025.04.24
[CodeEngine] Basic RCE L10  (0) 2025.04.23
[CodeEngine] Basic RCE L08  (0) 2025.04.21
[CodeEngine] Basic RCE L07  (0) 2025.04.18
[CodeEngine] Basic RCE L06  (0) 2025.04.17