본문 바로가기
IT 보안

악성코드 고급 분석의 기초 명령어 설명

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

단순 명령어

  • mov
    - 단순하고 널리 사용됨, 데이터를 다른 위치로 옮기는데 사용. 메모리를 읽고 쓰는 명령
    - 형식 : mov 목적지, 소스 (인텔 형식)
명령어
설명
mov eax, ebx
EBX의 내용을 EAX 레지스터로 복사한다.
mov eax, 0x42
값 0x42를 EAX 레지스터로 복사한다.
mov eax, [0x4037C4]
메모리 위치 0x4037C4에 있는 4바이트 값을 EAX 레지스터로 복사한다.
mov eax, [ebx]
EBX 레지스터가 명시한 메모리 위치에 있는 4바이트 값을 EAX 레지스터로 복사한다.
mov eax, [ebx+esi*4]
ebx+esi*4 연산 결과가 명시한 메모리 위치에 있는 4바이트 값을 EAX 레지스터로 복사한다.
* mov eax, ebx+esi*4(대괄호 없이) 이런 명령어는 유효하지 않다. 대괄호가 없어서..
 
 
  • lea
    - mov와 유사한 명령어. 유효 주소를 로드하라는 의미
    - 메모리 주소를 목저지로 넣을 때 사용한다.
    - 형식 : lea 목적지, 소스
    - lea는 메모리 주소를 참조 하는데만 사용하는것은 아님. 값을 계산할 때도 유용 ex) lea ebx, [eax*5+5]
명령어
설명
lea eax, [ebx+8]
EBX+8을 EAX에 저장한다.
mov eax, [ebx+8]
EBX+8에 명시된 메모리 주소에 있는 데이터를 로드한다.

 

 

산술 연산

  • add
      - 덧셈
      - 형식  : add 목적지, 값

 

  • sub
      - 뺏셈
      - 형식 : sub 목적지, 값
      - 두 주요 플래그를 수정하는데, 제로 플래그(ZF)와 자리 올림(CF) 플래그다.
      ZF는 결과 값이 0이면 설정되고, CF는 목적지가 빼려는 값보다 작을 때 설정된다.

 

  • inc
      - 레지스터 하나 증가
      - 형식 : inc 레지스터

 

  • dec
      - 레지스터 하나 감소
      - 형식 : dec 레지스터

 

  • mul
      - 항상 EAX에 값을 곱한다.
      - 결과는 64비트 값으로 두 레지스터 EDX와 EAX에 저장한다.

 

  • div
      - EDX와 EAXdml 64비트 값을 값으로 나눈다.

 

  • xor
      - 레지스터를 0으로 설정하는 빠른 방법

 

  • shr, shl
      - 목적지 오퍼랜드를 오른쪽, 왼쪽으로 count 오퍼랜드에 명시한 비트 수만큼 비트를 이동
      - 시프트는 곱셈 최적화에 자주 사용된다. 
      * xor, or, and, shl, ror, shr, rol 명령어를 반복적으로 사용하는 함수가 무작위로 나오는 것 같다면 함호화나 압축 함수일 가능성이 있다.

 

  • nop
      - 아무런 일도 하지 않는다.
      - nop이 보이면 그냥 다음 명령어로 넘어가 실행하다.
명령어
설명
sub eax, 0x10
EAX에서 0x10을 뺌
add eax, ebx
EAX에 EBX를 더해 결과를 EAX에 저장함
inc edx
EDX를 1만큼 증가시킴
dec ecx
ECX를 1만큼 감소시킴
mul 0x50
EAX에 0x50를 곱해 결과를 EDX:EAX로 저장한다
div 0x75
EDX:EAX에 0x75를 나눠 몫을 EAX에, 나머지를 EDX에 저장한다.
xor eax, eax
EAX 레지스터를 비움
or eax, 0x7575
EAX를 0x7575으로 논리적 or 연산 수행
mov eax, 0xA
shl eax, 2
EAX 레지스터를 2비트만큼 좌측으로 시프트함. 1010(바이너리 0xA)가 왼쪽으로 2비트
움직여서 101000 (0x28)이 되므로 두 명령어 결과로 EAX = 0x28가 된다.
mov bl, 0xA
ror bl, 2
BL 레지스터를 2비트만큼 우측으로 순환함. 1010이 우측으로 2비트 순환해
10000010이 되므로 두 명령어 결과로 BL = 10000010가 된다.
 
반응형