'2017/06/16'에 해당되는 글 1건

  1. 2017.06.16 스테가노그래피 적용 테스트

 

스테가노그래피(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 오토핫키


티스토리 툴바