카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/22

16 진수 읽기

Little Endian Format 

헥사 에디터
- 두 자리 수의 집합 = 1 byte(8 bits)
16 진수 D3은 이진수 11010011 

10 진수와 혼동을 피하기 위해 0x를 사용해 표시
- 0x30

Little Endian format 오른쪽에서 왼쪽으로 읽음. 
- 03 04 little endian format 0403으로 읽음 .
-  0x0403은 0x403으로 표시하며 앞의 0들은 다 제거.

예 1: 
- 00 04 00 00 Little Endian Format
- 00000400 16 진수 정렬 표현
- 0x400
- 10 진수 1024 형식 표현 

예 2:
- 60 00 Little Endian Format
- 0060 16진수 정렬 표현
- 0x60
- 10 진수 96 형식 표현

예 3: 
- D3 04 Little Endian Format
- 04D3 16진수 정렬 표현
- 0x4D3
- 10 진수 1235 형식 표현

NTFS 파일 시스템 섹터


NTFS 파일 시스템 및 파티션

파티션의 처음 16 섹터 (0-15)

섹터 0(부트 스트랩 코드)
- 점프 지시
- OEMID
- 바이오스 매개변수 블록(BPB)
- 확장 된 BPB
- 부트 스트랩 코드
- 섹터 마커의 끝

섹터 1-15 (부트 섹터 초기 프로그램 로더)

NTFS Master File Table(MFT)
12.5% MFT를 위한 예약된 디스크 공간.
디스크 공간의 50% 까지 확장 가능
모든 파일 및 폴더의 정보가 MFT에 나열.

파일 기록
- FILE0(ASCII) 기록
- 섹터 길이는 1024 바이트(512 x 2)
- 파일 속성 포함:

메터데이터 헤더:
  • 0x10 Attribute: 파일 생성, 생성 날자 및 변경 업데이트 시간
  • 0x20 Attribute: 비거주 속성
  • 0x30 Attribute: 짥고 긴 파일 이름
  • 0x40 Attribute: 소유권 및 접근권한
  • 0x50 Attribute: 파일에 대한 접근 권한 목록
  • 0x70 Attribute: 볼륨의 버전 및 상태
  • 0x80 Attribute: 비거주 클러스트의 상주파일 번호
  • 0x90 Attribute: 폴더 및 루트 인덱스
  • 0xA0 Attribute: 폴더 및 인덱스 할당
  • 0XB0 Attribute: 폴더 및 인데스 비트
  • 0XC0 Attribute: Volume mount 위치
  • 0xD0 Attribute: OS/2 HPFS
  • 0xE0 Attribute: OS/2 HPFS
  • 0x100 Attribute: EFS Windows 사용.

NTFS Data
비거주 파일에 대한 파일 정보
- 상주 파일이 512 보다 작의면 MFT에 저장
- 비거주 파일이 크면 MFT에 저장할 수 없음.

boot Secotor
MFT
Data










16 진수 헥사 편집기

16 진수 편집기 .

파일 또는 디스크 파티션의 1과 0을 읽고 이를 16 진수 형식으로 변환한다.
헥사 에디터를 사용해 ASCII 텍스트를 해석하고 표시한다.

16 진수:
0,1,2,3,4,5,6,7,8,9.A,B,C,D,E,F

16 진수 하나의 값은 8 비트 집합을 나타냄.
Example: 3F = 00111111

8 bits = 1byte

EB = 1 byte
EB = 8 bit
EB = 11101011

헥사 에디터 창 배치 정보
왼쪽: 메모리 주소
중간: 16진수 값
오른쪽: ASCII

헥사 에디터 종류
Hexedit(console)
 - sudo apt-get install hexedit

Tweak(console)
 - sudo apt-get install tweak

Ghex(GUI)
 - sudo apt-get install ghex

Okteta(GUI)
 - sudo apt-get install okteta
 - 우분투 KDE 버전 포함

WxHexeditor(GUI)
 - Download : Https://sourceforge.net/projects/wxhexeditor/
 - 개발 베타 버전

Bless(GUI)
 - sudo apt-get install bless

헥사 계산기 진법 계산.

Calculator
16 진수 AD 입력 8진수 255, 10진수 173 확인,
2진수 바이너리 표시 


16 진수 AD 입력 8진수 255, 10진수 173

파일 복구


1. 파일 조각.

이미지 파일, 파티션 또는 하드 드라이브에서 메타 데이터가 아닌 헤더(머리 글) 정보와, 끝(바닥 글) 기반으로 파일을 검색.

NTFS 파티션
부트섹터

메타
데이터
파일 1


파일 2

파일 3

MFT





마스트 파일 표(MFT).
MFT는 모든 파일과 폴더에 대한 정보를 NTFS 볼륨에 저장.

메타 데이터
메타 데이터에는 일반적으로 파일 이름, 만든 날짜, 마지막으로 수정 한 날짜, 사용 권한, 디스크에 있는 파일 위치 등이 포함됨.

2. 리눅스 용 파일 조각 모음 및 복구 유틸
  • Foremost
  • Scalpel
  • Magic Rescue
  • Photorec
  • Recoverjpeg
  • Extundelete
  • Ntfsundelete
  • Scrounge-ntfs
3. 확장자 지정 이미지 파일 복구.
shell> sudo apt-get install foremost
shell> man foremost
-t : 형식
-i : 입력
-o : 출력
복구 가능한 파일 확장자 나열.

파티션 이미지 복사
shell> sudo dc3dd if=/dev/sdc1 of=/home/username/Desktop/flashdriver.img

shell>foremost -t jpg, png, gif -o flashoutput -i flashdrive.img
flashoutput 디렉토리 생성.

gif, png, gif 지정 확장자 파일 복구 확인.

3.1. 하드디스크 파일 복구
shell> sudo fdisk -l
shell> sudo foremost -t zip,doc,pdf -o ntfsoutput -i /dev/sdx1
ntfoutput 디렉토리 생성

shell> chmod 777 ntfoutput

4. scalpel을 이용한 파일 복구
shell> sudo apt-get install scalpel
shell> man scalpel

-c : 구성파일 호출
-o : 출력 디력토리 이름

shell> sudo cp /etc/scalpel/scalpel.conf ./

shell> vi scalpel.conf
복구 하고 싶은 파일 확장자 주석 제거.

파티션 이미지 복사
shell> sudo dc3dd if=/dev/sdc1 of=/home/username/Desktop/flashdriver.img

파일 복구
shell> scalpel -c scalpel.conf -o fileshoutput flashdrive.img

shell> sudo fdisk -l
파티션 정보 확인

NTFS 하드디스크 파일 복구
shell> sudo scalpel -c scalpel.conf -o ntfsoutput /dev/sdx1
shell> sudo chmod 777 ntfsoutput

환경설정 설정한 복구 파일 복원.

5. magicrescue 사용 파일 복구.
shell> sudo apt-get install magicrescue
shell> man magicrescue

-d : 출력 디렉토리
-r : 레시피
-M : 원하는 출력물 생성

기본적으로 지원하는 파일 형식.
shell> ls /usr/share/magicrescue/recipes
avi elf gpl jpeg-exif mbox mbox-mozilla-sent mp3-id3v2 nikon-raw png sqlite
canon-cr2 flac gzip jpeg-jfif mbox-mozilla-inbox mp3-id3v1 msoffice perl ppm zip

shell> mkdir output
shell> magicrescue -f jpeg-exif -r jpeg-jfif -r png -d output/ -M io flashdrive.img > log

shell> mkdir output2
shell> sudo fdisk -l
파티션 정보 확인 NTFS

shell> sudo magicrescue -r jpeg-exif -d output2 -M io /dev/sdx1 > log2
shell> sudo chmod -R 777 output2

6. 외장 디스크(sd, m-sd, usb) 사진 jpg 복구
shell> sudo apt-get install recoverjpeg

shell> mkdir output
shell> cd output
shell> sudo fdisk -l
윈도우 NTFS 확인

shell> sudo recoverjpeg /dev/sdx1
shell> sudo chmod 777 ./output

해쉬 알고리즘을 사용한 리눅스 CLI.

파일 또는 문자열들을 디스크 가져 와 해시 알고리즘을 통해 해시 값을 생성.

데이터 무결성 확인.
- 복사 된 항목이 원본과 정확히 일치하는지 확인.
- 원래 항목이 손상되지 않았는지 확인.

자주 사용되는 해싱 알고리즘.
- MD5(Message Digest 5)
- SHA-1(보안 해쉬 알고리즘)
- SHA-2(SHA-244, SHA-256, SHA-384, SHA-512)

String, 파일, or Disk -----> 알고리즘: MD5, SHA-1, or SHA-2 -----> 해쉬 값: 83e431dkf


파일 1 ----->   알고리즘: MD5, SHA-1, or SHA-2 -----> 해쉬 값: 83e431dkf
copy of 파일1-> 알고리즘: MD5, SHA-1, or SHA-2 -----> 해쉬 값: 83e431dkf
파일 2 ----->   알고리즘: MD5, SHA-1, or SHA-2 -----> 해쉬 값: 83e431ee8

HASHING TOOLS해싱 도구
GNU Coreutils(md5sum)
- 우분투 기본 설치

md5deep
- sudo apt-get install md5deep
- 재귀 적으로 전체 디렉토리 트리 검사.
- 해시 목록을 수락하고 입력 파일 집합과 비교.
- 예상 시간을 산출.

ssdeep
- sudo apt-get install ssdeep
- Fuzzy-hashing

GNU Coreutils
- md5sum : md5 합을 사용하여 해시 생성.
- sha1sum : sha1 합을 사용하여 해시 생성.
- sha256sum : 가장 많이 사용. sha256 합을 사용하여 해시 생성.

md5deep : 해쉬값 모음
- sd5deep 
- sha1deep
- sha256deep
- tigerdeep
- whirlpooldeep

ssdeep
- ssdeep

MD5
- 128-bit 해쉬 값 생성
- 알려진 충돌로 인해 취약.
-- forensics에 좋음 
-- 암호화 보안 좋지 않음. 

SHA-1
- 160-bit 해쉬 값 생성
- 알려진 충돌이 없지만 이론적인 충돌있음

SHA-2
- 244, 256, 384, or 512 bit 해쉬 값 생성
- SHA-1 또는 MD5와 같이 널리 사용되지 않음.
- SHA-2 SHA-256 및 SHA-512가 가장 많이 사용 SHA-2.

shell> touch file1 file2

md5 파일 적용
shell> md5sum file1
d41d8cd98f00b204e9800998ecf8427e  file1
shell> mod5sum file2
d41d8cd98f00b204e9800998ecf8427e  file2

파일 변경.
shell> vi file2
This is a Test.

변경된 파일 md5 적용.
shell> mod5sum file2
66d64d41eb16e6eb4efc10480e52239a  file2

변경 전 후 해쉬 값 바교
file2 변경전 해쉬값: d41d8cd98f00b204e9800998ecf8427e  file2
file2 변경후 해쉬값: 66d64d41eb16e6eb4efc10480e52239a  file2

해쉬 값 정보 저장
shell> md5sum file1 > hash.txt
shell> md5sum file2 >> hash.txt

shell> cat hash.txt
d41d8cd98f00b204e9800998ecf8427e  file1
66d64d41eb16e6eb4efc10480e52239a  file2

sha1sum 해쉬 값 길이
shell> sha1sum file1 >> hash.txt

sha256sum 해쉬 값 길이
shell> sha256sum file >> hash.txt

해쉬값 표현 길이 차이 확인
shell> cat hash.txt
d41d8cd98f00b204e9800998ecf8427e  file1
66d64d41eb16e6eb4efc10480e52239a  file2
da39a3ee5e6b4b0d3255bfef95601890afd80709  file1
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  file1


shell> sudo fdisk -l

하드디스크 파티션 md5sum 확인(소요 시간 있음)
shell> sudo md5sum /dev/sdc1 >> hast.txt

shell> cat hast.txt

hash 세션 구문 추가.
shell> cat hash.txt

해쉬 값 생성.
shell> md5deep file1 >> hash.txt
shell> md5deep file2 >> hash.txt
shell> sha1deep file1 >> hash.txt
shell> sha256deep file1 >> hash.txt
shell> tigerdeep file1 >> hash.txt
shell> whirlpooldeep file1 >> hash.txt
shell> sudo md5deep -e /dev/sdc1 >> hash.txt

해쉬 생성 값 표현 길이 확인.
shell> cat hash.txt

파티션 정보 확인.
shell> sudo fdisk -l

이미지 생성.
shell> sudo dc3dd if=/dev/sdc1 of=/home/username/Desktop/flash.img

실행 권한.
shell> sudo chmod 777 flash.img

해시값 생성.
shell> md5deep -e flash.img > hash1.txt
shell> sudo md5deep -e /dev/sdc1 >> hash1.txt

생성된 해시 값 확인.
shell> cat hast1.txt

원본 파티션 파일 변경
shell> cd /media/username/Backup/
shell> vi 기본_텍스트파일.txt
This is a Test.

변경된 파일 해쉬 값 생성.
shell> sudo md5deep -e /dev/sdc1 >> hash1.txt

변경 해쉬 값 확인
shell> cat hash1.txt

shell> ssdeep flash.img > fuzzyhash.txt
shell> sudo ssdeep /dev/sdc1 >> fuzzyhash.txt

이미지와 파일 변경 사항 해시 값 확인
shell> ssdeep flash.img > fuzzyflash
shell> sudo ssdeep -m fuzzyflash /dev/sdc1

dd 디스크 이미지 덤프 gzip 압축.

 dd(Disk Dump)
- 기본 패키지 설치 됨

dcfldd(국방 컴퓨터 법의학 연구소)
- sudo apt-get install dcfldd
- dd 명령에서 fork 함.

dc3add(방위 사이버 범죄 센터)
- sudo apt-get install dc3dd
- dd 명령어 사용 하며 기능 추가

필수 옵션
- if="device/image"
example: if=/dev/sda
- of="/device/image"
example: of=/home/user/copy.img

파티션 정보 덮어쓰기

파티션 Linux ext4
shell> sudo fdisk -l
Disk /dev/mmcblk0: 58.6 GiB, 62881005568 bytes, 122814464 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x524b0d66

Device         Boot Start       End   Sectors  Size Id Type
/dev/mmcblk0p1       2048 122814463 122812416 58.6G 83 Linux

파티션 NTFS
Disk /dev/sdc: 14.5 GiB, 15504900096 bytes, 30283008 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x09bd599f

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdc1        2048 30281727 30279680 14.4G  7 HPFS/NTFS/exFAT


shell> sudo dc3dd if=/dev/sdc of=/dev/mmcblk0p1

dc3dd 7.2.646 started at 2018-12-22 00:14:00 +0900 ---> 시작 시간
compiled options:
command line: dc3dd if=/dev/sdc of=/dev/mmcblk0p1
device size: 30283008 sectors (probed),   15,504,900,096 bytes
sector size: 512 bytes (probed)
 15504900096 bytes ( 14 G ) copied ( 100% ), 14882 s, 1017 K/s             

input results for device `/dev/sdc':
   30283008 sectors in
   0 bad sectors replaced by zeros

output results for device `/dev/mmcblk0p1':
   30283008 sectors out

dc3dd completed at 2018-12-22 04:22:02 +0900  ---> 종료 시간
총 4시간 30분 걸림.

여기 테스트는 하드 디스크 크기가 같지 않으므로 제대로 인식하지 않음.
동일한 크기를 가지는 USB 저장 장치가 있으면 된다.
shell> sudo fdisk -l

Disk /dev/mmcblk0: 58.6 GiB, 62881005568 bytes, 122814464 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x524b0d66

Device         Boot Start       End   Sectors  Size Id Type
/dev/mmcblk0p1       2048 122814463 122812416 58.6G 83 Linux ----> 기존 값 그대로


Disk /dev/sdc: 14.5 GiB, 15504900096 bytes, 30283008 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x09bd599f

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdc1        2048 30281727 30279680 14.4G  7 HPFS/NTFS/exFAT ---> 기존 값 그대로

파티션 이미지 복사
shell> sudo dc3dd if=/dev/sdc1 of=/home/username/Desktop/flashdriver.img
dc3dd 7.2.646 started at 2018-12-22 06:24:04 +0900
compiled options:
command line: dc3dd if=/dev/sdc1 of=./flashdriver.img
device size: 1953792 sectors (probed),    1,000,341,504 bytes
sector size: 512 bytes (probed)
  1000341504 bytes ( 954 M ) copied ( 100% ),  892 s, 1.1 M/s               

input results for device `/dev/sdc1':
   1953792 sectors in
   0 bad sectors replaced by zeros

output results for file `./flashdriver.img':
   1953792 sectors out

dc3dd completed at 2018-12-22 06:38:56 +0900

shell> sudo chmod 777 flashdriver.img

gzip 이미지 복사.
shell> sudo dc3dd if=/dev/sdc1 | gzip -6 > /home/username/Desktop/zippedflash.gz
옵션
-6 : 압축률 평균
-9 : 압출률 작게

zip 압축해제
shell> gunzip zippedflash.gz