코드엔진 - 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