반응형
CodeEngn Challenges Basic RCE L09 풀이과정입니다.
문제
실행결과
언패킹한 파일을 실행하면 구문의 글자들이 깨져서 나온다
확인해본 결과, 글자가 깨지는 이유는 아래와 같이 NOP으로 채워져있기 때문이다.
언패킹된 파일 중 앞부분 코드가 NOP 이유는 StolenByte가 적용되어있기 때문이다.
StolenByte란?
코드의 일부를 OEP이전에 숨기고 그 코드들을 복사하여 다른 분리된 메모리에서 실행하기 때문에 OEP를 찾은 뒤 덤프를 떠도 정상적으로 실행되지 않는다.
보통 옮겨진 코드들은 OEP 주소로 점프하기 전 위치에서 PUSH 된다고 한다.
보통 UPX패킹은 PUSHAD ~ POPAD 명령어 내부에서 압축해제 코드가 실행 되고 POPAD 명령어 실행 후 JMP 명령어를 통해 OEP로 이동한다.
그 중 POPAD와 JMP 명령어, OEP 사이에 연속된 PUSH 부분을 Stolen Byte라고 한다.
각 레지스터 스택에 저장 후 popad 명령으로 레지스터 복구하는것을 확인
언패킹한 이전 사진을 다시 보면, nop으로 채워진 공간은 총 12바이트인것을 확인하였다.
12바이트만큼을 확인한 결과, Stolen Byte는 6A0068002040006812204000
언패킹한 파일에서 nop으로 채워진 코드 부분을 Stolen Byte로 덮어쓰기
정상적으로 동작
정답: 6A0068002040006812204000
반응형