Reversing&Write up/Study 6

[HandRay] while문, for문 패턴, WinMain API?

while:#include int main(){ int i = 0;while(i < 10){printf(“Hello\n”);i++;} return 0; } 원하는 곳 초기화비교문과 jmp종속 명령과 증감식jmp mov 명령으로 int i = 0; 실행. (어셈블리 1번) cmp로 비교하고 JGE로 i < 10이 거짓일 때, while을 빠져나감. (어셈블리 2번) 참일 때, printf(“Hello\n”);를 실행하고 i값을 증가시킴. (어셈블리 3번) 종속 명령이 다 끝나고 나면 cmp부분으로 jmp함. (어셈블리 4번) for: #include int main(){int i; for(i = 0; i < 10; i++){printf(“Hello\n”);}return 0;} 초기화jmp증감식비교문과 jm..

[HandRay] 함수 호출 패턴, 구조체 패턴, 코드 패치

함수 호출 패턴 함수를 호출하는 쪽 : Caller호출되는 함수 : Callee 인자의 개수, 인자의 타입, 리턴 값을 보면 어떤 함수인지 찾기 쉬움. CALL 명령은 돌아가야할 주소를 stack에 push하고 함수로 jmp한다.__cdecl 함수 프롤로그PUSH EBP- 이전 EBP의 위치 기억MOV EBP, ESP- EBP를 ESP으로 옮김SUB ESP, 0C- 지역 변수의 크기 할당 함수 에필로그MOV ESP, EBP- ESP를 EBP로 옮김POP EBP- 기억했던 이전 위치를 다시 EBP로 옮김RETN- 돌아가야할 주소로 jmp 구조체 패턴 멤버들이 연속적으로 할당됨. 코드 패치 어셈블리어 영역, Data 영역을 변조하는 것이 가능하다.Code 영역 변경하는 방법어셈블리 영역을 클릭하고 space..

[HandRay] Main 함수 parameter, pointer 패턴

Main Func Argumentsint argc, char *argv[], char *envp[] argc - main 함수에 전달되는 인자의 개수argv - 넣은 문자열의 포인터 배열envp - 환경 변수 보통 3개의 인자를 넣고 호출하면 main 함수라는 것을 유추할 수 있음. 실행하면 이런 결과가 출력. OllyDBG에서 main 함수 인자를 전달하려면 Debug -> Arguments에 갑 입력. Pointer Compiled code Pattern LEA : Source Operand의 주솟값을 Destination에 저장하라는 의미.포인터 변수를 사용할 때 주로 사용되는 Assembly 명령어임.레지스터에 대괄호가 쳐져 있으면 주소를 간접 참조한 값을 의미함. AND : 두 개의 Operan..

[HandRay] OllyDbg 사용법과 Data Expression

Window XP를 쓰는 이유 : ASLR이 없기 때문임. Assembly : 기계어와 1대 1 대응. 프로그래밍 언어 중 가장 기계어와 가까움 (저급 언어) OllyDbgcode 영역 : 코드가 기계어와 어셈블리 명령으로 보임.Register 영역 : Register를 볼 수 있음.Dump 영역 : 메모리를 볼 수 있음.Stack 영역 : 현재 Stack 메모리의 값을 확인할 수 있음. ;(세미콜론) : 주석을 달 수 있음.F8 : Step Over 한 줄씩 내려가지만 함수를 다 돌리고 넘어감..F7 : Step Into 한 줄씩 내려가지만 함수 안으로 진입함.원하는 위치 클릭 + F4 : 원하는 위치로 한 번에 이동.F2 : Break Point 설정 / 해제.F9 : 쭉 실행하다가 Break Poi..

[HandRay] 핸드레이와 레지스터

프로그램의 제작 원리.c -> [compile] -> .obj -> [link] -> .exe 디컴파일 : .exe -> .c 실행 파일을 디버거로 돌려서 소스코드로 복원하는 것.핸드레이 : 디컴파일을 손으로 하는 것. ALU. 연산 장치. 전기적인 신호를 흘려보내서 연산을 진행하는 회로.I/O Unit. 모니터, 키보드 등 외부적인 부분과 통신을 위한 회로. 회로를 버스라고 부름.Register. CPU의 임시 변수. 매우 빠름.Control Unit. 현재 PC 상태, 다음에 어떤 연산을 해야할지. 연산의 결과를 알 수 있음. General Purpose Register (범용 레지스터) : 고루고루 쓰이는 레지스터.EAX : 연산의 결과를 저장, AX (16bit), AH(8bit), AL(8bit..

반응형