일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- c++
- 퍼셉트론
- 리버싱
- 프로그래머스
- 백준
- 소프트맥스 함수
- 게임 프로그래밍
- Old-17
- 5585
- 크레인 인형뽑기
- 계단함수
- c언어 게임
- 10809
- Old-14
- webhacking.kr
- C언어
- JS
- 코드엔진
- 자바스크립트
- 웹해킹
- 코딩테스트 연습
- 자바
- boj
- tcp
- 딥러닝
- 네트워크
- 신규 아이디 추천
- old-1
- 웹케이알
- openCV
- Today
- Total
SteffenLee
[CodeEngn]basic09 본문
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 |