본문 바로가기
IT 보안

리버스 엔지니어링 조건문에서 자주 사용하는 명령어 종류 및 설명

by 떠도리c 2024. 9. 22.
반응형

리버스 엔지니어링 조건문에서 자주 사용하는 명령어 종류 및 설명

리버스 엔지니어링에서는 다양한 어셈블리 명령어를 이해하고 이를 통해 프로그램의 동작을 분석합니다. SHL, CMP, JNZ, JL, JMP, SUB, JZ, JA, JGE 등의 명령어는 특히 자주 사용됩니다.

  1. SHL (Shift Left): 첫 번째 피연산자의 비트를 두 번째 피연산자만큼 왼쪽으로 이동시키는 명령어입니다.
    MOV EAX, 2 ; EAX에 2를 설정
    SHL EAX, 1 ; EAX의 값을 왼쪽으로 1비트 이동
    결과적으로 EAX는 4가 됩니다.

  2. CMP (Compare): 두 피연산자를 비교하고 결과에 따라 상태 플래그를 설정하는 명령어입니다.
    MOV EAX, 5 ; EAX에 5를 설정
    CMP EAX, 3 ; EAX와 3을 비교
    결과적으로 EAX는 5로 유지되고, 상태 플래그는 설정됩니다.

  3. JNZ (Jump if Not Zero): 이전 연산의 결과가 0이 아닌 경우 지정된 주소로 점프하는 명령어입니다.
    CMP EAX, 5 ; EAX와 5를 비교
    JNZ Label ; EAX가 5가 아니면 'Label'로 점프
    만약 EAX가 5가 아니라면 'Label'로 점프합니다.

  4. JL (Jump if Less): 첫 번째 피연산자가 두 번째 피연산자보다 작은 경우 지정된 주소로 점프하는 명령어입니다.
    CMP EAX, 3 ; EAX와 3을 비교
    JL Label ; EAX가 3보다 작으면 'Label'로 점프
    만약 EAX가 3보다 작다면 'Label'로 점프합니다.

  5. JMP (Jump): 조건 없이 항상 지정된 주소로 점프하는 명령어입니다.
    JMP Label ; 'Label'로 점프
    언제나 'Label'로 점프합니다.

  6. SUB (Subtract): 첫 번째 피연산자에서 두 번째 피연산자를 빼는 명령어입니다.
    MOV EAX, 10 ; EAX에 10을 설정
    SUB EAX, 3  ; EAX에서 3을 뺌
    결과적으로 EAX는 7이 됩니다.

  7. JZ (Jump if Zero): 이전 연산의 결과가 0인 경우 지정된 주소로 점프하는 명령어입니다.
    CMP EAX, 5 ; EAX와 5를 비교
    JZ Label ; EAX가 5라면 'Label'로 점프
    만약 EAX가 5라면 'Label'로 점프합니다.

  8. JA (Jump if Above): 첫 번째 피연산자가 두 번째 피연산자보다 큰 경우 지정된 주소로 점프하는 명령어입니다.
    CMP EAX, 3 ; EAX와 3을 비교
    JA Label ; EAX가 3보다 크면 'Label'로 점프
    만약 EAX가 3보다 크다면 'Label'로 점프합니다.

  9. JGE (Jump if Greater or Equal): 첫 번째 피연산자가 두 번째 피연산자보다 크거나 같은 경우 지정된 주소로 점프하는 명령어입니다.
    CMP EAX, 3 ; EAX와 3을 비교
    JGE Label ; EAX가 3보다 크거나 같으면 'Label'로 점프
    만약 EAX가 3보다 크거나 같다면 'Label'로 점프합니다.

리버스 엔지니어링에서는 이러한 명령어들을 이해하고 활용하여 프로그램의 동작 원리를 분석합니다. 이러한 명령어들을 통해 프로그램의 흐름을 파악하고, 어떤 조건에서 어떤 동작이 수행되는지 이해하는 것이 중요합니다.

 

반응형