Security ★ Development(154)
-
리버스엔지니어링 문제 1
http://codeengn.com/challenges/basic/01 파일을 받아 더블클릭하여 실행하면 Make me...가 나오고 다음으로 Nah... This is not a CD-ROM... 이 나옵니다. CD-ROM으로 인식시키기 위해 GetDriveTypeA의 리턴값을 바꿔야한다고합니다. 해당 파일의 어셈블리 부분입니다.밑에 2개의 분기문이 있고 OK, 부분을 출력해야 정답이 됩니다. 분기문을 보면 00401026부분 위에 CMP EAX, ESI가 있습니다. JE명령이기 때문에 ==일때 조건문을 실행합니다. 그럼 EAX와 ESI의 값이 같아야 한다는건데 브레이크 포인트를 걸고 진행해보면 해당 위치에 도달했을 시 EAX는 1이고 ESI는 3의 값을 가집니다. GetDriveTypeA를 호출하는 ..
2015.03.22 -
WFP Driver programming
이번에는 WFP(Windows Filtering Platform)에 대해 간단하게 정리해보겠습니다. WFP는 NDIS의 다음 버전으로 네트워킹 스택에서 발생하는 여러 정의된 이벤트에 Callout이라는 것을 걸어서 이벤트 핸들링 처럼 처리하는 방식입니다. 자료는 NDIS보다 훨씬 더 부족합니다. 구글에서 wfp라고 검색하면 유엔세계식량계획이 먼저 나오고 wfp or wndows filt... 풀네임과 기타 키워드를 같이 검색하면 페이지조차 얼마 안됩니다. 처음 막 할때는 막막했습니다... ㅎㅎ NDIS는 네이버 블로그라도 좀 있는데 WFP는 전멸. ... NDIS와 마찬가지로 MSDN의 Windows Filtering Platform Sample을 토대로 진행하겠습니다. 그럼 간략하게 WFP의 작성방식부..
2015.03.19 -
보안 취약점
1. 스택 오버플로우스택 오버플로우를 통한 공격은 대체로 악성 코드가 들어가 있는 함수의 포인터를 프로그램이 실행할 스택의 위치에 덮어씌움으로써 발생할 수 있습니다.예를 보면 다음과 같습니다.int counter;char string[8];float number; 와 같은 지역 변수를 정의했을 때 스택의 상태는 counterstring[0]...string[7];numberreturn address처럼 되어있습니다. string 변수에 8이상의 값을 써 넣을 경우 스택은 counterstring[0]...string[7]string[8]?string[9]?string[10]?...처럼 변경됩니다. 여기서 봐야할 것은 함수가 끝난 후 반환주소를 통해 반환을 해야하는데 그곳에 string[9]?의 값이 들어..
2015.03.16 -
NDIS 6.0 Filter Driver programming
NDIS를 통한 프로젝트를 진행하면서 그나마 최신 국내 NDIS 프로그래밍 포스팅이 없어서 간략하게 정리를 하려고합니다. 더 상세하게는 필요하다고 생각되면 따로 포스팅하겠습니다. 또한 저도 학생의 신분으로 이쪽으로 깊게 공부한 것은 아니기 때문에 잘못된 부분이 있으면 알려주시면 감사하겠습니다. NDIS에 대한 개념적인 소개는 생략하겠습니다. MSDN의 NDIS 6.0 Filter Driver Sample을 바탕으로 진행합니다. 우선 NDIS를 통해 할 수 있는 건 윈도우 7에서는 MAC address부터 payload까지 전부 볼 수 있습니다. WFP는 윈도우8부터 Ethernet을 볼 수 있어서 윈도우7에서 MAC을 보기위해선 NDIS를 이용해야 합니다. 솔루션을 열면 주로 filter.c를 수정하게 ..
2015.03.13 -
무분기 로직
컴파일러가 하이 레벨 언어를 로우 레벨 언어로 바꿀 때 파이프라인을 사용함에 따르는 분기에 의한 손실을 최소화 하기 위해 무분기 로직을 만들어냅니다. 파이프 라인의 끝에 다음 명령을 채울 때 분기가 있을 경우 어떤 분기된 명령들 중 하나를 쓸 수 밖에 없는데 이 때 예측이 틀리면 파이프라인을 비우고 새로 명령을 채워야 합니다. 그렇기 때문에 컴파일러는 분기가 있는 하이 레벨 언어를 분기가 없는 로우 레벨 언어로 바꾸는 작업을 합니다. - 산술 구현mov eax, [ebp-10]and eax, 0x00001000neg eaxsbb eax, eaxneg eaxret 위 작업은 분기문을 사용하지 않는데 어셈블리에 익숙하지 않다면 무슨 작업을 하는지 파악하기 어렵습니다. eax와 0x00001000의 값을 an..
2015.03.09 -
api 리버싱 3 - RtlGetElementGenericTable
RtlGetElementGenericTable의 내용입니다. MOV EBP, DWORD PTR SS : [EBP+8]MOV EDX, DWORD PTR DS : [ECX+14]MOV EAX, DWORD PTR DS : [ECX+C]- EBP로 파라미터를 ECX에 넣고 14와 C오프셋의 값으로 각각 초기화하고 있습니다. PUSH EBXPUSH ESI- EBX와 ESI의 값을 저장합니다. MOV ESI, DWORD PTR [ECX+10]PUSH EDIMOV EDI, DWORD PTR [EBP+C]- 10오프셋의 값을 ESI에 넣고 EDI값을 저장합니다. 그리고 EDI에 C 오프셋의 값을 넣습니다. EBP+8이 첫 번째 파라미터이니 +C는 두 번째 파라미터입니다. LEA EBX, DWORD PTR [EDI+1]..
2015.03.07