본문 바로가기

Programming/Hacking & Security48

[Reversing] MUL, DIV By 용호 2010년 5월 12일 중간 점검 문제 1. 스택프레임설정 2. 지역변수 설정(4byte, 4byte, 8byte 3개의 지역변수) 3. 첫번째 지역변수(4byte)에 31323334h를 넣는다. 4. 두번째 지역변수(4byte)에 35363738h를 넣는다. 5. 첫번째 지역변수의 값 전체를 movsb를 사용하여서 3번째 지역변수에 넣는다. 6. 3번째 지역변수의 5를 실행하고 남은 공간에 두번째 지역변수의 값을 movsw를 사용하여서 넣는다. 7. 스택프레임 정리 Edi 값은 자동으로 다음 주소를 가르키므로 두번째에서는 이미 edi가 다음 주소값을 가지고 있으므로 지정해줄 필요가 없다. Esi는 지정해주지 않으면 해당 edi에 주소값이 들어가게 된다. 1. Eax에 16진수 1234을 저장 2-1. .. 2010. 5. 21.
[Reversing] 지역변수 할당(sub이용), lea, rep By 용호 2010년 5월 11일 화요일 Sub 명령을 이용하면 지역변수를 할당할 공간이 스택에 쌓이게 된다. 여기서 sub esp, 8은 스택의 공간 하나의 크기가 4이므로 두개의 공간이 생성된다. 아래에서 보면 스택에 두개의 공간이 생긴 것을 볼 수 있다. 그 다음 mov 명령을 이용해서 할당된 공간에 값을 초기화 한다. 여기서 '[ ]'안의 값은 주소를 나타낸다. LEA는 주소를 복사하는 명령이므로 아까와는 다르게 ESI와 EDI에 주소값이 들어가게 된다. MOVS명령을 이용하면 ESI의 주소값을 EDI로 DWORD 크기만큼 복사한다. Rep(repeat) : 반복 Rep를 사용하기 위해서는 ecx 값의 초기화가 선행되어야 한다. MOVS, SCAS, STOS등 여러 명령어에 접두사 형식으로 사용되며 ECX에.. 2010. 5. 14.
[Reversing] 기본 연산(mov, push, pop) By 용호 2010년 5월 11일 화요일 PUSH : 스택에 값을 저장 POP : 스택의 가장 최근 값을 빼고 인자에 대입 MOV : 두번째 인자의 값을 첫번째 인자에 대입 현재 EAX를 PUSH한 상태이므로 스택에 EAX값이 들어갔다. EAX값은 10… 그 다음 EBX를 POP하는데 나는 EBX를 PUSH한적이 없는데 어떻게 POP을 할까 라는 생각을 했었는데 개념을 잘못 생각하고 있었다. POP을 한다는것은 현재 스택에 가장 위에 있는 데이터를 꺼내서 대입한다는 의미였다. 그러므로 POP을 하면 위에서 PUSH한 EAX값 10을 EBX에 대입한다는 의미이다. 다음과 같이 POP을 했더니 EBX에는 EAX값 10이 들어간 것을 확인할 수 있다. 여기서는 EAX에 0을 넣고 0B값을 AH에 넣어준다. AH는 EAX.. 2010. 5. 14.
[Reversing] intro (masm32, odbg 소개) By 용호 2010년 5월 10일 . : 지시자 .model : 메모리의 형태, stdcall은 함수호출 규약 Option casemap:none : - .code : 여기부터 코드의 시작 Main proc : main함수 시작 Push ebp : 이전 함수의 stack frame 시작점을 백업 Mov ebp, esp : 새로운 stack frame을 오픈(새로운 함수의 시작점이 ebp에 저장됨 - esp가 최근 데이터의 주소 값을 가지고 있으므로) → 여기까지가 함수 프롤로그(prologue) - Stack Frame을 설정하는 코드 Mov esp, ebp : esp가 실행 중인 함수의 스택 프레임 시작점을 가리키게됨 이곳에는 이전 함수의 스택프레임 시작 주소가 저장되어 있음 Pop ebp : esp가 가르키는 .. 2010. 5. 14.