본문 바로가기
Study/리버싱

Registry

by 꼬부기가우는소리 2016. 7. 6.
728x90


참고 사이트 :

- [나무위키] 레지스트리

- [위키백과] 윈도우 레지스트리



레지스트리란, Microsoft Windows 운영 체제의 설정 및 정보를 담고 있는 데이터베이스다. 모든 하드웨어, 운영 체제 소프트웨어, 대부분의 비운영 체제 소프트웨어, 대부분의 비운영 체제 소프트웨어, 사용자 PC 선호도 등에 대한 정보와 설정이 들어 있다. 사용자가 제어판 설정, 파일 연결, 시스템 정책, 또는 설치된 소프트웨어를 변경하면, 이에 따른 변경 사항들이 레지스트리에 반영되어 저장된다. 레지스트리는 성능 카운터와 현재 사용하고 있는 하드웨어와 런타임 정보를 노출하면서 윈도우를 커널의 운영 체제 안에 제공한다.



구조

레지스트리는 키와 값이라는 두 가지 기본 요소를 포함하고 있다.


레지스트리 키는 폴더와 비슷하다. 값과 더불어 각 키는 (수많은 서브키를 포함할 수 있는) 서브키를 가질 수 있다. 키는 계급 수준을 지시하기 위해 백슬래시를 사용하면서 Windows라는 경로 이름과 비슷한 구문으로 가리킨다. 이를테면 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows는 "HKEY_LOCAL_MACHINE" 키의 "Software" 서브키의 "Microsoft" 서브키의 "Windows"라는 서브키를 가리킨다.


레지스트리 값은 키 안에 들어 있는 이름/자료이다. 값은 여러 키로부터 따로 참조할 수 있다. 값 이름은 백슬래시를 포함할 수 있지만, 백슬래시를 사용하면 키 경로와 구별하는 것이 어렵게 될 수 있다. 레지스트리 값을 찾아서 이용하는 윈도우 API 명령어는 부모 키를 정의하는 핸들과 값 이름을 키 경로로부터 별도로 가져온다.



 레지스트리 값 종류 목록

0

  REG_NONE 

  종류 없음 

  REG_SZ 

  문자열 값 

  REG_EXPAND_SZ 

  확장할 수 있는 문자열 값. 환경 변수를 포함할 수 있다. 

  REG_BINARY 

  이진값 (임의의 데이터) 

  REG_DWORD/REG_DWORD_LITTLE_ENDIAN 

  DWORD 값 (32 비트) 정수 (리틀 엔디언) 

  REG_DWORD_BIG_ENDIAN 

  DWORD 값 (32 비트) 정수 (빅 엔디언) 

  REG_LINK 

  심볼 링크 (유니코드) 

  REG_MULTI_SZ 

  다중 문자열 값 (고유한 문자열의 배열) 

  REG_RESOURCE_LIST 

  리소스 목록 (플러그 앤 플레이 하드웨어 열거 및 구성에 쓰임) 

  REG_FULL_RESOURCE_DESCRIPTOR 

  리소스 서술자 (플러그 앤 플레이 하드웨어 열거 및 구성에 쓰임) 

10 

  REG_RESOURCE_REQUIREMENTS_LIST 

  리소스 요구 목록 (플러그 앤 플레이 하드웨어 열거 및 구성에 쓰임) 

11 

  REG_QWORD/REG_QWORD_LITTLE_ENDIAN 

  QWORD 값 (64 비트 정수), 빅/리틀 엔디언 또는 정의되지 않음 



Hive

레지스트리는 수많은 논리를 구분하는 "하이브"(hive)로 나눌 수 있다. 하이브는 모두 HKEY로 시작하며, 윈도우 API 정의로 이름이 지정되어 있는 것이 보통이다. HK로 시작하는 이 이름들은 HKCU, HKLM과 같이 짧은 3~4개의 이름을 줄인 것이다.


HKEY_LOCAL_MACHINE과 HKEY_CURRENT_USER 노드는 서로 비슷한 구조를 가지고 있다. 응용 프로그램은 보통 "HKEY_CURRENT_USER\Software\제조업체 이름\응용 프로그램 이름\버전 번호\설정 이름"의 설정 항목을 검색하고 설정값을 찾지 못할 경우 HKEY_LOCAL_MACHINE 키의 같은 위치에서 다시 한 번 검색한다. 또, HKEY_LOCAL_MACHINE을 먼저 기록하지만 (로그온한 사용자가 관리자가 아닌 경우 등에 따라) 기록하지 못하는 경우, 설정값은 HKEY_CURRENT_USER에 대신 저장한다.


하이브의 종류

- HKEY_CLASSES_ROOT (HKCR): 파일 연결, OLE 객체 클래스 ID와 같은 등록된 응용 프로그램의 정보를 담고 있다. 윈도우 2000 이후로, HKCR은 HKCU\Software\Classes와 HKLM\Software\Classes를 편집한다. 주어진 값이 위의 서브키의 두 곳에 존재하면, HKCU\Software\Classes의 항목을 사용한다.

- HKEY_CURRENT_USER (HKCU): 현재 로그인한 사용자의 설정을 담고 있다.

- HKEY_LOCAL_MACHINE (HKLM): 컴퓨터의 모든 사용자의 설정을 담고 있다.

- HKEY_USERS (HKU): 컴퓨터에서 사용 중인 각 사용자 프로파일에 대한 HKEY_CURRENT_USER 키에 일치하는 서브키를 담고 있다.

- HKEY_CURRENT_CONFIG: 실행 시간에 수집한 자료를 담고 있다. 이 키에 저장된 정보는 디스크에 영구적으로 저장되지 않고 시동 시간에 생성된다.

- HKEY_PERFORMANCE_DATA: 런타임 성능 데이터 정보를 제공한다. 이 키는 레지스트리 편집기에 보이지 않지만 윈도우 API의 레지스트리 명령어를 통해 볼 수 있다.

- HKEY_DYN_DATA: 이 키는 윈도우 95, 윈도우 98, 윈도우 Me에만 쓰인다.[3] 플러그 앤 플레이를 비롯한 하드웨어 장치, 네트워크 성능 통계에 대한 정보를 포함한다. 이 하이브의 정보는 하드 드라이브에 저장되지 않는다. 플러그 앤 플레이 정보는 컴퓨터가 시작할 때 구성되며 메모리에 저장된다.



레지스트리 수정

수동 편집

레지스트리는 윈도우 디렉터리에 있는 regedit.exe 또는 regedt32.exe를 실행하여 마이크로소프트 윈도우에서 수동으로 편집할 수 있다. 수많은 최적화, 해킹 도구는 윈도우 운영 체제의 일부를 수정하는 데 이용하고 있다. 레지스트리는 운영 체제의 설정 및 정보를 담고 있는데 데이터베이스이기 때문에 전문 지식 없는 상태로 레지스트리를 임의로 편집한다면 문제가 발생하게 된다.


레지스트리 편집기는 사용자가 다음의 기능을 수행할 수 있게 도와 준다.


- 레지스트리 키, 서브키, 값, 값 데이터를 만들고 제어하고 이름을 바꾸고 삭제한다.

- REG 파일들을 가져오고 내보낸다. 이진 하이브 포맷으로 자료를 내보낸다.

- 레지스트리 하이브 포맷 파일을 불러오고 제어하고 업로드할 수 있다. (윈도우 NT 기반의 운영 체제에서만)

- ACL 기반의 허가를 설정한다. (윈도우 NT 기반의 운영 체제에서만)

- 사용자가 지정한 레지스트리 값을 즐겨찾기로 등록한다.

- 키 이름, 값 이름, 값 데이터에서 특정한 문자열을 찾는다.

- 다른 네트워크 컴퓨터의 레지스트리를 원격으로 편집한다.



.REG 파일

레지스트리 항목이라 불리는 .REG 파일은 문자열 기반의 사람이 이해할 수 있는 파일이며 레지스트리의 일부가 저장되어 있다. .REG에 저장되는 데이터는 다음의 구문을 사용하여 저장된다.




[<하이브 이름>\<키 이름>\<서브키 이름>]

"값 이름"=<값 형태>:<값 데이터>

 



"값 A", "값 B", "값 C", "값 D", "값 E"를 HKLM\SOFTWARE\Microsoft 키에 추가하려면 다음과 같이 지정하면 된다.



Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]

"값 A" = "<문자열 값 데이터>"

"값 B" = hex:<이진 데이터>

"값 C" = dword:<DWORD 값 정수>

"값 D" = hex(7):<다중 문자열 값 데이터>

"값 E" = hex(2):<확장 가능한 문자열 값 데이터>



.REG 파일의 데이터는 이러한 파일을 두 번 누르거나 명령 프롬프트에서 /s 스위치를 사용하여 레지스트리를 추가하거나 병합할 수 있다. .REG 파일은 레지스트리 데이터를 제거하는 데 사용할 수도 있다.


키 (모든 서브키, 값, 데이터)를 제거하려면 .REG 파일은 빼기 표시 ("-")를 하이브 이름 앞에 넣어 주어야 한다. <키 이름> 키(모든 서브키, 값, 데이터)를 제거하려면 다음과 같이 하면 된다.



 

[-HKEY_LOCAL_MACHINE\SOFTWARE\<키 이름>]




키와 그 데이터를 제거하려면, 해당 .REG 파일은 제거할 값의 등호 뒤에 빼기 표시 ("-")를 넣어 주어야 한다.


이를테면, "값 A"와 "값 B" 값들만 <키 이름> 키에서 제거하려면 다음과 같이 하면 된다.



[HKEY_LOCAL_MACHINE\SOFTWARE\<키 이름>]

"값 A" = -

"값 B" = -



명령 줄 편집

레지스트리는 명령 줄에서 수많은 방법으로 제어할 수 있다. 






Operation [QUERY|ADD|DELETE|COPY|SAVE|LOAD|UNLOAD|RESTORE|COMPARE|EXPORT|IMPORT]

 



프로그램 또는 스크립트

레지스트리는 고급 윈도우 32 기반 API 라이브러리 (advapi32.dll)의 API를 통해 편집할 수 있다.



레지스트리 API 명령어 종류

  RegCloseKey

  RegOpenKey 

  RegConnectRegistry 

  RegOpenKeyEx 

  RegCreateKey 

  RegQueryInfoKey 

  RegCreateKeyEx 

  RegQueryMultipleValues 

  RegDeleteKey 

  RegQueryValue 

  RegDeleteValue  

  RegQueryValueEx

  RegEnumKey 

  RegReplaceKey 

  RegEnumKeyEx 

  RegRestoreKey 

  RegEnumValue 

  RegSaveKey 

  RegFlushKey 

  RegSetKeySecurity 

  RegGetKeySecurity 

  RegSetValue 

  RegLoadKey 

  RegSetValueEx 

 

  RegNotifyChangeKeyValue 

  RegUnLoadKey 

 



수많은 프로그래밍 언어는 자체 런타임 라이브러리 기능이나 클래스를 제공하여 프로그램들이 레지스트리의 설정을 저장할 수 있게 도와 준다. (이를테면 VB.NET, C#의 Microsoft.Win32.Registry 또는 델파이의 TRegistry).



위치

레지스트리는 윈도우의 버전에 따라 여러 개의 파일에 저장된다. 이러한 파일들이 다르고 위치 또한 다를 수 있지만 모두 로컬 컴퓨터에 존재한다. 사용자에 특화된 HKEY_CURRENT_USER 사용자 레지스트리 하이브는 Ntuser.dat에 저장된다. 사용자가 로밍 파일을 가지고 있으면 이 파일은 로그아웃할 때 서버에 복사하고 로그인할 때 서버로부터 복사를 받는다.


윈도우 NT 기반의 운영 체제는 레지스트리를 이진 파일의 하이브 형식으로 저장한다. 윈도우 NT 기반 운영체제들이 내보내고 불러오는 등의 작업을 할 수 있도록 구성되어 있다. 다음의 레지스트리 파일들은 %SystemRoot%\System32\Config\에 저장된다.


Sam – HKEY_LOCAL_MACHINE\SAM

Security – HKEY_LOCAL_MACHINE\SECURITY

Software – HKEY_LOCAL_MACHINE\SOFTWARE

System – HKEY_LOCAL_MACHINE\SYSTEM

Default – HKEY_USERS\.DEFAULT

Userdiff – 하이브에 연결되어 있지 않다. 운영 체제를 업그레이드할 때에만 이용한다.


아래의 파일들은 개별 사용자 프로파일 폴더에 저장된다.


%UserProfile%\Ntuser.dat – HKEY_USERS\<사용자 SID> (HKEY_CURRENT_USER로 연결)

%UserProfile%\Local Settings\Application Data\Microsoft\Windows\Usrclass.dat (경로는 운영 체제의 언어에 따라 지역화되어 있다) – HKEY_USERS\<User SID>_Classes (HKEY_CURRENT_USER\Software\Classes)



실행




실행 창 (Ctrl + R)에서 "regedit"를 쳐 실행시키면 아래와 같은 화면이 나타난다.





이 편집기를 이용하여 레지스트리 값을 변경할 수 있다.




'Study > 리버싱' 카테고리의 다른 글

RegFsNotify (2) 레지스트리 변화 알림  (0) 2016.07.07
RegFsNotify (1) 파일 시스템 변화 알림  (0) 2016.07.07
PE Structure (3) DLL  (0) 2016.06.29
PE Structure (2) PE 헤더  (1) 2016.06.29
PE Structure (1) PE 포맷  (0) 2016.06.19

댓글