히공

코드엔진 - basic 09 본문

reverse engineering/CodeEngn

코드엔진 - basic 09

heegong 2020. 9. 16. 21:36
728x90

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
Comments