일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 워 게임
- vsCode
- 뭉뭉
- 강의
- 변수
- 히공
- probgame
- 드림핵
- write up
- 리버스 엔지니어링
- 코드엔진
- 풀이
- 리버싱
- 라이트 업
- Basic
- 2021
- 파이썬
- 라이트업
- ctf
- write-up
- reversing
- c언어
- 라업
- PYTHON
- hackingcamp
- ShaktiCTF
- 시탭
- web
- reversing.kr
- 해킹캠프
히공
코드엔진 - basic 09 본문
9번 문제를 풀어보겠습니다.
이러한 문제입니다.
자 StolenByte를 먼저 알아야 합니다.
StolenByte
StolenByte란 직역하면 훔친 코드 입니다. 패커가 훔친 코드의 일부분 입니다.
UPX에서는 popad후 jmp전 일정 바이트를 넣습니다.
실행했을때 저런 messagebox가 나옵니다.
pushad 발견
popad 후 jmp
원본 코드입니다. 뭐가 많이 비어있습니다.
어라? 이상하게 MessageBoxA를 호출하는데 push를 한번만 했습니다.
docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxa
MessageBoxA function (winuser.h) - Win32 apps
Displays a modal dialog box that contains a system icon, a set of buttons, and a brief application-specific message, such as status or error information. The message box returns an integer value that indicates which button the user clicked.
docs.microsoft.com
msdn으로 보면 인자가 총 4개인데 신기합니다.
바로 StolenByte때문입니다. 앞에 3번의 push를 oep에 오기전에 합니다.
그리고 nop의 갯수를 봅시다. (nop은 아무런 역할이 없는 코드이며, 1바이트를 차지한다.)
12개 입니다.
popad후 push하는거의 opcode를 봐봅시다. 6A,00,68,00,20,40,00,68,12,20,40,00 총 12개입니다. nop갯수하고 맞아 떨어집니다. 신기하져?
StonlenByte는 opcode로 표현하니깐
6A0068002040006812204000 입니다.
정답 : 6A0068002040006812204000
'reverse engineering > CodeEngn' 카테고리의 다른 글
코드엔진 - basic 11 (0) | 2020.09.22 |
---|---|
코드엔진 - basic 10 (4) | 2020.09.21 |
코드엔진 - basic 08 (0) | 2020.09.16 |
코드엔진 - basic 07 (0) | 2020.09.16 |
코드엔진 - basic 06 (6) | 2020.09.16 |