본문 바로가기

리버싱/CodeEngn 문제풀이

CodeEngn basic 9번 문제 풀이

SMALL

CodeEngn basic 9번 문제

StolenByte를 구하시오 Ex)75156A0068352040

실행을 하여보니 keyfile을 찾아야하는 것 같지만 CodeEngn 문제가 단순히 StolenByte를 구하는 것이므로 keyfile은 찾지않겠다. StoleByte를 구하는 것이기 때문에 패킹이 되어있을 것 이다.

Exeinfo PE 프로그램으로 보니 UPX로 패킹 되어있는 것을 알 수 있다.

StolenByte를 구하는 것이기 때문에 수동으로 UPX를 언패킹하면서 StolenByte를 찾아야한다.

일단 PUSHAD를 실행 시키고 모든 레지스터 값이 stack에 저장되고 나중에 디코딩 후 프로그램이 정상적으로 실행되기 위해stack에 저장된 레지스터 값에 접근 할 때가 브레이크포인트를 걸어 OEP를 찾아내겠다.

POPAD에서 브레이크 포인트가 걸렸다. 즉, stack에 저장된 값을 다시 레지스터에 저장하기 위해 POPAD를 하여 다 빼낸 것이다. OEP로 점프하는 구문 사이의 StolenByte는 하이라이트한 3줄인 것을 알 수 있다.

JMP문을 통해 40100c로 갔는데 위에 NOP으로 채워져 있어서 StolenByte를 입력해봤다.

실행이 잘된 것을 보니 StolenByte가 맞았다는 것을 알 수 있다.

Ex)75156A0068352040 이렇게 답을 입력하라고 하였으니 StolenByte의 OP코드가 답인 것을 알 수 있다.

 

답 : 6A0068002040006812204000 

LIST