• @MakeGrafik, SEHR NICE!!!!!! :thumbup:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <WinAPIEx.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    ;Bilder laden

    [/autoit] [autoit][/autoit] [autoit]

    Global $ptr_source, $hbmp_source, $iwidth_source, $iheight_source ;werden ByRef von _CreateNewBmp32FromFile ausgefüllt
    $DC_source = _CreateNewBmp32FromFile(@ScriptDir & "\3.bmp", $ptr_source, $hbmp_source, $iwidth_source, $iheight_source)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $W=$iwidth_source*20
    $h=$iheight_source*20

    [/autoit] [autoit][/autoit] [autoit]

    $gui = GUICreate("Steganographie :o)", $w,$h)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    $DC_gui = _WinAPI_GetDC($gui) ;DeviceContext GUI holen

    [/autoit] [autoit][/autoit] [autoit]

    $len = $iwidth_source * $iheight_source * 4

    [/autoit] [autoit][/autoit] [autoit]

    $struct = DllStructCreate("byte[" & $len & "]", $ptr_source)

    [/autoit] [autoit][/autoit] [autoit]

    for $i = 1 to $len
    $x = DllStructGetData($struct, 1, $i)
    if $x = 1 then
    DllStructSetData($struct, 1, 255, $i)
    endif
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _WinAPI_StretchBlt($DC_gui, 0, 0, $w,$h, $DC_source, 0, 0, $iwidth_source, $iheight_source, 0xCC0020);bitmap in DC blitten
    sleep(3000)

    [/autoit] [autoit][/autoit] [autoit]

    exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CreateNewBmp32($iwidth, $iheight, ByRef $ptr, ByRef $hbmp) ;erstellt leere 32-bit-Bitmap; Rückgabe DC und ptr und handle auf die Bitmapdaten
    ;by Andy
    $tagBITMAPINFO_dafuqbeta = "struct ;dword Size;long Width;long Height;word Planes;word BitCount;dword Compression;dword SizeImage;long XPelsPerMeter;long YPelsPerMeter;dword ClrUsed;dword ClrImportant;endstruct;dword RGBQuad"
    Local $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
    Local $tBMI = DllStructCreate($tagBITMAPINFO_dafuqbeta) ;Struktur der Bitmapinfo erstellen und Daten eintragen
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4) ;Structgröße abzüglich der Daten für die Palette
    DllStructSetData($tBMI, "Width", $iwidth)
    DllStructSetData($tBMI, "Height", -$iheight) ;minus =standard = bottomup
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32) ;32 Bit = 4 Bytes => AABBGGRR
    Local $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hbmp = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
    $ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet
    _WinAPI_SelectObject($hcdc, $hbmp) ;objekt hbitmap in DC
    Return $hcdc ;DC der Bitmap zurückgeben
    EndFunc ;==>_CreateNewBmp32

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CreateNewBmp32FromFile($bmpfile, ByRef $ptr, ByRef $hbmp, ByRef $iwidth, ByRef $iheight) ;ptr to bitmapdata, it is possible to manipulate one pixel if needed
    Local $hbitmap, $hdc, $hcdc

    [/autoit] [autoit][/autoit] [autoit]

    $hbitmap = _GDIPlus_ImageLoadFromFile($bmpfile)
    If @error Or $hbitmap = 0 Then
    MsgBox(0, "Func _CreateNewBmp32FromFile()", "Error opening File: " & @CRLF & $bmpfile)
    Return -1
    EndIf
    $hbmpfile = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hbitmap)
    $iwidth = _GDIPlus_ImageGetWidth($hbitmap)
    $iheight = _GDIPlus_ImageGetHeight($hbitmap)
    $hcdc = _WinAPI_CreateCompatibleDC(0)
    _WinAPI_SelectObject($hcdc, $hbmpfile) ;image im hcdc

    [/autoit] [autoit][/autoit] [autoit]

    ;neue bitmap
    $tagBITMAPINFO_dafuqbeta = "struct ;dword Size;long Width;long Height;word Planes;word BitCount;dword Compression;dword SizeImage;long XPelsPerMeter;long YPelsPerMeter;dword ClrUsed;dword ClrImportant;endstruct;dword RGBQuad"

    [/autoit] [autoit][/autoit] [autoit]

    $tBMI = DllStructCreate($tagBITMAPINFO_dafuqbeta) ;Struktur der Bitmapinfo erstellen und Daten eintragen
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4);Structgröße abzüglich der Daten für die Palette
    DllStructSetData($tBMI, "Width", $iwidth)
    DllStructSetData($tBMI, "Height", -$iheight) ;minus =standard = bottomup
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32) ;32 Bit = 4 Bytes => AABBGGRR
    $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hbmp = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
    $ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet

    [/autoit] [autoit][/autoit] [autoit]

    $hdc = _WinAPI_CreateCompatibleDC(0)
    _WinAPI_SelectObject($hdc, $hbmp) ;leere bitmap im hdc
    _WinAPI_BitBlt($hdc, 0, 0, $iwidth, $iheight, $hcdc, 0, 0, $SRCCOPY);image in leere bitmap
    _WinAPI_DeleteDC($hcdc)
    _WinAPI_DeleteObject($hbmpfile)
    Return $hdc ;DC der Bitmap zurückgeben

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_CreateNewBmp32FromFile

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Zitat

    Wie lange hast du gebraucht?


    War ja nicht schwer^^
    Das Bild ist sehr klein gewesen, also müssen die Informationen "in" den Pixeln liegen.
    bzgl. Steganographie hatte ich hier schon einen Thread mit Beispiel gepostet.
    Also fix die "Pixel" ausgelesen (Fileread reicht) und festgestellt, dass da einige einzelne "Einsen" vorliegen.
    Jetzt gab es 2 Möglichkeiten, entweder "richtig" steganographiert, also Nullen und Einsen in Bytes (char) gepackt, oder aber die Einsen markierten "nur" eine Maske,was dann auch stimmte^^

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (15. Dezember 2013 um 17:44)