• 명령어 실습
- jmp [ADDR]
해당 주소로 EIP 변화 (해당 주소를 점프함)
00401004 주소에서 00401007 주소로 EIP 변경
F7로 한 줄씩 실행시키면 00401006 주소를 안 지나감
- push [REG] : REG값을 스택에 채움
push 100 명령을 사용하면 스택 공간에 쌓인다.
- pop [REG] : 스택에서 값을 빼서 REG에 채움
스택에 쌓여있던 100이 EAX에 넣어준다.
- call [ADDR] : 현재 EIP를 스택에 Push 하고, 피연산자로 EIP 변화
call 명령어를 실행시키면 스택에 call 명령어 실행이 끝나면 00401016 주소 밑에 있는 0040101B 주소로 return 할 수 있게 스택에 쌓인다.
- ret : 스택의 값을 빼서 EIP 변화
ret 명령어가 실행이 되면서 스택에 쌓여있던 return 주소로 EIP를 변화시켜준다.
- mov dst, src : Source에서 Destination으로 데이터를 복사
mov eax,1 명령어는 값을 eax 레지스터에 복사한다는 의미이다.
mov ebx,1 명령어는 값을 ebx 레지스터에 복사한다는 의미이다.
ex) mov eax, ecx : ecx 레지스터에 저장된 값을 eax 레지스터에 복사
mov eax, word ptr [num] : num의 주소가 가리키는 2바이트[dword] 값이 eax에 저장
mov eax, byte ptr [num] : num의 주소가 가리키는 1바이트[dword] 값이 eax에 저장
mov al, byte ptr ds:[esi] : esi의 주소값이 가리키는 reversing값 중 1바이트인 r을 eax에 저장
mov bl, byte ptr ds:[edi] : edi의 주소값이 가리키는 reversing값 중 1바이트인 r을 ebx에 저장
- lea [REG], src : REG에 우변의 주소값을 저장
lea esi, dword ptr ds:[40 A150] : 40A150의 주소가 가리키는 4바이트(dword) 값이 esi에 저장한다는 의미이다.
lea edi, dword ptr ds:[40A200] : 40A200의 주소가 가리키는 4바이트(dword) 값이 edi에 저장한다는 의미이다.
40 A150, 40A200 주소에 저장된 값 확인
- cmp [REG], [REG] : 두 개의 레지스터값을 비교
cmp eax, ebx : 두개의 레지스터에 저장된 값을 비교를 한다
je 0x401043 : ZF(제로 플래그) 값이 1이면 401043 주소로 EIP 변한해 준다.
*ZF(제로 플래그) : 연산의 결과가 0과 같을 경우 1로 설정되고, 그 외는 0으로 설정된다.
* jnz : ZF가 0이면 점프
* je : ZF가 1이면 점프
*jne : 비교한 값이 다를 경우 점프
'모의해킹 > 리버싱' 카테고리의 다른 글
Doom2(핵 만들기) (0) | 2023.07.11 |
---|---|
레지스터 (Register) (0) | 2023.07.08 |
Stack (스택) (0) | 2023.07.04 |
Code Engn (Basic RCE L01) (0) | 2023.06.28 |
Deep Dive Reversing (0) | 2023.06.27 |