본문 바로가기

Programming/Hacking & Security48

[Reversing] SEH by 용호 2010년 5월 18일 금요일 컴파일 아래의 프로그램은 Microsoft의 Windbg 이다. SEH는 다음 에러 핸들러의 위치를 가진 Next 포인터와 핸들러를 가진 linked list이다. Dg는 GDT를 참조하는 명령어 아래의 exception registration record 구조체에 Next와 Handler가 존재하는 것을 볼 수 있다. Dg fs를 하면 fs의 정보가 나오는데 fs:[0]을 찾기 위해 Base 주소를 참조한다. 주소를 대입해서 따라 들어가보면 Next와 Handler가 위치한 주소값을 확인할 수 있다. 다음 코드를 수행하면 SEC가 추가된 것을 확인할 수 있다. 다음 div 부분에서 0으로 나눴기 때문에 예외가 발생할 것이다 아래에 Integer divide-by-zero .. 2010. 5. 31.
[Reversing] Struct (구조체) by 용호 2010년 5월 27일 목요일 비쥬얼 스튜디오 6.0이후 2003버젼부터 Stackoverflow방지 하기 위해 Security Cookie가 추가되었다. 4byte 랜덤 값을 xor 시켜서 스택에 넣어둔다. 구조체는 함수의 인자로 여러 개의 변수를 한꺼번에 넘겨주므로 다음과 같이 sub를 이용해서 인자를 한번에 넘겨준다. Struct는 가장크기가 큰 자료형을 기본 자료형으로 삼고 공간을 할당한다. Ex ) char a, int b, char c -> 12byte char a, char b, int c -> 8byte Struct a{ Char name[18]; Int age; }; 로 선언을 해도 공간은 24byte가 할당된다. (1Ch = 28, 28에서 security_cookie 크기를 빼면 24.. 2010. 5. 31.
[Reversing] 반복문 문제 by 용호 2010년 5월 26일 수요일 문제1 답 Tip) 아래에서 test edx, edx 를 한 것은 나머지를 구하기 위한 것이다. 그러므로 % 연산을 사용한 것이다. 문제2 답 문제3 답 Tip) 반복문 안에 반복문이 또 들어가는 경우 코드가 복잡해 지므로 body를 먼저 찾으면 구조가 눈에 들어온다. 2010. 5. 26.
[Reversing] 반복문의 동작 원리 by 용호 2010년 5월 25일 화요일 401025 부분이 반복되는 부분 다음 구문은 무한 루프의 while을 나타낸다. (while(1)) 아래 처음 cmp부분은 if문을 나타낸다. 이어서 아래에 또다시 cmp가 나오는데 else if 일까 아니면 새로 시작하는 if 일까?, 새로시작하는 if 구문이다. 이유는 만약 else if 또는 else 라면 jmp 되는 곳이 같아야 한다. 하지만 위에선 401020으로 jmp를 하고 아래에선 401050으로 jmp를 수행한다. 다음과 같이 위의 if문에서 jmp되는 곳과 아래의 조건의 jmp되는 곳이 같으므로 401050부분은 Else if 문을 의미한다. 여기서 조건이 두개라는 것은 if 문 안의 if 이거나 and(&&), or(||) 연산자를 이용한 조건이라는 의.. 2010. 5. 26.