본문 바로가기

해킹/리버스 엔지니어링

코드엔진 basic RCE L09 풀이 (StolenByte 구하기)

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
정말 오랫만에 전공 포스팅이네요.. 오늘은 L09번을 풀어보겠습니다.


Stolen Byte를 구하라고 하네요. Stolen Byte는 패커가 패킹을 할 때 파일의 바이트를 훔쳐 언패킹을 방해하는데 그 훔쳐진 바이트를 말합니다. 그럼 문제를 풀어보겠습니다.


7EA5E6FB.exe




UPX 로 패킹된 것을 확인할 수 있습니다. 이정도는 뭐 껌이지.. 생각하면서 언패킹을 해봅시다.




음? 에러가 나네요. 저도 처음 문제풀 때 언패킹을 잘못했나? 하고 여러번 해봤는데 계속 같은 결과가 나왔습니다. 그럼 왜 이럴까요?


이유는 프로그램의 일부분이 훔쳐졌기 때문입니다. 그럼 확인해봅시다.





이 프로그램의 OEP 위에 12바이트가 NOP로 존재하고 있는걸 확인할 수 있습니다. 그럼 훔쳐진 바이트들을 찾아봐야하는데 찾기위해서는 UPX 패킹된 파일에서 점프하기전 PUSH된걸 확인해봐야합니다.




보이시나요? 이 PUSH 된 것이 패커가 숨겨놓은 stolen bytes 입니다. 그럼 stolen bytes를 찾았습니다. 그런데 답을 입력할 때에 주소값을 입력하는 것이 아닌 bytes를 입력해야하는 것을 주의해야합니다. 그리고 여기서 만족하지말고 조금 더 나아가 완벽하게 언패킹 해봅시다.


저 Push 된 바이트를 저기 NOP 부분으로 옮기고 ollydump로 시작점을 바꿔주면 됩니다.





이로써 언패킹을 완료했습니다. 미숙한 글 읽어주셔서 감사합니다.