문제
문제 풀이
00401000 /$ 55 PUSH EBP
00401001 |. 8BEC MOV EBP, ESP
00401003 |. 51 PUSH ECX
00401004 |. 0FBE45 0C MOVSX EAX, BYTE PTR SS:[EBP+C]
00401008 |. 8B4D 08 MOV ECX, DWORD PTR SS:[EBP+8] ; 04_02_03.<ModuleEntryPoint>
0040100B |. 03C8 ADD ECX, EAX
0040100D |. 894D FC MOV DWORD PTR SS:[EBP-4], ECX
00401010 |. 8BE5 MOV ESP, EBP
00401012 |. 5D POP EBP ; kernel32.7C816D4F
00401013 \. C3 RETN
00401014 /$ 55 PUSH EBP
00401015 |. 8BEC MOV EBP, ESP
00401017 |. 6A 61 PUSH 61 ; /Arg2 = 00000061
00401019 |. 6A 0A PUSH 0A ; |Arg1 = 0000000A
0040101B |. E8 E0FFFFFF CALL 04_02_03.00401000 ; \04_02_03.00401000
00401020 |. 83C4 08 ADD ESP, 8
00401023 |. 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
00401025 |. 68 30504000 PUSH 04_02_03.00405030 ; |Title = "ITBANK"
0040102A |. 68 38504000 PUSH 04_02_03.00405038 ; |Text = "Failed"
0040102F |. 6A 00 PUSH 0 ; |hOwner = NULL
00401031 |. FF15 94404000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>] ; \MessageBoxA
00401037 |. 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
00401039 |. 68 40504000 PUSH 04_02_03.00405040 ; |Title = "ITBANK"
0040103E |. 68 48504000 PUSH 04_02_03.00405048 ; |Text = "Success"
00401043 |. 6A 00 PUSH 0 ; |hOwner = NULL
00401045 |. FF15 94404000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>] ; \MessageBoxA
0040104B |. 33C0 XOR EAX, EAX
0040104D |. 5D POP EBP ; kernel32.7C816D4F
0040104E \. C2 1000 RETN 10
#include <windows.h>
void method(char n1, int n2)
{
int result = n2 + n1;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
method(0x0A, 0x61);
MessageBoxA(NULL, "Failed", "ITBANK", MB_OK);
MessageBoxA(NULL, "Success", "ITBANK", MB_OK);
return 0;
}
여기서는 method 함수의 내부에서 MOVSX 가 존재한다.
형 변환이 발생한 것으로 유추하여 문제를 풀어나가야 한다.
'reversing > 리버싱 코드 복원' 카테고리의 다른 글
04.Function_Quiz_02_02 (2) | 2025.06.11 |
---|---|
04.Function_Quiz_02_01 (0) | 2025.06.11 |
04.Function_Quiz_01_02 (0) | 2025.06.11 |
04.Function_Quiz_01_01 (0) | 2025.06.11 |
03.Control_Statements_Quiz_07 (0) | 2025.04.22 |