'pack'에 해당되는 글 2건

  1. 2012.04.04 2. Registry hive structure (1)
  2. 2008.10.11 perl pack/unpack (1)

Naver Perl Community & Study Cafe


2012.04.04 19:10

2. Registry hive structure

Registry Hive 파일을 통해 원본  레지스트리값들을 알아내기 위해서는 먼저 Hive 파일의 구조를 알아야 합니다.

이 장에서는 샘플 Hive 파일을 추출하여 Hex Editor를 통해 값을 확인하고 프로그래밍으로 Hive 파일을 불러와서 

값들을 체크하는 샘플을 만들어 보도록 하겠습니다.


레지스트리 Hive 파일을 분석하기 위해서는 먼저 Hive 파일을 추출해야 합니다.

정확한 레지스트리 Hive 파일을 얻어오기 위해서는 컴퓨터를 종료 한 뒤, 

하드 디스크에 있는 Hive 파일을 추출하여 사용하는게 가장 좋은 방법이지만


하드 디스크를 빼려면 본체도 열어야 하고 나사도 풀어야 하고 ㅡ_ㅠ

보통 힘든일이 아닙니다. (쉬우신 분들도 있겠지만요 ^^;)


그래서 간단하게 샘플 파일을 얻는 방법을 설명해 드리겠습니다.

자신의 현재 컴퓨터에서도 가능합니다.


1. 실행창에서 레지스트리 편집기인 regedit 를 입력합니다.


2. HKEY_LOCAL_MACHINE 의 SAM을 선택하여 내보내기를 누릅니다.

(SAM에 값이 없는 것 같지만 숨겨져 있을뿐 중요한 정보가 많이 담겨져 있습니다)


3. 내보내기를 할 때 파일형식을 레지스트리 하이브파일로 선택해주셔야 합니다!


위와 같이 진행하시면 현재 컴퓨터의 레지스트리 Hive 샘플 파일인 SAM 파일을 얻을 수가 있습니다. +_+


레지스트리 Hive 파일의 전체 구조는 아래와 같습니다. 

첫번째로 Base Block 가 존재하며 'regf'라는 시퀀스를 가지고 있습니다.

이 Base Block은 4096(0x1000)Byte로 이루어져 있으며 

Hive 파일 이름, 첫번째 키 레코드의 주소, 마지막 hbin 파일 주소 등이 담겨 있습니다.

이 블럭에는 hive 파일의 전체적으로 중요한 정보들을 저장하고 있습니다.

Hive 파일의 습니다.


이런건 눈으로 봐야 하는데.. Hex Editor로 파일을 한번 열어 보겠습니다.

처음에 'regf' 보이시죠? 이 시퀀스가 레지스트리 Hive 파일이라는 것을 알려주는 부분입니다.


그리고 4096Byte를 봤을 때 시퀀스 값이 'hbin' 이라는 것도 확인을 할 수 있습니다 :)


레지스트리의 Hive 파일의 스펙은 정확히 공개되지 않았습니다. 

그래서 지속적으로 그 값들을 확인하기 위한 작업들이 이루어지고 있으며

그래도 제일 분석이 잘 된 The WindowsNT Registry File Format.pdf 파일의 맨 마지막장에 보시면 

각 구조에 대한 값들을 자세하게 확인 할 수 있습니다. ( 정확하지 않은 부분은 Unknown 이나 물음표를 넣어놨더군요 ^^;)



앞서 설명드린 Base Block 파일은 위와 같은 정보들을 가지고 있으며, 

이 값들을 perl을 사용하여 추출하여 보도록 하겠습니다.

( timestamp 는 기록이 정확하게 되어 있지 않아 제외 시켰습니다. )


> rega.pl 


use strict;
use warnings;

my $record;
my $offset=0;
my $file = shift || die "You must enter a filename.\n";
open my $reg, '<', $file  or die "cannot open [$file] file: $!";

# Magic Number 
read($reg,$record,4);
my $magic = unpack("A4",$record);
print $magic,"\n";

#root key offset
seek($reg,0x24,0);
read($reg,$record,4);
my $rootkey = unpack("L",$record);
print $rootkey,"\n";

#file name
seek($reg,0x30,0);
read($reg,$record,64);
my $filename = unpack("A*",$record);
printf $filename;


코드의 문법상 어려운 부분은 없을 것입니다. 
unpack 문서는 아래 링크를 참고 하시면 됩니다.

rega.pl 파일을 실행을 시켰을 때 결과값이 아래와 같이 나오면 정상적으로 추출 된 것입니다.

>perl rega.pl SAM

regf

32

\S y s t e m R o o t \ S y s t e m 3 2 \ C o n f i g \ S A M

※ 현재 컴퓨터에서 추출한 샘플 파일일 경우에는 아래 경로가 나오지 않습니다


레지스트리 Hive 파일을 알리는 'regf' 와 root key 값을 나타내는 32(0x20) 그리고 

SAM 파일이 위치한 전체경로를 확인 할 수 있습니다 :)


신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 1
2008.10.11 15:44

perl pack/unpack

Usage :
pack Template, list
unpack Template , EXPR

pack 함수는 값들로 구성된 리스트를 받아서

 

이진구조로 변환시킨 뒤에 변환시킨 문자열을 반환하는 함수이다.

 

템플릿의 종류를 알아보기에 앞서 하나의 예제를 먼저 실행 하여보자.


 

1
2
3
4
use strict;
my @list = (65..69);
my $out = pack "C*",@_;
print $out

 


list에는 65부터 69까지의 숫자가 들어있다.

 

눈치를 채신분들은 알겠지만 숫자들은 아스키코드값의 10진수이고

 

A~E까지의 값을 차례대로 배열에 저장하였다.

 

이제 pack 함수를 살펴 보자.

 

C unsigned 문자를 나타내고 있으며

 

아스키 코드값을 문자로 변환하여 반환해준다 그래서 출력되는 값은

 

"ABCDE" 되는 것이다.

 

이제 반대로 unpack함수를 보도록 하자.

 

함수는 pack 반대기능을 하고 있다.

 

데이터 구조를 나타내는 문자열을

 

Template 형식에 따라 리스트를 만들고 리스트 값을 반환하는 역활을 한다.


1
2
3
4
use strict;
my $input = "ABCDE";
my @list = unpack "C*",$input;
print "@list";

 

출력해 본다면 65~ 69 까지의 값을 확인 있다.

 

 

그러면 하나의 예제를 만들어보자.

 

문자 10진수 2진수를 한번에 표현해 보자


1
2
3
4
5
6
7
8
9
10
use strict;
my $input = "AaBb";
my @String = split '',$input;
my @binary = unpack "B8"x4,$input;
my @decimal = unpack "C*",$input;
printf "%5s | %-8s | %-8s \n","문자","10진수","2진수";
foreach(0..$#String){
 print "="x 30 . "\n" if($_%2-1);
 printf "%5s | %-8s | %-8s \n",$String[$_],$decimal[$_],$binary[$_];
}


Output:


1
2
3
4
5
6
7
문자 | 10진수 | 2진수  
==============================
    A | 65       | 01000001 
    a | 97       | 01100001 
==============================
    B | 66       | 01000010 
    b | 98       | 01100010 

일부러 줄맞추려고 printf로 출력을 했건만... 줄이 맞지않는구나


codepad는 한글에 대한 배려가 없...


Template 의 종류와 쓰임에 대해서 좋은 pdf 파일을 하나 첨부를 한다. 유용하게 사용하시길..


(사실 구글링하면 나오는 자료... ㅡ_ㅡ;)






신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 1 Comment 1


티스토리 툴바