본문 바로가기

[Riversing]/[코드엔진] BASIC

[코드엔진] basic9

코드엔진 사이트에 들어가 basic9 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn)

 

StolenByte를 구하는 문제이다.

 

#StolenByte 란 쉽게 훔쳐진 코드이다. 패커가 이동시킨 코드의 윗부분 (보통 OEP 로부터 몇 개의 명령어) 이다.

 

이 경우 언패킹을 할시에도 정상 실행이 되지않는다. 하지만 숨겨진 코드를 다시 제자리에 가져다 놓고 덤프, IAT 복구를 하면 정상실행이된다.

 

Upx 에서는 마지막 JMP 전 POPAD이후 일정 바이트의 코드를 의미한다.

 

 

먼저 PEiD로 확인해본 결과 UPX 패킹이 되어 있다.

 

 

프로그램을 실행시키면,

위와 같이 keyfile을 확인하라는 창이 뜨고 확인을 누르면 에러가 뜬다.

 

정확한 분석을 위해 Ollydbg로 확인해보자.

우선 언패킹을 하지 않았으므로 파일을 열고 POPAD 를 찾아간다.

 

위에서 설명했듯이 OEP 로의 JMP 전에 PUSH 되어있는 몇개의 명령어들이 Stolen Byte 이다. 

 

위 세 개의 명령어가 훔쳐진 코드이므로 메모장에 복사해 둔다.

 

 

이후 OEP 주소로 JMP 해보면, 아래 사진과 같이 위의 코드들이 NOP 처리 되어있는 것을 볼 수 있다.

 

아까 메모 해 둔 값들을 아래 사진과 같이 NOP 처리된 부분에 입력해준다.

 

이제 훔쳐진 코드를 되돌려 놨으니 OllyDump를 이용해 덤프해준다.

아래와 같이 Modify 값을 1000으로 바꿔줘야 한다.

 

확인해보면 실행되는 것을 확인 할 수 있고,

코드엔진에 인증값을 넣어주면 성공!

'[Riversing] > [코드엔진] BASIC' 카테고리의 다른 글

[코드엔진] basic11  (0) 2020.03.31
[코드엔진] basic10  (0) 2020.03.31
[코드엔진] basic8  (0) 2020.03.31
[코드엔진] basic7  (0) 2020.03.31
[코드엔진] basic6  (0) 2020.03.25