반응형
리버스 엔지니어링 조건문에서 자주 사용하는 명령어 종류 및 설명
리버스 엔지니어링에서는 다양한 어셈블리 명령어를 이해하고 이를 통해 프로그램의 동작을 분석합니다. SHL, CMP, JNZ, JL, JMP, SUB, JZ, JA, JGE 등의 명령어는 특히 자주 사용됩니다.
- SHL (Shift Left): 첫 번째 피연산자의 비트를 두 번째 피연산자만큼 왼쪽으로 이동시키는 명령어입니다.
결과적으로 EAX는 4가 됩니다.MOV EAX, 2 ; EAX에 2를 설정 SHL EAX, 1 ; EAX의 값을 왼쪽으로 1비트 이동
- CMP (Compare): 두 피연산자를 비교하고 결과에 따라 상태 플래그를 설정하는 명령어입니다.
결과적으로 EAX는 5로 유지되고, 상태 플래그는 설정됩니다.MOV EAX, 5 ; EAX에 5를 설정 CMP EAX, 3 ; EAX와 3을 비교
- JNZ (Jump if Not Zero): 이전 연산의 결과가 0이 아닌 경우 지정된 주소로 점프하는 명령어입니다.
만약 EAX가 5가 아니라면 'Label'로 점프합니다.CMP EAX, 5 ; EAX와 5를 비교 JNZ Label ; EAX가 5가 아니면 'Label'로 점프
- JL (Jump if Less): 첫 번째 피연산자가 두 번째 피연산자보다 작은 경우 지정된 주소로 점프하는 명령어입니다.
만약 EAX가 3보다 작다면 'Label'로 점프합니다.CMP EAX, 3 ; EAX와 3을 비교 JL Label ; EAX가 3보다 작으면 'Label'로 점프
- JMP (Jump): 조건 없이 항상 지정된 주소로 점프하는 명령어입니다.
언제나 'Label'로 점프합니다.JMP Label ; 'Label'로 점프
- SUB (Subtract): 첫 번째 피연산자에서 두 번째 피연산자를 빼는 명령어입니다.
결과적으로 EAX는 7이 됩니다.MOV EAX, 10 ; EAX에 10을 설정 SUB EAX, 3 ; EAX에서 3을 뺌
- JZ (Jump if Zero): 이전 연산의 결과가 0인 경우 지정된 주소로 점프하는 명령어입니다.
만약 EAX가 5라면 'Label'로 점프합니다.CMP EAX, 5 ; EAX와 5를 비교 JZ Label ; EAX가 5라면 'Label'로 점프
- JA (Jump if Above): 첫 번째 피연산자가 두 번째 피연산자보다 큰 경우 지정된 주소로 점프하는 명령어입니다.
만약 EAX가 3보다 크다면 'Label'로 점프합니다.CMP EAX, 3 ; EAX와 3을 비교 JA Label ; EAX가 3보다 크면 'Label'로 점프
- JGE (Jump if Greater or Equal): 첫 번째 피연산자가 두 번째 피연산자보다 크거나 같은 경우 지정된 주소로 점프하는 명령어입니다.
만약 EAX가 3보다 크거나 같다면 'Label'로 점프합니다.CMP EAX, 3 ; EAX와 3을 비교 JGE Label ; EAX가 3보다 크거나 같으면 'Label'로 점프
리버스 엔지니어링에서는 이러한 명령어들을 이해하고 활용하여 프로그램의 동작 원리를 분석합니다. 이러한 명령어들을 통해 프로그램의 흐름을 파악하고, 어떤 조건에서 어떤 동작이 수행되는지 이해하는 것이 중요합니다.
반응형
'IT 보안' 카테고리의 다른 글
PE 포맷에서의 사용하는 확장자 및 섹션에 대한 설명 (0) | 2024.09.23 |
---|---|
리버스 엔지니어링 레지스터 종류 및 설명 (0) | 2024.09.22 |
다크넷(Darknet) 정보 사이트 모음 (0) | 2024.09.22 |
IDS 룰 종류 및 설명 (0) | 2024.09.22 |
자주 탐지되는 소프트웨어 취약점 공격 URL URI (2) | 2024.09.22 |