본문 바로가기

WHOIS/Reversing

Whois 4주차 리버싱 핸드레이 과제

1-1. 어셈블리 코드

push ebp

mov ebp,esp

sub esp,0x10

mov DWORD PTR [ebp-0x4],0xa

mov eax,DWORD PTR [ebp-0x4]

mov DWORD PTR [ebp-0x8],eax

mov eax,DWORD PTR [ebp-0x8]

imul eax,eax,0x17

mov DWORD PTR [ebp-0x8],eax

mov eax,DWORD PTR [ebp-0x8]

sub eax,DWORD PTR [ebp-0x4]

mov DWORD PTR [ebp-0xc],eax

mov eax,DWORD PTR [ebp-0xc]

cdq

idiv DWORD PTR [ebp-0x4]

mov DWORD PTR [ebp-0x4],eax

mov eax,0x0

leave

ret

 

1-2. c 핸드레이 코드

int main(){

 

    int a, b, c, d;

 

    d = 10; 

    c = d;

    c = c * 23; 

 

    b = c - d;

    d = b / d;

 

    return 0;

}

 

 

2-1. 어셈블리 코드

push ebp;

mov ebp,esp;

sub esp,0x3fc;

mov DWORD PTR [ebp-0x400],0x0;

lea edx,[ebp-0x3fc];

mov eax,0x0;

mov ecx,0xf9;

mov edi,edx;

rep stos DWORD PTR es:[edi],eax;

lea eax,[ebp-0x400];

mov DWORD PTR [eax],0x6c6c6548;

mov DWORD PTR [eax+0x4],0x6f57206f;

mov DWORD PTR [eax+0x8],0x21646c72;

mov DWORD PTR [eax+0xc],0x4f48570a;

mov DWORD PTR [eax+0x10],0x4a205349;

mov DWORD PTR [eax+0x14],0x474e414a;

mov WORD PTR [eax+0x18],0x217e;

mov BYTE PTR [eax+0x1a],0x0;

sub esp,0xc;

lea eax,[ebp-0x400];

push eax;

call 0x8049030; puts_plt

add esp,0x10;

mov eax,0x0;

leave;

ret;

 

2-2. c 핸드레이 코드

#include <stdio.h>

#include <string.h>

 

int main(){

 

        char arr[0x3f8] = {0,};

        strcpy(arr,"Hello World!\nWHOIS JJANG~!");

        puts(arr);

 

        return 0;

}

 

2-2 핸드레이 코드 상에서는 strcpy 함수를 사용하지만 컴파일 최적화 과정으로 인해 strcpy가 없어지고 mov 명령어로 문자열을 집어 넣고 있다

 

 

 

 

 

'WHOIS > Reversing' 카테고리의 다른 글

Whois 5주차 리버싱 문제 풀이 과제  (0) 2021.11.06