• Code
    >++++++++++[>+++>++++>+++++>++++++>+++++++>+++++++++>++++++++++>+++++++++++>++++++++++++<<<<<<<<<-]>>>>>--.>>---.<<<<<<++.>>>>>>+++++++.-------.>>-----.+.<<<<<<<<.>>>>>>+++.>>+.<<<<<<<<.>>>>>>---.+.+++.>++++.<<<<<<<.>>>>>----.>.>.>--.<---------.++++++.-.<<<<<<<.>>-.<<.>>>>>>-.+.>-----.+++++.<.>++++.<<<<<<<.>>>>--.++++.<<<<.>>>>.>>>>++.<----.---.>-.<--.++++++.-.<<<<<<<.>>>>>>++.--.>.>+.-.++++++.------.<<<<<<<<.>>>--.<<+.
    >++++++++++[>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++<<<<<<<<<<-]>>>>>-.>>>>>-----.<<<<<<<<<++.>>>>>>>++++.-------.>.<+++.+.>--.>+.<<<<<<<<<.>>>>>>>>>-.<---.<--.+++++.<<<<<<<.>>>>>>>>+++++.-----.<-----.+++++.>>+.<<<<<<<<<.>>>>>>>>>+.<++++.<<<<<<<<.>>>>---.++++.<<<++++.<.>>>>>++++.>>>----.+++++++..<<<<<--.<<<.++.>-.<.--.>>>>>>>------.+++.-.+.>>.-.<<.>>.<<<<<<<<<.>>>>>>.>.>-------.<--.+++++.---.>+++++.<<<<<<<<.>>>>>>>----.>>+.--.<<++++++.--.---.+++.>.<<<<<<----.

    Ist aber eine Interessante Idee den Speicherinhalt zu verändern ohne ihn auszugeben...

  • @MakeGrafik,
    sehr fein, ich habe das mal "gebruteforced" :D

    Spoiler anzeigen
    [autoit]

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

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

    dim $iRop[20]
    $iROP[0] = $BLACKNESS ;- Füllt das Ziel-Rechteck mit der Farbe, die mit dem Paletten-Index 0 verknüpft ist
    $iROP[1] = $CAPTUREBLT ;- Inkludiert jegliche Fenster, die das eigene Fenster überlagern in das resultierende Bild
    $iROP[2] = $DSTINVERT ;- Invertiert die Farben des Ziel-Rechtecks (umkehren)
    $iROP[3] = $MERGECOPY ;- Mischt die Farben des Quell-Rechtecks mit dem in hDest aktuell gewähltem Füllmuster (Brush), unterVerwendung des AND Operators.
    $iROP[4] = $MERGEPAINT ;- Mischt die invertierten Farben des Quell-Rechtecks mit den Farben des Ziel-Rechtecks unter Verwendung des OR Operators.
    $iROP[5] = $NOMIRRORBITMAP ;- Verhindert das spiegeln der Bitmap
    $iROP[6] = $NOTSRCCOPY ;- Kopiert das invertierte Quell-Rechteck ins Ziel-Rechteck
    $iROP[7] = $NOTSRCERASE ;- Kombiniert die Farben des Quell- und Ziel-Rechtecks unter Verwendung des OR Operators undinvertiert dann die daraus resultierenden Farben.
    $iROP[8] = $PATCOPY ;- Kopiert das in hdcDest gewählte Füllmuster in die Ziel-Bitmap
    $iROP[9] = $PATINVERT ;- Kombiniert die Farben des Quell-Rechtecks mit dem in hDest aktuell gewähltem Füllmuster, mit den Farben desZiel-Rechtecks unter Verwendung des XOR Operators.
    $iROP[10] = $PATPAINT ;- Kombiniert die Farben des in hDest aktuell gewähltem Füllmusters, mit den Farben desinvertiertem Quell-Rechtecks unter Verwendung des OR Operators. Das Resultat dieser Operation wird wiederum mit den Farbendes Ziel-Rechtecks kombiniert, unter Verwendung des OR Operators.
    $iROP[11] = $SRCAND ;- Kombiniert die Farben des Quell- und Ziel-Rechtecks unter Verwendung des AND Operators
    $iROP[12] = $SRCCOPY ;- Kopiert das Quell-Rechteck direkt ins Ziel-Rechteck
    $iROP[13] = $SRCERASE ;- Kombiniert die invertierten Farben des Ziel-Rechtecks mit den Farben des Quell-Rechtecks unter Verwendung des AND Operators.
    $iROP[14] = $SRCINVERT ;- Kombiniert die Farben des Quell- und Ziel-Rechtecks unter Verwendung des XOR Operators
    $iROP[15] = $SRCPAINT ;- Kombiniert die Farben des Quell- und Ziel-Rechtecks unter Verwendung des OR Operators
    $iROP[16] = $WHITENESS ;- Füllt das Ziel-Rechteck mit der Farbe, die mit dem Index 1 in der PhysikalischenPalette verknüpft ist.

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

    _GDIPlus_Startup()

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

    $gui = GUICreate("example", 640,480)

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

    GUISetState()

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

    $DC_gui = _WinAPI_GetDC($gui) ;DeviceContext GUI holen
    Global $ptr_blend, $hbmp_blend ;pointer auf die pixel, handle bitmap
    $DC_blend = _CreateNewBmp32(640 , 480, $ptr_blend, $hbmp_blend);bitmap erstellen

    [/autoit] [autoit][/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 & "\2.gif", $ptr_source, $hbmp_source, $iwidth_source, $iheight_source)

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

    Global $ptr_dest, $hbmp_dest, $iwidth_dest, $iheight_dest ;werden ByRef von _CreateNewBmp32FromFile ausgefüllt
    $DC_dest = _CreateNewBmp32FromFile(@ScriptDir & "\1.gif", $ptr_dest, $hbmp_dest, $iwidth_dest, $iheight_dest)

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

    for $i = 1 to 16 ;bruteforcen :o)

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

    _WinAPI_BitBlt($DC_blend, 0, 0, 640, 480, $DC_dest, 0, 0, 0xCC0020);bitmap in DC blitten
    _WinAPI_BitBlt($DC_blend, 0, 0, 640, 480, $DC_source, 0, 0, $iROP[$i]);bitmap in DC blitten

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

    _WinAPI_BitBlt($DC_gui, 0, 0, 640, 480, $DC_blend, 0, 0, 0xCC0020);bitmap in DC blitten

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

    sleep(2000)

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

    next

    [/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]
  • @Xorinator, lass mal mein Script laufen und nimm dir 30 Sekunden Zeit beim zuschauen....übrigens, dein Nickname hätte dir weitergeholfen^^

  • Meine Funktion war eigentlich ganz klein und einfach :)

    [autoit]

    ConsoleWrite(B(A('autoit')) & @CRLF)
    ConsoleWrite(B(A('blubbersaft')) & @CRLF)
    ConsoleWrite(B(A('Hier könnte Ihr Text stehen ;)')) & @CRLF)
    ConsoleWrite(B(A('abcdefghijklmnopqrstuvwxyz')) & @CRLF)
    ConsoleWrite(B(A('ABCDEFGHIJKLMNOPQRSTUVWXYZ')) & @CRLF)

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

    Func A($1,$2=0,$3='',$4=0,$5=StringLeft)
    Return (Not $1)?$3:(Asc($5($1,1))-97= _
    $4)?A(StringTrimLeft($1,1),$2,$3&'+', _
    $4):(Asc($5($1,1))-97>$4)?A($1,$2,$3& _
    '>',$4+1):A($1,$2,$3&'<',$4-1)
    EndFunc ; String to "<+>"

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

    Func B($1,$2=0,$3='',$4='',$5=StringTrimLeft)
    Return (Not $1)?$3:Assign('4',$5($1,1 _
    ))?(StringLeft($1,1)='+')?B( $4,$2,$3 _
    &Chr($2+97)):(StringLeft($1,1)='<')?B _
    ($4,$2-1,$3):B($4,$2+1,$3):''
    EndFunc ; "<+>" to String

    [/autoit]

    Argh, ich hätte in der Uni kein Info als Nebenfach nehmen sollen, das versaut den Programmierstil. Auf ein Mal beherrscht man die Rekursion (besser als vorher) und andere Schleifenumgehungstricks, und wer so einen Müll wie Racket programmieren können muss, der kann das obige fast problemlos lesen und Schreiben^^ (Da besitzt eine Funktion prinzipiell nur ein (imaginäres) Return hinter welches man die komplette Berechnung setzen muss...)

    Edit: Viel schöner als 2 Funktionen ist doch bestimmt eine :D

    [autoit]

    Func A($1,$2=0,$3=0,$4='',$5=0,$6=StringLeft,$7=StringTrimLeft)
    Return $2?(Not $1)?$4:(Asc($6($1,1))-97=$5)?A($7($1,1) _
    ,$2,$3,$4&'+',$5):(Asc($6($1,1))-97>$5)?A($1,$2,$3,$4& _
    '>',$5+ 1):A($1,$2,$3,$4&'<',$5-1):(Not $1)?$4:Assign( _
    '5',$7($1,1))?($6($1,1)='+')?A($5,$2,$3,$4&Chr($3+97)) _
    :($6($1,1)='<')?A($5,$2,$3-1,$4):A($5,$2,$3+1,$4):''
    EndFunc ; Param0 = String, Param1: 1->Encode, 0->Decode

    [/autoit]
  • @chess:
    Sorry, ich blicke bei deinem Hackit überhaubt nicht mehr durch...
    Ich kann keinen sinnvollen Zusammenhang erschließen ^^

    Awesome:
    Deines habe ich auch noch nicht gelöst, dafür weiß ich inzwischen dass du das mit "Visual Studio 2012" kompilliert hast.
    Zudem ist der Orginalname der exe "WindowsFormsApplication3.exe"
    Zudem kenne ich inzwischen auch deinen Vornamen :P
    --> Ich arbeite noch dran... :/

    Echt krass was ein Programm alles an Informationen speichert o.o

    Einmal editiert, zuletzt von Yjuq (12. Dezember 2013 um 20:39)

  • Zu dem vom Awesome's hab ich folgendes rausgefunden, vielleichtt hilft es ja

    Spoiler anzeigen

    Sein Programm verbindet sich mit seiner Homepage http://devsome.com und ruft dabei die Seite fd9123nxy12893hnd.php mit dem POST statt GET Befehl auf. Als Content wird arg= gesendet und dahinter eine Hexadecimal-Zahlenfolge die stark einer RC4 Verschlüsselung ähnelt aber keine ist, welche man per OllyDbg rausfinden kann.
    Seine Funktion zum Crypten heißt -soweit ich weiß- irgendwas mit EnCrypt_.
    Wenn man die Website auf den Localhost redirected kann man einen simplen HTTP WebServer bauen der die Pakete filtert, oder man snifft sie mittels WPE Pro / Wireshark.

    Man müsste also versuchen die Goodboy Message zu erraten oder den Clienten so zu patchen das bei jeder Eingabe (ohne Aufruf der Seite, das wird ja gepatcht) die Goodboy Message kommt.

  • Nette Rätsel habt ihr hier :)
    Ich hab dann auch mal eins erstellt :D

    Findet das Passwort. Wenn man das richtige Passwort eingibt, erhält man anschließend das geheime Schlüsselwort.
    Bin mal gespannt ob einer auf das Schlüsselwort kommt, ohne das Passwort zu wissen :D
    Alle Vorgehensweisen sind erlaubt.

    Falls ein Tipp erfoderlich ist:

    Tipp

    38 19 5
    11 8 1


    Viel Spaß beim Knacken :)

    Dateien

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • So, zu Make-Grafik:
    Es sei gesagt, dass er wusste, dass das Rätsel einen Fehler hatte; ihr anderen nicht.
    Im Bild 3.gif muss die rote Zahl eine 1 sein. Ist mir gestern Nacht gar nicht mehr aufgefallen. ^^

    (Make wusste das schon, WhatsApp)

    So, und hier jetzt direkt zum Rätsel:

    Tipp 1


    GIMP ist der falsche Editor. Ein Hex-Editor ist schon sinnvoller.

    Tipp 2


    Die Teillösungen müssen nach den Bildnamen (1.gif, 2.gif und 3.gif) geordnet werden!

    Tipp 3


    Der erste Tipp im Post mit den drei Bildern heißt, dass nur der geringere Teil einer jeden Einheit genommen werden soll.

    Tipp 3.1


    Diese Einheit heißt Byte!

    Und...

    Lösungsweg


    Wir haben die folgenden "Bildinschriften":

    Code
    1.gif => 2 6A0 6
    2.gif => 3 542 8
    3.gif => 1 9B0 6


    Die erste Ziffer (in rot) steht für die Datei, auf die sich die nachfolgenden Infos beziehen. Die Informationen von 1.gif beziehen sich also auf Bild 2 (2.gif). Das war wahrscheinlich leicht zu erraten, wenn man meinen Fehler kannte. ^^

    Die zweite Ziffer (grün) steht dagegen für eine Position innerhalb der Datei in Bytes. Um das Beispiel von oben aufzugreifen, befindet sich also in 2.gif an Stelle 0x6A0 eine Information.

    Die dritte Ziffer (blau) ist dann noch das Offset in Bytes, also die Anzahl von Bytes, die relevant für uns sind. Bei Bild 2 müssen wir also an 0x6A0 6 Bytes ablesen.

    Hier zur Veranschaulichung mal die betreffenden Stellen aus den Dateien als Hex-Code:

    Code
    1.gif => 2 6A0 6 => [25 83 F7 80 66 7F]
    2.gif => 3 542 8 => [77 62 96 8E 26 88 A6 41]
    3.gif => 1 9B0 6 => [47 C5 16 A5 27 C2]

    Jetzt haben wir - durch einen Tipp - die Information, dass nur das Niedere zählt, oder halt der kleinere Teil eines jeden Bytes:

    Code
    1.gif => 53 70 6F
    2.gif => 72 6E 68 61
    3.gif => 75 65 72


    Durch die Information, dass das Ergebnis nach den Bilddateien geordnet werden soll, bekommen wir also:

    Code
    53 70 6F 72 6E 68 61 75 65 72

    Das sieht doch nach ASCII aus, nicht? :whistling:
    Jetzt nehmen wir uns beispielsweise diese Website (oder ein Au3-Skript) und konvertieren unseren Hex-Code nach ASCII in Buchstaben...
    Und als Ergebnis erhalten wir das "Passwort". :P

    Passwort
    Code
    Spornhauer

    Mein Rätsel war evtl. ein wenig schwer... Naja, was solls. :D

    Gruß

  • Ich konnte die Bilder garnicht laden und abspeichern. (nur das thumbnail, und das bringt wahrscheinlich relativ wenig^^)
    Also hab ich überlegt was diese Zahlen bedeuten könnten, kam aber zu keinem Schluss :D

  • Crasht nicht mehr, habs jetzt korrekt gepatched ohne crash.

    Du hasts also nun so gepatched, dass du an das Schlüsselwort gekommen bist, ohne das Passwort zu wissen. Wie du das gemacht hast würde mich schon interessieren :D

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Sehr schön chess :D
    Da bin ich aber gar nicht drauf gekommen :/
    Hier übrigens die Lösung zu meinem Hackit:

    Spoiler anzeigen

    Zuerst müssen die Zeichen sortiert werden. Die Pfeile (<, >, v und ^) trennen dabei die einzelnen "Codeblöcke". In der ersten Spalte ist jeweils der Anfang zu sehen. Das x markiert dabei das Ende:

    Code
    _ _   _ _ _   . _ .   . . .
    .   _ _ . .   .   . .   _ . _ .
    _ . _ .   . . . .    .    _ .

    Dabei handelt es sich um Morsezeichen. Hintereinander gelesen bedeutet dies: "Morsezeichen". ^^

  • Nette Rätsel habt ihr hier :)
    Ich hab dann auch mal eins erstellt :D

    Findet das Passwort. Wenn man das richtige Passwort eingibt, erhält man anschließend das geheime Schlüsselwort.
    Bin mal gespannt ob einer auf das Schlüsselwort kommt, ohne das Passwort zu wissen :D
    Alle Vorgehensweisen sind erlaubt.

    Falls ein Tipp erfoderlich ist:

    Tipp

    38 19 5
    11 8 1


    Viel Spaß beim Knacken :)


    Spoiler wo das Passwort drin ist.

    Spoiler anzeigen

    Haifisch



    Das ist das Secretword, habe es auch ohne Passwort raus bekommen

  • Das Einzige was mich interessiert ist: Wofür braucht das gepatchte Programm Admin Rechte ?
    Ich hab jetzt nicht daran herumgebastelt (irgendwie spinnt mein Editor grade^^), aber rein nach Gefühl würde ich behaupten, dass im Passwortvergleich ein == zu einem != geändert wurde. Da ich das richtige PW nicht kenne kann ich es leider nicht testen^^