SteffenLee

[CodeEngn]basic09 본문

Reversing/CodeEngn

[CodeEngn]basic09

SteffenLee 2018. 4. 8. 22:27

CodeEngn 9번 풀이입니다.

 

 

 

 

 

Challenges : Basic 09

 

Author : abex

 

 

Korean :
StolenByte를 구하시오
Ex) 75156A0068352040

English :
Find the StolenByte
Ex) 75156A0068352040  

 

StolenByte를 구하는 문제입니다.

 

StolenByte : 훔쳐진 코드로 코드 일부분을 OEP로 점프하기 전에 PUSH합니다. StolenByte는 주로 패커에서 자주 보입니다.

그리고 프로그램을 덤프 할 때 StolenByte를 복구하지 않으면 프로그램이 정상적으로 작동 안 할 수 있습니다.

 

 

프로그램을 실행 시켜보겠습니다.

 

 

 

 

 

 

 

 

이런 식으로 나오는 군요

 

그럼 PEiD로 패킹이 되어있는지 확인해봅시다.

 

UPX로 패킹이 되어있군요.

 

그럼 이제 올리디버거로 언팩킹을 한후 덤프를 하여 프로그램을 실행시켜 보았습니다.

 

이런 식으로 오류가 뜹니다.

이건 아까 말했듯이 StolenByte를 복구를 하지 않아서 입니다.

 

그럼 덤프한 프로그램을 올리디버거로 열어보겠습니다.

이렇게 되있는데요, 제가 BP를 건 지점이 MessageBox를 호출하는 부분입니다.

MessageBox함수를 살펴보면

파라미터 값은 4개로 이루어집니다.

그런데 함수 호출하는 부분은 1개의 파라미터 값 밖에 없군요.

그럼 나머지 파라미터 값을 찾기 위해 언패킹하기 전에 파일을 올리디버거로 열어보겠습니다.

(이런 식으로 진행하는 이유는 제가 프로그램상에서 언팩킹을 진행해보니 본래 코드 부분이 잘 안나와서 이렇게 진행합니다.)

 

 

POPAD 이후에 PUSH가 일어납니다.

아까 메세지박스의 파라미터 값이 3개가 부족했는데 PUSH연산이 3번 진행되는군요.

저 PUSH연산이 훔쳐진 코드일지도 모릅니다.

 

그럼 저 PUSH 연산

PUSH 0

PUSH 00402000   

PUSH 00402012

이걸 기억해두고 아까 언팩킹한 프로그램으로 다시 돌아가서 저 값을 넣어줍시다.

이런 식으로 입력을 해줍니다.

 

그러면

이 상태가 되는데 덤프를 떠주시면 됩니다.

 

덤프를 뜨실때 OEP를 1000으로 바꿔주셔야됩니다.

 

그리고 프로그램을 실행시키면 정상적으로 구동이 되는 것을 확인할 수 있습니다.

 

 

플래그는 OPcode를 입력하시면 됩니다.

 

 

감사합니다.

 

 

 

 

 

'Reversing > CodeEngn' 카테고리의 다른 글

[CodeEngn]basic 08  (0) 2018.01.11
[CodeEngn]basic 07  (0) 2018.01.10
[CodeEngn]basic 06  (0) 2018.01.07
[CodeEngn]basic 05  (0) 2018.01.05
[CodeEngn]basic 04  (0) 2018.01.03
Comments