StolenByte
▶ 패킹된 바이너리를 언패킹할 때의 과정을 방해하기 위한 방법으로, 프로그램의 일부 바이트를 별도의
영역에서 실행되게 하여 OEP를 다른 위치로 가장하고 덤프를 쉽게 하지 못하도록 구현한 기법
▶ 패커가 패킹을 진행할 때, 원본 코드 중 일부를 다른 곳으로 이동 시킨 코드로써, 주로 EP 위의 몇 줄의 코드이다
※ 올바른 프로그램을 얻기 위해서는 패킹 과정에서 떼어진 StolenByte를 함께 복원해야 덤프가 성공적으로 이루어진다
unpacking 후 디버거로 열었을 때, 처음에 NOP로 덮어진 부분이 눈에 띄었다.
첫 번째로 실행되는 MessageBoxA 함수에 전달할 인자가 부족함을 알 수 있었고
이를 실행했을 때, 온전하지 못한 글자들과 함께 결과가 보여짐을 확인할 수 있었다.
이를 통해 부족한 인자들이 문제와 연관있음을 예측했다.
unpacking 시 stolenbyte 문제가 생긴다는 것을 깨달은 후,
다시 원본 실행 파일에서 POPAD 부분을 찾아갔다.
(POPAD 찾는 방법은 아래를 확인)
2021.04.07 - [Study/Reversing] - CodeEngn Challenge : Basic RCE L06
그리고 POPAD 이후 스택에 적재되는 세 개의 값을 확인할 수 있었다.
OEP로 점프하는 구간에 BP를 걸고 실행시켰더니
MessageBoxA 함수 호출에 필요한 인자들이 스택에 PUSH 됨을 알 수 있고,
이를 통해 PUSH 되는 인자들이 StolenByte 임을 확인했다.
따라서 stolenbyte는 6A0068002040006812204000 이다.
'Study > Reversing' 카테고리의 다른 글
CodeEngn Challenge : Advance RCE L09 (0) | 2021.04.28 |
---|---|
CodeEngn Challenge : Advance RCE L03 (0) | 2021.04.28 |
CodeEngn Challenge : Basic RCE L06 (0) | 2021.04.07 |
CodeEngn Challenge : Basic RCE L16 (0) | 2021.03.30 |
CodeEngn Challenge : Basic RCE L15 (0) | 2021.03.30 |