2016. 4. 4. 22:50 :: 시스템 보안

안녕하세요~ Message 입니다.

 

파이썬은 레지스트리 정보 조회를 위해 _winreg 모듈을 지원합니다.

_winreg 모듈은 윈도우 레지스트리 API를 파이썬에서 사용할 수 있도록 지원하는 매개체 역할을 합니다.

아래 소스는 파이썬을 사용해서 자동으로 사용자 계정 목록을 조회하는 프로그램입니다.

 

1) 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# -*- coding: utf-8 -*-
 
from _winreg import *
import sys
 
varSubkey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" # 서브레지스트리 목록 지정
varReg = ConnectRegistry(None, HKEY_LOCAL_MACHINE) # 루트 레지스트리 핸들 객체 얻기
varKey = OpenKey(varReg, varSubkey) # 레지스트리 핸들 객체 얻기
 
for i in range(1024):
    try:
        keyname = EnumKey(varKey, i) # 지정한 레지스트리의 하위 키값 조회
        varSubkey2 = "%s\\%s" % (varSubkey, keyname) # 하위 레지스트리 목록 생성 : 상위 레지스트리 목록과 하위 키값 결합
        varKey2 = OpenKey(varReg, varSubkey2) # 레지스트리 핸들 객체 얻기
        try:
            for j in range(1024):
                n, v, t = EnumValue(varKey2, j) # 레지스트리 가진 데이터 얻기 : 값이름, 데이터형, 데이터 조회
                if("ProfileImagePath" in n and "Users" in v): # 사용자 계정 정보 추출
                    print v
        except:
            errorMsg = "Exception Inner:", sys.exc_info()[0]
            #print errorMsg
        CloseKey(varKey2)
    except:
        errorMsg = "Exception Outter:", sys.exc_info()[0]
        break
    
CloseKey(varKey) # 핸들 객체 반환
CloseKey(varReg)
    
cs

 

 

2) 실행결과

해당 프로그램을 실행하면 아래와 같이 계정 정보가 출력됩니다.

테스트를 위해서 새로운 계정을 추가하고, 재부팅한 후 돌려봤지만 바로 적용되지는 않았습니다.

레지스트리가 최신화 되지 않으면 나오지 않는것 같습니다.

실시간으로 원하는 결과를 얻고자 한다면 약간의 보완이 필요할것으로 보이네요.

 

 

참고 : 파이썬 해킹 입문 / 조성문, 정영훈 지음

posted by Red_Message