Search

Calc.exe 분석

카테고리
[실습] 리버스 엔지니어링
상태
완료
게시일
2024/04/18
태그
리버싱

Calc.exe 분석

전체 직역

어셈블리어 해석

1.
20바이트 확보 후 scanf() 로 입력받음
2.
연산자에 -42 실행, 각 연산자 별 실행결과 ( + = 1, - = 3, * = 0 , / = 5)
3.
5보다 클수 없으니 5 초과 시 “잘못된 수식입니다” 출력(if문) 그 외에는 각 숫자별로 swich 문으로 실행
4.
swich 문 구현 전 if 문에서 5 기준으로 판별했기 때문에 스위치로 올 수 있는 수는 0, 1, 2, 3, 4, 5 총 6개이다, *=0 +=1 -=3 /=5 이므로 2, 4에 대한 예외처리도 진행되어야함 (어셈블리어 스위치 테이블 또한 그렇게 되어있다)

C언어 코드 구현

#include <stdio.h> int main(void) { int num1, num2; char opt; printf("연산할 수식을 입력하시오 : "); scanf("%d %c %d",&num1, &opt, &num2); opt -= '*'; if (opt > 5) { printf("잘못된 수식입니다"); } switch (opt) { case 0: printf("%d + %d = %d", num1, num2, num1 * num2); break; case 1: printf("%d - %d = %d", num1, num2, num1 + num2); break; case 2: printf("잘못된 수식입니다"); break; case 3: printf("%d - %d = %d", num1, num2, num1 - num2); break; case 4: printf("잘못된 수식입니다"); break; case 5: printf("%d / %d = %d", num1, num2, num1 / num2); break; } return 0; }
C
복사

연산 스위칭

각 어셈블리어 및 푸쉬하는 문자열을 바꿔서 연산 스위칭