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 명령어로 문자열을 집어 넣고 있다