본문 바로가기

Programming/Reversing9

리버싱 기초 정리 1 레지스터 EAX - 산술연산, 논리연산, 리턴값 전달 EBX - 간접연산, 주소참조 ECX - 루프, 반복 횟수 EDX - 보조 ESI - 원본주소 EDI - 목적지주소 EBP - 스택프레임의 기준점을 가리킴 ESP - 스택의 최상위 데이터를 가리킴 EIP 레지스터의 값을 변경할 수 있는 명령어 call, jmp, ret PUSH의 용도 3가지 함수 매개변수 전달 지역변수 공간 할당 백업 Stack의 용도 함수 매개변수 전달 지역변수 할당 데이터 백업 함수 호출 관련 정보 저장 Stack Frame 이란 Stack 공간내에서 함수가 사용하는 논리적 공간이다. 함수 프롤로그 push ebp mov ebp, esp 함수 에필로그 mov esp, ebp pop ebp ret Caller Saved Regist.. 2009. 6. 22.
WinDBG WinDBG WinDBG는 Mirosoft에서 무료로 제공하는 커널 디버거이다. 명령어 !process 지정한 프로세스에 대한 자세한 정보를 출력하여 준다. !thread 지정한 스레드에 대한 자세한 정보를 출력하여 준다. !pte 지정한 메모리의 페이지 디렉토리와 페이지 테이블 정보를 출력하여 준다. !stacks 시스템에 있는 모든 스레드의 스택 백트레이싱 내용을 출력하여 준다. dg (Display Seletor) 지정한 셀렉터에 대한 자세한 정보를 출력하여 준다. dt (Display Type) 지정한 포인터 주소를 지정한 Struct 구조로 보여준다. LN (List Nearest Symbols) 지정한 주소를 가장 근접한 심벌 이름으로 출력하여 준다. !dlls 현재 프로세스에 로드되어 있는 .. 2009. 4. 23.
IDIV IDIV 이전까지의 코드를 수행하게 되면, AL 에 83h 를 넣고, CBW 워드로 확장한다. 그리고, CL 에 10h를 넣는다. 아래와 같은 레지스터 값을 가지게 된다. 그리고 마지막, IDIV CL 을 수행하게 되면 다음과 같이 레지스터 값이 변한다. 미리 예상하기에는, EAX 00000F3F EDX 00000009 가 될것 같지만, 다르게 나온다. 왜일까. 나눠지는 값은 2바이트이다. 그러나, 나누는 값이 1바이트이다. 그래서, 나눠지는 값이 1바이트로 변한다. 83h 를 10진수로 바꾸면, -125이다. 10h 를 10진수로 바꾸면, 16이다. 손수 나눗셈을 해보면, 몫 : -7 나머지: -13 이 나온다. -7을 16진수로 바꾸면, F9 -13을 16진수로 바꾸면, F3 따라서,, 나머지와 몫을.. 2009. 4. 12.
ASM 1 ASM 1 - 2009/04/09 지역변수는 ebp - 로 접근 매개변수는 ebp + 로 접근 Add, Sub, Mul, Div # 산술 연산. AND, OR, XOR # 논리 연산 AND EAX, EBX XOR EAX, EAX 스택에 값을 저장한다. 백업 매개변수 전달 pop => 스택의 값을 뒤의 오퍼랜드에 저장. 후, esp - 4 > label || 명령 || Operands || ; 주석 Operands => 피연산자 들의 사이즈는 동일해야 한다. mov esp, ebp / 리눅스는 방향 반대 / 레지스터/메모리주소. || 레지스터/메모리주소/값 세그먼트 레지스터들끼리는 연산을 할 수 없다. mov eax, DS mov CS, eax .586 .model flat, stdcall option c.. 2009. 4. 9.
MASM32 / EditPlus 연동 에디트 플러스 MASM32 연동 - 2009/04/09 도구 -> 사용자 도구 구성 -> 그룹선택 -> 그룹이름 -> 'MASM'으로 변경 -> 추가 -> add new program * 3 -> / Assemble / Link / Execute / 실행시킨다. 끝. 이 글은 스프링노트에서 작성되었습니다. 2009. 4. 9.
Register Register - 2009/04/07 General Register Pointer Register Index Register Instruction Register Segment Register Flag Register Control Register Debug Register 범용 레지스터 l EAX (Extended Accumulator Register) [ 곱셈과 나눗셈 명령에서 자동으로 사용되고 함수의 리턴값이 저장되는 용도로도 사용된다. l EBX (Extended Base Register) [ ESI나EDI와 결합하여 인덱스에 사용된다. l ECX (Extended Counter Register) [ 반복 명령어 사용시 반복 카운터로 사용된다. ECX 레지스터에 반복할 횟수를 지정해 놓고 반복 .. 2009. 4. 8.