728x90
switch.exe
분석
switch 문으로 num(임의변수명) =1 이 스위치 문으로 들어가 동작
ebp-4 와 0 을 비교할 때 flag 변화 ****
상태 플러그인 ZF :
산술 (1 - [ebp-4] ) 의 결과가 0 이면 1로 그렇지 않으면 0 으로 설정 됨
JE (Jump if Equal :
CMP 로 비교했을 때 두 값이 같으면 점프
코드 구현
#include <stdio.h>
int main() {
int a; // sub esp, 0x8
a = 1;
switch (a)
{
case 0: // cmp dword ptr ss:[ebp-0x4], 0x0 ; je 0x010F1067
printf("0을 입력했습니다.\n");
break;
case 1: // cmp dword ptr ss:[ebp-0x4], 0x1 ; je 0x010F1076
printf("1을 입력했습니다.\n");
break;
case 2: // cmp dword ptr ss:[ebp-0x4], 0x2 ; je 0x010F1085
printf("2을 입력했습니다.\n");
break;
default: // jmp 0x010F1094
printf("해당사항 없음.\n");
break;
}// end switch
return 0;
} // end main
switch2.exe
임의 변수 num = 1;
cmp dword ptr ss:[ebp-0x4], 0x3 ; ebp -4 와 3을 비교
ja switch2.DB109F ; if (ebp >3) ; jump 13E109F
mov ecx,dword ptr ss:[ebp-4] | [ebp-4] 값을 ecx에 저장
코드구현
#include <stdio.h>
int main() {
int num = 1;
switch (num)
{
case 0: // cmp dword ptr ss:[ebp-0x4], 0x0 ; je 0x010F1067
printf("0을 입력했습니다.\n");
break;
case 1: // cmp dword ptr ss:[ebp-0x4], 0x1 ; je 0x010F1076
printf("1을 입력했습니다.\n");
break;
case 2: // cmp dword ptr ss:[ebp-0x4], 0x2 ; je 0x010F1085
printf("2을 입력했습니다.\n");
break;
default: // jmp 0x010F1094
printf("해당사항 없음.\n");
break;
}// end switch
return 0;
} // end main
// goto 문으로 구현
#include <stdio.h>
int main() {
int num =3;
switch (num)
{
case 0:
goto ZERO;
case 1:
goto ONE;
case 2:
break;
default:
goto OTHER;
}
ZERO:
printf("0을 입력했습니다.\n");
goto END;
ONE:
printf("1을 입력했습니다.\n");
goto END;
TWO:
printf("2을 입력했습니다.\n");
goto END;
OTHER:
printf("해당사항 없음.\n");
goto END;
END:
return 0;
}// end main
'Reversing' 카테고리의 다른 글
Basic_BOF 1 (0) | 2021.08.25 |
---|---|
if.exe ; if_hard.exe (0) | 2021.07.21 |
Reversing 01. (0) | 2021.07.21 |
리버스 엔지니어링 개요 (0) | 2021.07.20 |