다음을 통해 공유


[회보 보관 ^] [< 볼륨 2, 번호 3] [볼륨 2, 번호 5 >]

Systems Internals 뉴스레터 2권, 4호

www.sysinternals.com
Copyright © 2000 Mark Russinovich


2000년 8월 30일 - 이번 호에서:

  1. 사설

  2. SYSINTERNALS의 새로운 소식

    • ListDlls v2.23
    • HandleEx v2.26
    • ElogList v2.02
    • LoggedOn v1.1
    • Bluescreen v2.21
    • PageDefrag v2.01
    • LoadOrder v1.1
    • ClockRes v1.0
    • BgInfo v1.0
    • Inside Windows 2000, 3판.
    • Microsoft의 Sysinternals
  3. 내부 정보

    • 디버그 권한의 힘
    • Win2K SP1의 새로운 API?
    • WinDev 2000 서부
  4. 향후 예정 사항

    • Tokenmon

공동 스폰서: WINTERNALS 소프트웨어

Sysinternals 뉴스레터는 웹(www.winternals.com)에서 Winternals Software의 후원을 받습니다. Winternals Software는 Windows NT/2K용 고급 시스템 도구의 선도적인 개발업체이자 제공업체입니다. Winternals 소프트웨어 제품에는 Windows NT 4.0용 FAT32, NTFSDOS Professional Edition(DOS용 읽기/쓰기 NTFS 드라이버) 및 원격 복구가 포함됩니다.

Winternals Software의 ERD Commander 2000은 수상 경력에 빛나는 ERD Commander 제품군의 최신 릴리스입니다. 기본 제공 레지스트리 및 파일 편집기를 포함한 ERD Commander 2000의 새로운 기능은 현존하는 가장 진보된 Windows NT 및 Windows 2000 복구 도구입니다. ERD Commander 2000은 빠른 액세스를 위해 플로피 디스크, CD-ROM 및 시스템의 하드 드라이브에 설치할 수 있으며 설치 마법사를 통해 타사 SCSI 및 기타 대용량 저장 장치 드라이버를 쉽게 추가할 수 있습니다. ERD Commander 2000은 $349이며 기존 ERD Commander Professional 소유자의 경우 $49입니다. 자세한 내용을 알아보고 www.winternals.com/products/erdcommander2000.shtml에서 평가판을 다운로드하세요.

공동 스폰서: WINDOWS 2000 매거진

Windows 2000 Magazine에는 Windows NT/2000을 매일 사용하는 사람들을 위한 실용적인 솔루션이 포함되어 있습니다. 위험 부담 없이 지금 무료 샘플 문제를 주문하세요. 구독을 계속하기로 결정하면 가판대 가격에서 40% 할인된 가격으로 13권을 더 받게 됩니다. 오늘 구독: http://www.win2000mag.com/sub.cfm?code=fs00inhs13

여러분, 안녕하세요.

Sysinternals 뉴스레터에 오신 것을 환영합니다. 뉴스레터는 현재 25,000명의 구독자를 보유하고 있습니다.

저는 Bryce와 내가 Sysinternals에서 개발한 도구인 Regmon, Filemon 및 DebugView에서 많은 시간을 보냅니다. Regmon은 레지스트리 액세스 모니터(www.sysinternals.com/regmon.htm)이고 Filemon은 파일 액세스 모니터(www.sysinternals.com/filemon.htm)이며 DebugView는 디버그 출력 모니터(www.sysinternals.com/dbgview.htm)입니다. 때때로 이러한 도구 중 하나에서 볼 수 있는 지속적인 활동을 생성하는 여러 시스템 중 하나에 설치된 애플리케이션 또는 장치 드라이버를 보게 됩니다. 필요한 활동에 대해 말씀드리는 것은 아니지만 소프트웨어가 수행하는 작업은 일반적으로 반복적인 특성을 가지며 출력 추적을 조사한 결과 소프트웨어가 다른 덜 방해적인 메커니즘의 사용이 가능한 폴링 기술을 사용한다는 것을 알 수 있습니다.

예를 들어 다양한 상업용 바이러스 스캐너는 바이러스 서명 파일이 업데이트되었는지 확인하기 위해 초당 여러 번 쿼리합니다. 제 시스템 중 하나에는 "폴링"이라는 단어를 포함하여 폴링 중임을 광고하는 디버그 문을 지속적으로 출력하는 주요 프린터 제조업체의 프린터 드라이버가 있습니다. 내가 가장 좋아하는 예 중 하나는 주요 유틸리티 공급업체에서 시스템 성능을 개선한다고 광고하는 유틸리티가 여러 공급업체의 레지스트리 키를 1초에 여러 번 쿼리하는 것입니다. 다른 유형의 엉성한 코딩의 예로는 소프트웨어가 실행될 때 지속적으로 작동하는 임베디드 디버그 중단점이 포함된 사용자 모드 소프트웨어 구성 요소를 포함하는 주요 네트워킹 공급업체의 네트워크 어댑터가 있습니다. 애플리케이션이 파일 변경을 감지해야 하는 경우 디렉터리 변경 알림을 요청할 수 있습니다. 마찬가지로 레지스트리 키에 대한 변경 사항을 감지해야 하는 경우 키 변경 알림을 요청할 수 있으며 상용 소프트웨어에는 기본적으로 활성화된 디버그 출력 또는 디버그 중단점이 포함되어서는 안 됩니다.

그러나 가장 끔찍한 예는 Windows 2000 서버(\Winnt\System32\Windows Media\Server\Npsm.exe)와 함께 제공되는 Microsoft Windows Media Program Service일 것입니다. 이 서비스는 작업이 없는 경우(미디어 서비스를 포함하지 않음) 시스템에서 초당 약 60회의 속도로 \Winnt\System32\Windows Media\Server\ASDB\mdsas.mdb의 처음 2KB를 읽습니다. 특히 이것이 서버의 전반적인 성능에 부정적인 영향을 미칠 수 있기 때문에 이에 대한 변명의 여지가 없습니다.

일정 기간 동안 Regmon, Filemon 또는 DebugView를 사용했다면 비슷한 예를 접했을 것입니다. 하나를 발견하면 필터를 설정하고 잊어버리지 말고 공급업체에 전자 메일을 보내 조잡한 프로그래밍에 대해 불평하세요.

뉴스레터의 내용에 관심이 있을 것으로 생각되는 친구들에게 전달해 주세요.

감사합니다!

-Mark

SYSINTERNALS의 새로운 소식

LISTDLLS V2.23

ListDLLs는 프로세스가 로드한 DLL에 대한 자세한 정보를 표시하는 명령줄 유틸리티입니다. 예를 들어 ListDLLs는 각 DLL의 기본 메모리 주소, 크기, 버전 및 전체 경로를 표시합니다. 이 새 버전은 명령줄에서 전달된 모든 매개 변수를 포함하여 프로세스를 시작하는 데 사용된 명령줄을 보여줍니다. 이를 통해 여러 프로세스를 구별하고 특정 명령줄 옵션과 관련된 문제를 해결할 수 있습니다.

www.sysinternals.com/listdlls.htm에서 ListDLLs v2.23을 다운로드하세요.

HANDLEEX V2.26

HandleEx는 열려 있거나 로드된 핸들 및 DLL 프로세스에 대한 정보를 제공하는 애플리케이션입니다. 디스플레이는 두 개의 하위 창으로 구성됩니다. 맨 위에는 항상 자체 계정의 이름을 포함하여 현재 활성 프로세스 목록이 표시되지만 맨 아래 창에 표시되는 정보는 HandleEx가 있는 모드에 따라 다릅니다. HandleEx가 핸들 모드인 경우 맨 위 창에서 선택한 프로세스가 열린 핸들이 표시되고 DLL 모드인 경우 프로세스가 로드한 DLL 및 메모리 매핑 파일이 표시됩니다.

HandleEx의 최신 릴리스에는 몇 가지 새로운 기능이 포함되어 있습니다. 먼저 ListDLL과 마찬가지로 프로세스 속성을 볼 때 프로세스를 시작하는 데 사용된 명령줄이 표시됩니다.

이 버전 이전의 HandleEx의 단점 중 하나는 로그인 세션의 시스템 프로세스 및 프로세스가 실행 중인 계정의 이름을 표시하지만 다른 사용자 계정에서 시작된 프로세스의 소유자를 표시하기 위해 Windows NT/2000 보안 모델을 우회할 수 없다는 것입니다(Windows NT/2000 리소스 키트의 Pview 프로그램도 이 제한을 받습니다). 이는 NT 4 터미널 서버와 Windows 2000 터미널 서비스 환경에서 고통스러울 정도로 분명했습니다. 여기서 HandleEx는 다른 사용자 세션에서 시작된 프로세스에 알 수 없는 소유자가 있음을 나타냈습니다. HandleEx v2.26은 예외 없이 모든 프로세스에 대한 소유 계정을 결정할 수 있도록 트릭을 구현하여 터미널 서비스 환경에 이상적인 도구입니다.

HandleEx v2.26의 마지막 새 기능을 사용하면 열린 핸들을 강제로 닫을 수 있습니다. 많은 요청을 받아서 이 기능을 추가했습니다. 그러나 애플리케이션은 일반적으로 핸들이 갑자기 무효화될 수 있고 핸들이 강제로 닫힌 애플리케이션이 비정상적으로 작동하거나 그 결과 충돌할 수 있다고 예상하도록 작성되지 않았기 때문에 극도로 주의하여 사용하는 것이 좋습니다.

www.sysinternals.com/handleex.htm에서 HandleEx v2.26을 다운로드하세요.

ELOGLIST V2.02

Windows 2000 Resource Kit에는 로컬 또는 원격 컴퓨터의 이벤트 로그에서 레코드를 덤프할 수 있는 ELogDmp라는 도구가 포함되어 있습니다. ELogList는 도구를 실행 중인 계정이 아닌 다른 계정에서 컴퓨터의 이벤트 로그에 액세스할 수 있도록 선택적인 계정 이름과 암호를 지정할 수도 있기 때문에 ElogDmp보다 강력합니다. 또한 ElogDmp 도구는 이벤트 로그 항목을 원시 형식으로 표시하여 출력을 해석하기 어렵게 만드는 반면, 이 ElogList 업데이트는 Windows NT/2000 이벤트 뷰어에 표시되는 텍스트를 표시하도록 이벤트 로그 항목의 형식을 지정합니다. 원격 시스템의 이벤트 로그를 표시하는 경우에도 ElogList는 서식 문자열 데이터에 대해 원격 시스템의 올바른 메시지 파일을 사용합니다.

www.sysinternals.com/eloglist.htm에서 ElogList v2.02를 다운로드하세요.

LOGGEDON V1.1

LoggedOn은 특정 컴퓨터에 로컬로 또는 리소스 공유를 통해 로그온한 사용자를 알려주는 명령줄 애플릿입니다. 버전 1.1 업데이트를 사용하면 네트워크에서 특정 사용자와 연결된 로그온 세션을 검색할 수 있습니다. 이 기능은 사용자 계정에 대한 업데이트를 수행하고 사용자가 현재 로그온되어 있지 않은지 확인해야 하는 상황에서 유용합니다.

www.sysinternals.com/misc.htm에서 전체 소스와 함께 LoggedOn v1.1을 다운로드하세요.

BLUESCREEN V2.21

대부분의 사람들은 Windows NT 또는 Windows 2000 충돌 및 재부팅을 정확하게 묘사하는 유명한 Sysinternals 블루 스크린 화면 보호기에 대해 잘 알고 있을 것입니다. 처음 출시된 이후로 계속 컴퓨터에서 화면 보호기를 실행하려는 Windows 9x 사용자의 요청을 받았기 때문에 마침내 Windows 9x로 포팅했습니다. Windows 9x에서는 Windows 2000 충돌을 시뮬레이트하고 재부팅합니다.

Windows 9x에서 Sysintenals 블루 스크린 화면 보호기를 사용하기 위한 유일한 요구 사항은 \Windows\System 디렉터리에 배치할 Windows 2000 Ntoskrnl.exe 파일의 복사본을 얻는 것입니다. 블루 스크린에는 Windows 2000 시작 화면용 파일이 필요합니다.

이제 자신의 컴퓨터로 돌아와 Windows 2000 충돌 및 재부팅 주기에 멈춘 것을 발견한 순진한 Windows 9x 사용자를 정말 혼란스럽게 할 수 있습니다!

www.sysinternals.com/bluescreen.htm에서 Bluescreen Screen Saver v2.21을 다운로드하세요.

PAGEDEFRAG V2.01

PageDefrag는 시스템의 페이징 파일과 레지스트리 하이브를 조각 모음하기 위해 부팅 시 실행되는 조각 모음 유틸리티입니다. PageDefrag는 레지스트리 하이브 조각 모음을 수행할 수 있는 최초의 유틸리티였지만 릴리스 이후 해당 기능이 여러 상업용 조각 모음에 추가되었습니다. 그러나 PageDefrag는 여전히 무료이며 버전 2.01은 Windows NT 4뿐만 아니라 Windows 2000에서도 작동합니다.

Windows NT 4 및 Windows 2000에서 제공하는 조각 모음 인터페이스에 관심이 있는 경우 이에 대해 알아보고 www.sysinternals.com/defrag.htm에서 대화형 파일 조각 모음에 대한 소스 코드를 다운로드할 수 있습니다. Sysinternals는 Microsoft가 플랫폼 SDK에 조각 모음 인터페이스를 포함하기 몇 년 전에 조각 모음 인터페이스를 문서화했으며 여러 상업용 조각 모음 도구에서 설명서와 샘플 코드를 사용했습니다.

www.sysinternals.com/pagedfrg.htm에서 PageDefrag v2.01을 다운로드하세요. www.sysinternals.com/defrag.htm에서 조각 모음 인터페이스 설명서를 보세요.

LOADORDER V1.1

장치 드라이버와 서비스가 어떤 순서로 로드되고 초기화되는지 궁금한 적이 있습니까? 이제 쉽게 알아볼 수 있습니다. LoadOrder는 드라이버 및 서비스 로드 순서의 그림을 작성하기 위해 HKLM\System\CurrentControlSet\Services 아래의 정보를 처리하는 유틸리티입니다.

www.sysinternals.com/misc.htm에서 LoadOrder v1.1을 다운로드하세요.

CLOCKRES V1.0

스케줄러에 대한 제 문서에서 저는 Windows NT/2000 스레드 퀀텀(CPU에서 실행되는 스레드의 회전 길이)이 시스템 클록의 해상도를 기반으로 한다는 사실에 대해 이야기했습니다. 클록의 해상도는 Windows 타이머 기반 이벤트의 대기 시간에도 영향을 미칩니다. www.sysinternals.com/timer.htm의 기사에서는 애플리케이션이 시계의 해상도를 조작할 수 있는 방법에 대해서도 설명합니다. 대부분의 SMP에서 분해능은 15ms이고 유니프로세서에서는 10ms이며 표준 SMP 및 유니프로세서 HAL(Hardware Abstraction Layer)에서 설정한 값입니다.

대부분의 시스템은 위에 나열된 공통 값을 사용하지만 컴퓨터 시계의 실제 해상도를 어떻게 결정할 수 있습니까? 답은 GetSystemTimeAdjustment Win32 API에 있습니다. 이 API는 시스템이 시간 시계에 주기적으로 조정을 적용하는지 여부를 알려줍니다. 이 API는 시계 간격도 반환합니다. ClockRes 애플릿은 API를 사용하여 시스템 시계의 해상도를 알려줍니다.

www.sysinternals.com/misc.htm에서 ClockRes 플러스 소스를 다운로드하세요.

BGINFO V1.0

여러 서버를 관리하는 관리자라면 설치된 서비스 팩 버전, IP 주소, 컴퓨터 이름, 메모리 크기 및 프로세서 속도와 같은 다양한 시스템 속성의 값을 상기시키기 위해 여러 정보 대화 상자를 여는 데 상당한 시간을 소비할 것입니다. 이제 Bryce가 개발한 BgInfo 유틸리티를 사용하여 각 서버의 데스크톱에서 이 모든 정보를 쉽게 볼 수 있습니다.

BgInfo를 실행하면 다양한 유용한 시스템 특성을 자동으로 보고하는 바탕 화면 배경이 생성됩니다. 로그인할 때마다 정보를 사용할 수 있도록 BgInfo를 시작 폴더에 넣을 수 있으며 BgInfo가 표시하는 데이터를 수정할 수도 있고 자신의 데이터를 추가할 수도 있습니다. 서버에 설치된 BgInfo를 사용하면 쉽게 잊어버린 정보를 반복적으로 찾는 데 소요되는 시간을 절약할 수 있습니다.

www.sysinternals.com/misc.htm에서 BgInfo v1.0을 다운로드하세요.

INSIDE WINDOWS 2000, 3판

Windows 2000 내부에 대한 공식 서적을 지금 사용할 수 있습니다! David Solomon(www.solsem.com)과 Mark Russinovich가 공동 저술한 이 에디션은 네트워킹, 플러그 앤 플레이, 전원 관리, 서비스, 레지스트리, WMI, 부팅에 대한 새로운 내용을 포함하여 이전 버전보다 40% 이상 더 큽니다. 종료 및 저장. 또한 Windows 2000 내부를 조사하기 위해 다른 곳에서는 사용할 수 없는 몇 가지 강력한 도구가 들어 있는 CD도 포함되어 있습니다.

지금 www.sysinternals.com/insidew2k.htm을 통해 책의 목차를 확인하고 주문하세요.

WWW.MICROSOFT.COM의 SYSINTERNALS

보고할 Sysinternals를 참조하는 새로운 KB 기사는 없지만 Microsoft는 해당 사이트의 TechNet 부분에 Sysinternals에 대한 꽤 유명한 링크를 추가했습니다. 첫 번째는 www.microsoft.com/TechNet/security/au022800.asp의 "Ask Us About...Security" 칼럼에 있습니다. 칼럼니스트 Joel Scambray는 독자들에게 NTFSDOS(www.sysinternals.com/ntfspro.htm)가 악의적인 사용자가 Windows 2000 도메인 컨트롤러의 Active Directory 내용을 변경하는 데 사용할 수 있습니다.

두 번째 참조는 www.microsoft.com/technet/inside/default.asp의 "Inside Microsoft" 열에 있습니다. 열은 Q&A 스타일이며 특정 파일이 열려 있는 애플리케이션을 결정하는 것과 관련된 두 가지 질문으로 시작합니다. 독자가 HandleEx(www.sysinternals.com/handleex.htm) 및 NtHandle(www.sysinternals.com/nthandle.htm)을 가리키는 답변 과정에서 기사 작성자("Mole")는 Sysinternals에 대해 이렇게 말합니다. : "한 푼도 들지 않는 수많은 훌륭한 유틸리티가 있습니다. Mole도 때때로 Sysinternals를 참고합니다. (뭐라고요? Mole이 이 모든 정보를 머릿속에 간직하고 있을 거라고 생각했나요?). 다시 한번 말씀드리지만, 그는 여러분을 Sysinternals으로 안내할 것입니다." 이는 사실상 Microsoft의 공식적인 승인에 가깝습니다.

내부 정보

디버그 권한의 힘

dbmon을 포함한 다른 디버그 출력 모니터와 달리 내 DebugView 디버그 출력 모니터(www.sysinternals.com/dbgview.htm)는 커널 모드 디버그 출력을 캡처하는 장치 드라이버를 설치하기 때문에 실행을 위해 로컬 관리자 권한이 필요합니다. 그 결과 관리자가 로컬 관리자 권한을 부여하지 않고 디버그 권한만 부여한다고 불평하는 개발자들로부터 수십 통의 이메일을 받았습니다. 논쟁은 디버그 권한이 이유가 있고 모든 애플리케이션 개발자가 개발해야 한다는 것입니다. 이 개발자들은 사용자에게 관리자 권한이 있는 경우에만 드라이버를 설치하고 그렇지 않으면 Win32 디버그 출력만 수집하도록 DebugView를 변경하도록 요청합니다.

이러한 요청은 항상 저를 웃게 만듭니다. Debug-privilege 인수를 만드는 관리가 깨닫지 못하는 것은 이 권한이 로컬 관리자 권한에 대한 문을 열어준다는 것입니다. 디버그 권한을 사용하여 개발자는 로컬 보안 기관 프로세스(LSASS)에 디버거를 연결하고 다음 로그인 시 로컬 관리자 권한을 부여하도록 조작할 수 있습니다. 또는 자신의 계정을 로컬 관리자 그룹에 추가하는 시스템 계정에서 실행 중인 모든 프로세스에 코드를 삽입할 수 있습니다. 제가 불평하는 개발자들에게 이런 내용을 설명하면 그들은 때때로 그들의 경영진이 주장을 받아들이지 않는다고 대답합니다. 지금까지 나는 그들이 소송을 제기하기 위해 경영진에게 다시 가져갈 수 있는 것이 없었지만 최근 그러한 전자 메일의 발진으로 인해 조치를 취해야 했습니다.

www.sysinternals.com/logonex.zip에서 다운로드할 수 있는 유틸리티인 LogonEx는 디버그 권한의 영향력을 그래픽으로 보여줍니다. LogonEx는 Windows NT 및 Windows 2000에서 작동합니다. 이를 가장 잘 보여주기 위해 "프로그램 디버그" 권한이 추가된 경우를 제외하고는 일반 사용자 계정인 계정을 만드세요. 로그오프하고 해당 계정으로 로그인한 다음 LogonEx를 실행합니다. 특정 설치를 위한 msv1_0.dll의 기호 파일이 필요합니다(개발자는 일반적으로 시스템 기호가 설치되어 있음). LogonEx는 MsvpPasswordValidate 함수의 진입점을 찾고 패치하는 데 사용합니다. LogonEx가 패치를 만든 후에는 암호를 지정하지 않고 모든 계정을 사용하여 시스템에 로그인할 수 있습니다. 관리자로 로그인하고 생성한 계정을 로컬 관리자 그룹에 추가하여 데모를 완료합니다.

LogonEx는 디버그 권한을 통해 개발자가 시스템을 제어할 수 있는 방법의 한 가지 예일 뿐이지만 다른 많은 기능이 있습니다. LogonEx가 개발자에게 로컬 관리자 권한을 부여하지 않는 것은 말이 안 된다는 것을 경영진이 납득시키기를 바랍니다. (그러나 도메인 관리자 권한에 대해 이야기하는 것은 아닙니다. 이는 로컬 관리자가 다른 컴퓨터가 아닌 자신의 컴퓨터에만 최고의 권한을 행사하는 반면 도메인 관리자는 네트워크를 지배한다는 또 다른 이야기입니다.).

WIN2K SP1의 새로운 API?

많은 사용자가 NT 4 서비스 팩(SP)에서 새로운 버그를 일으키는 문제에 직면한 후 Microsoft는 이전 문제를 수정하는 동안 새로운 문제가 발생할 가능성을 최소화하기 위해 SP에 새로운 기능을 포함하지 않는 정책을 채택했습니다. 아니면 그렇다고 생각했습니다. Windows 2000 SP 1이 최근에 출시되었으며 새로운 기능이 없는 것으로 나타났습니다. 그러나 Windows 2000 실행 및 커널 구성 요소가 포함된 파일인 Ntoskrnl.exe와 네이티브 API 및 로더가 포함된 라이브러리인 Ntdll.dll을 자세히 살펴보면 SP 1에서 새로운 API가 데뷔했음을 알 수 있습니다.

새 API는 다음 기능으로 구성됩니다.

   RtlTraceDatabaseAdd
   RtlTraceDatabaseCreate
   RtlTraceDatabaseDestroy
   RtlTraceDatabaseEnumerate
   RtlTraceDatabaseFind
   RtlTraceDatabaseLock
   RtlTraceDatabaseUnlock
   RtlTraceDatabaseValidate

함수의 이름은 꽤 설명적이므로 분명히 이벤트 로깅을 위한 API입니다. API의 흥미로운 측면은 그 구현이 Ntdll 및 Ntoskrnl에서 복제된다는 것입니다. 이는 Ntoskrnl에서 구현 서비스를 호출하는 다른 Ntdll API와 다릅니다.

API 구현을 조사한 결과 다음과 같이 사용되는 것으로 나타났습니다. 애플리케이션은 애플리케이션의 가상 메모리에 저장되는 추적 데이터베이스를 만들고 데이터베이스에 항목을 추가합니다. 어떤 시점에서 애플리케이션은 데이터베이스의 내용을 열거할 수 있으며 데이터베이스 사용이 완료되면 삭제합니다. 이상하게도 데이터베이스 항목을 삭제하는 방법이 없는 것 같습니다.

이 새로운 API를 사용하는 기능은 무엇인가요? 완전한 기능을 갖춘 제 Windows 2000 Advanced Server에설치된 기능 중에는 해당 사항이 없습니다. 따라서 그런 기능이 있는지는 불명확합니다. 아마도 이것은 실수로 SP 1 릴리스 코드에 포함된 디버그 API였을 것입니다.

발행일: 2000년 8월 30일 수요일 오후 7:07 by ottoh

[회보 보관 ^] [< 볼륨 2, 번호 3] [볼륨 2, 번호 5 >]