일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 한국산업인력공단
- 백엔드입문
- 무료교육
- 가명정보처리
- package.json
- 개인정보보호위원회
- 모듈러 연산
- 곱셈 암호
- 한국정보보호산업협회
- 백엔드
- 한국정보보호산업협회기자단
- pwnable.tw
- 국가인적자원개발컨소시엄
- 포너블
- 개인정보보호교육
- 동적타이핑
- 마감임박
- 유클리드_알고리즘
- package-lock.json
- 디오판투스 알고리즘
- 호이스팅
- 개인정보보호
- function scope
- arrow function
- node.js
- 덧셈 암호
- 개인정보안전성
- 웹 프레임워크
- Writeup
- 확장 유클리드 알고리즘
- Today
- Total
짱짱해커가 되고 싶은 나
[Easy UnpackMe] write up 본문
프로그램을 실행 시켰더니 그냥 꺼졌다.
띠용
readme 파일을 확인해보니 OEP를 찾으라고 한다.
OEP란?
unpacking을 할 때 packing되기 전으로 돌아가는 곳이라고 한다.
그래서 OEP를 알면 원본 파일의 분석이 가능하다고 한다.
일반적인 packer는 처음에 모든 레지스터들을 스택에 push한 뒤 unpack 작업을 위한 루틴을 시작한다고 한다. (백업용)
unpack루틴이 끝난 후에 원래 프로그램의 entry point를 시작하기 전에 처음에 스택에 저장한 레지스터들을 pop하는 형식이다. (pushad와 popad가 한쌍이 된다)
처음 push로 스택에 레지스터들을 올려놓은 후 EDI 레지스터에 bp를 걸면(F2) unpack루틴이 끝난 후에 프로그램을 시작하기 위해 레지스터드를 pop하는 시점에 bp가 걸린다. 이 때 return address를 확인하면 OEP를 찾을 수 있다.
동적 분석이 필요한 것 같으니 Ollydbg로 분석해보겠다.
위처럼 처음에 eax ebx esi edi 등을 push로 스택에 집어넣는 모습을 확인할 수 있었다.
그리고 아래 부분에서는 pop eax ecx 등을 하는 모습을 확인할 수 있다.
일단 bp를 걸고 디버깅을 시작해보겠다. (F4)
이상하다. 예상과 다르고 pushad랑 popad도 아니다.
EOP 전에 nop이 잔뜩이라고 해서 설마 설마 하는 마음에 처음 시작주소 00401150을 써보디 정답이다.. 엇.. 올리디버거가 다 언패킹해서 시작 주소까지 알려준..것이다. .. 머쓱..;;
이 부분이 unpacking 했을 때 시작 부분인 것 같다. GetProcAddress 등이 있는 걸보면
이 부분이 맞았다. 밑에 보면 마지막에 언패킹이 끝나고 00401150으로 jump하는 것을 확인할 수 있다.
이..이렇게 대충 풀어도 되는 걸까..
'reversing > reversing.kr' 카테고리의 다른 글
[replace] write up (0) | 2020.11.29 |
---|---|
[Music Player] write up (0) | 2020.11.22 |
[Easy Keygen] writeup (0) | 2020.11.08 |