본문 바로가기

study/악성코드분석&리버싱

x86 디스어셈블리

728x90

shadow(ollydbg와 같음)에서 파일을 열고 레지스터와 스택의 변화를 보겠습니다.

 

mov 실습

>push ebp

ebp의 값인 0012fff0이 하단 레지스터에 추가된 것을 확인하였습니다.

>mov ebp, esp

esp를 ebp로 바꿉니다. 현재 esp에 있는 값은 예전의 ebp값이기 때문에, 새로운 함수의 스택 명령을 위해 현재의 시작지점으로 바꿉니다.

>sub esp, 8

8을 빼고 ffb8이 되었습니다. 

>mov ebp-4, 22334455

>mov ebp-8, 0

을 수행하고 각 자리에 22334455와 0값이 들어가 있게되었습니다.

>mov esi, ebp-4

>mov edi, ebp-8이 되어서 각 값이 들어갔습니다.

>mov esp, ebp 를 하게되어 esp값에 이전 ebp값이 들어갔고, 

>pop ebp 까지 완료되었습니다.

 

lea 실습

현재는 ebp값이 0012fff0이지만, mov ebp, esp 명령으로 인해 0012ffc0값으로 변경될 것입니다.

12ffc0- 4를 하면 12ffbc가 나옵니다.

이 상태에서 esp는 사용하지 않고, ebp-4위치에 00400000값을 mov하겠다라는 뜻입니다.

다음 명령어를 행하면 스택부분에 0012ffbc부분이 0040000이 아래처럼 들어갈 것입니다.

eax에 ebp-4의 값을 저장. 400000을 eax에 넣겠다는 뜻입니다.

mov는 주소값 안에 들어있는 값을 넣는 것이였는데, lea는 그 주소자체를 가져오라는 뜻입니다. 주소값!= 12ffbc

 

>mov ebx, dword ptr ds:[eax] // eax는 지금 400000이고, 그 400000이 가르키는 위치의 값을 ebx에 넣어라. 

레지스터윈도우의 eax부분을 클릭한 뒤 우클릭> follow in dump

400000의 위치에 있는 값을 확인해보면 pe파일의 시작지점부분입니다. 

리틀엔디언 표기법으로 인해 4d 5a 90 00이 역으로 ebx에 들어가게 되어 00 90 5a 4d 로 되어있는 것으로 확인가능합니다.

다음 mov edx, dword ptr ds: [ecx]부분은 400000이 edx가 들어간 것을 확인하였습니다.

 

>mov esp, ebp

>pop ebp

이 두개는 함수가 끝날 때 이전의 자기자신을 호출하던 함수가 사용하던 스택을 돌려주기위해서 하는 함수의 에필로그 부분입니다. 

 

jmp 실습

.586
.model flat, stdcall
option casemap:none 

.code 
main proc
push ebp
mov ebp, esp
sub esp, 8h //esp를 8바이트만큼 이동시킨다.

mov dword ptr [ebp-4], 10h //ebp-4의 위치에 10h(헥사값)을 넣습니다.
mov dword ptr [ebp-8], 20h //ebp-8의 위치에 20h를 넣는다.

mov eax, dword ptr [ebp-4] //eax레지스터에는 10이 들어가게 된다.
mov ebx, dword ptr [ebp-8] //ebx레지스터에는 20이 들어가게 된다.

Start:
inc eax //10에서 11로 변경된다.
cmp eax, ebx //두개를 비교한다.
je Exit //비교값이 같으면 exit으로가라. 하지만 지금 같지않아서 다음으로 넘어감.
ja Exit //eax>ebx이면 exit수행. 이것도 조건충족되지않음
jmp Start //start위치로 바로 점프해라. 위로 돌아가서 하나씩 늘어나기를 반복해서 eax가 늘어난다. ...

Exit:
pop ebp
retn

main endp
end main

12ffbc에는 10, 12ffb8에는 20이 들어간 것을 확인하였습니다.

eax부분에 앞서 넣었던 10, ebx부분에 20이 들어가게 되었습니다.

10에서 11로 값이 증가하였습니다.

비교하여 값이 같아질때까지 실행이 되면,

증가시키는 앞으로 돌아가는 것이 아니라 jump is taken 이 보이고 값이 20 20 으로 같아져 401023주소로 jump하게 됩니다.

해당 주소는 >pop ebp 를 실행하는 곳이기때문에 명령어를 실행하고 종료하게 됩니다. 

728x90
반응형