스테가노그래피(Steganography) 기법으로 이미지에 문자열 숨기기

 

스테가노그래피란? https://bpsecblog.wordpress.com/2016/08/21/amalmot_4/

 

 

 

Test_스테가노.zip

 

                    1.BMP                                          2.BMP

 

                 3.BMP

 

 

 

1.BMP 와 2.BMP 는 같은 그림처럼 보이지만 2.BMP에는 이미지를 설명할수 있는 문자열이 특수한 형태로 숨겨서 저장되어 있으며 테스트파일을 실행 후 F1을 눌러보면 숨겨진 스테가노그래피 문자열을 확인 할 수 있습니다.

 

3.BMP는 스테가노그래피가 적용된 영역을 시각적으로 표시하기 위해 1.BMP 이미지와 2.BMP 이미지를 비교한 결과를 출력해본 것입니다. (픽셀값이 1비트라도 다른경우 흰색으로 표시)

 

 


< AHK+ 소스코드 >

 

;-------------------------------------------------------------------
;
;이 스크립트는 기존 오토핫키에서는 동작하지 않습니다.
;
;스테가노그래피 기법을 이용하면 이미지에 대한 간단한 정보를 별도
;파일에 기록하지 않고 이미지 자체에 바로 저장할수 있겠다 싶어서
;재미로 추가해 본 기능입니다.
;
;-------------------------------------------------------------------


#SingleInstance Force
srcFile = 1.bmp  ;원본 이미지
tarFile = 2.bmp  ;스테가노그래피 형태의 문자열을 저장할 이미지
txtFile = %tarFile%_에서추출한문자열.txt  ;추출한 스테가노그래피 문자열 저장용 텍스트 파일
MsgBox, 클립보드에 저장된 문자열을 스테가노그래피 형태로`n%srcFile% 이미지에 적용해 %tarFile% 파일로 저장합니다.`n`nF1 : %tarFile% 에 적용된 스테가노그래피 문자열 추출`nF2 : 스테가노그래피 적용(문자열 + %srcFile% -> %tarFile%)`n`nESC 키를 누르면 테스트가 종료됩니다.

 

;이미지에서 스테가노그래피 형태로 저장된 문자열을 추출한다.
F1::
  ImageGet,,,,,, tarFile, *SteganoRead, result
  if ErrorLevel
  {
    MsgBox, "%tarFile%" 이미지에 적용된 스테가노그래피 문자열이 없습니다.
    return
  }
  FileDelete, % txtFile
  FileAppend, % result.stegano, % txtFile
  MsgBox % "< """ tarFile """ 이미지에 숨겨진 문자열 >`n`n" result.stegano
return

 

;클립보드에 있는 문자열을 스테가노그래피 형태로 이미지에 저장한다.
F2::
  str = %Clipboard%
  ImageGet, hBitmap,,,,, srcFile, *SteganoWrite%str%
  if hBitmap
  {
    SaveHBitmapToFile(hBitmap, tarFile), DllCall("DeleteObject", "Ptr",hBitmap)
    MsgBox, 스테가노그래피 적용 성공`n`n"%tarFile%"에 저장 되었습니다.
  }
  else
    MsgBox, 스테가노그래피 적용 실패
return

 

;테스트 종료
Esc::
  MsgBox, 스테가노그래피 테스트를 종료합니다.
ExitApp


;----------------------------------------------------------------------------------
SaveHBITMAPToFile(hBitmap, sFile)
{
  VarSetCapacity(DIBSECTION, A_PtrSize=8? 104:84, 0)
  NumPut(40, DIBSECTION, A_PtrSize=8? 32:24,"UInt") ;dsBmih.biSize
  DllCall("GetObject", "UPTR", hBitmap, "int", A_PtrSize=8? 104:84, "UPTR", &DIBSECTION)
  hFile:= DllCall("CreateFile", "UPTR", &sFile, "Uint", 0x40000000, "Uint", 0, "Uint", 0, "Uint", 2, "Uint", 0, "Uint", 0)
  DllCall("WriteFile", "UPTR", hFile, "int64P", 0x4D42|14+40+(biSizeImage:=NumGet(DIBSECTION, A_PtrSize=8? 52:44, "UInt"))<<16, "Uint", 6, "UintP", 0, "Uint", 0)
  DllCall("WriteFile", "UPTR", hFile, "int64P", 54<<32, "Uint", 8, "UintP", 0, "Uint", 0)
  DllCall("WriteFile", "UPTR", hFile, "UPTR", &DIBSECTION + (A_PtrSize=8? 32:24), "Uint", 40, "UintP", 0, "Uint", 0)
  DllCall("WriteFile", "UPTR", hFile, "Uint", NumGet(DIBSECTION, A_PtrSize=8? 24:20, "UPtr"), "Uint", biSizeImage, "UintP", 0, "Uint", 0)
  DllCall("CloseHandle", "UPTR", hFile)
}

저작자 표시
신고

'쓸데없는것들' 카테고리의 다른 글

스테가노그래피 적용 테스트  (0) 2017.06.16
Posted by 오토핫키

픽셀피커 많이들 있는데 이건 제가 자작해서 쓰는 피커 입니다.

사용 라이브러리는 GDI class 입니다.

 

업데이트를 하지않아 손볼곳이 좀 있으나 크게 불편하지 않아 그냥 쓰고 있습니다.

제가 좀 게으름니다 ㄷㄷ

 

주요 기능을 살펴 보겠습니다.

1. F1 키로 마우스영역 픽셀업데이트를 홀드 및 언홀드 시킬수 있습니다.

2. RGB GRB 토글이 가능합니다.

3. 가드가 보호하는 게임에서 컬러 추출 안될시 AntiGuird를 체크하면 추출이 가능합니다.

4. F2 키로 콤보박스의 픽셀추출 포멧을 이용해 Ctrl 클릭으로 다중 선택된 픽셀을 일괄 추출 가능합니다. 포멧은 ini 파일을 이용해 마음대로 수정 및 추가 가능합니다.

 

주의할점은 제어판-시각효과 설정중 에어로피크나 바탕화면구성등이 설정되 있으면 갱신속도가 엄청나게 느려질 수 있습니다.

 

= 포멧사용 샘플 =

 

포멧1 : [%x%,%y%] %colormode% %color%
[5,7] GRB 0x123168
[6,5] GRB 0x0B215F
[6,7] GRB 0x071C55

 

포멧2 : [%x%,%y%] %delimiter%,%%
[5,7],[6,5],[6,7]

 

포멧3 : {x:%x%,y:%y%} %delimiter%,%%
{x:5,y:7},{x:6,y:5},{x:6,y:7}

 

  PixelPicker.zip

 

 

 

 

 

 

 

 

 

 

신고

'유틸리티' 카테고리의 다른 글

Pixel Color Picker(스크립트)  (2) 2015.09.05
Posted by 오토핫키


티스토리 툴바