336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
정말 오랫만에 전공 포스팅이네요.. 오늘은 L09번을 풀어보겠습니다.
Stolen Byte를 구하라고 하네요. Stolen Byte는 패커가 패킹을 할 때 파일의 바이트를 훔쳐 언패킹을 방해하는데 그 훔쳐진 바이트를 말합니다. 그럼 문제를 풀어보겠습니다.
UPX 로 패킹된 것을 확인할 수 있습니다. 이정도는 뭐 껌이지.. 생각하면서 언패킹을 해봅시다.
음? 에러가 나네요. 저도 처음 문제풀 때 언패킹을 잘못했나? 하고 여러번 해봤는데 계속 같은 결과가 나왔습니다. 그럼 왜 이럴까요?
이유는 프로그램의 일부분이 훔쳐졌기 때문입니다. 그럼 확인해봅시다.
이 프로그램의 OEP 위에 12바이트가 NOP로 존재하고 있는걸 확인할 수 있습니다. 그럼 훔쳐진 바이트들을 찾아봐야하는데 찾기위해서는 UPX 패킹된 파일에서 점프하기전 PUSH된걸 확인해봐야합니다.
보이시나요? 이 PUSH 된 것이 패커가 숨겨놓은 stolen bytes 입니다. 그럼 stolen bytes를 찾았습니다. 그런데 답을 입력할 때에 주소값을 입력하는 것이 아닌 bytes를 입력해야하는 것을 주의해야합니다. 그리고 여기서 만족하지말고 조금 더 나아가 완벽하게 언패킹 해봅시다.
저 Push 된 바이트를 저기 NOP 부분으로 옮기고 ollydump로 시작점을 바꿔주면 됩니다.
이로써 언패킹을 완료했습니다. 미숙한 글 읽어주셔서 감사합니다.
'해킹 > 리버스 엔지니어링' 카테고리의 다른 글
코드엔진 basic RCE L11 (StolenByte 복습) (0) | 2012.07.17 |
---|---|
코드엔진 basic RCE L10 풀이 (ASPack 언패킹) (0) | 2012.07.16 |
코드엔진 basic RCE L08 풀이 ( OEP 찾기 ) (0) | 2012.06.09 |
코드엔진 basic RCE L07 풀이 (0) | 2012.06.09 |
코드엔진 basic RCE L06 풀이 (back to user mode) (1) | 2012.06.06 |