Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 23.12.06 01:23 
Ich bin müde, möchte aber trotzdem für die Wachgebliebenen schon jetzt eine Lösungsvariante vorstellen. Ich denke, ich habe in dem Blog schon genug dazu gesagt.

Die richtigen Antworten sind
  • Angelina Jolie
  • Darth Vader
  • Gollum
  • Halle Berry
  • Jessica Alba
  • Keira Knightley
  • Quark
  • Yoda
Wie man darauf kommt - einfach in dem Programm die Buttons von oben nach unten durchklicken. Das einzige was man zusätzlich tun muss ist, in einem HexEditor nach dem String "MD5" zu suchen. Dass es so aussieht, als würde der zweite Hash mit JP.II anfangen, den Initialien des letzten Papstes, ist dabei reiner Zufall. Ich finds deshalb erwähnenswert, weil Angelina im letzten Moment eingesprungen ist, weil man bei Google für unsere erste Kandidatin etwas zu freizügige Bilder gefunden hat.

Die "Bonusrunde" ist mit dabei. Die kann man übrigens auch mit diesem Programm finden.
Einloggen, um Attachments anzusehen!
_________________
We are, we were and will not be.
coder62
Hält's aus hier
Beiträge: 29



BeitragVerfasst: Sa 23.12.06 01:54 
hmm für die letzten 3 sowas inner art hatte ich probiert kam aber nix beirum und selbst jetzt wo ich die lösung habe versuche ich das nachzuvollziehen aber es kommt nur bei käse bei rum.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var i,i2:integer;

begin
    for i := 0 to 350 -1 do
    begin
    for i2 := 0 to 350 -1 do
    begin
     image2.Canvas.Pixels[
      image1.Picture.bitmap.Canvas.pixels[i,0],
      image1.Picture.bitmap.Canvas.pixels[0,i2]]
      := image1.Picture.bitmap.Canvas.pixels[i,i2];

    end;
    end;


erzielt nicht das erwünschte ergebnis

das im anhang kommt raus und wenn ich nix übersehe ist das wie in der auflösung nur ne bisschen andere variablenname und so.
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.12.06 02:34 
Hmm, sieht eigentlich auch richtig aus... Naja, ich werd meine Lösung bald posten.

Aber erstmal kommentiere ich noch ein wenig ;-).
coder62
Hält's aus hier
Beiträge: 29



BeitragVerfasst: Sa 23.12.06 02:44 
ja eigentlich hab ich es auch schon x mal mit der lösung verglichen und finde keine wirkliche fehler, aber bild im anhang beweist das irgendwas falsch ist hab nur keinen plan was.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.12.06 02:49 
Du kannst doch einfach mal dein ganzes Projekt posten, dann krieg ich schon raus, was falsch ist. Was mich irritiert sind die großen weißen Bereiche. Da frage ich mich, wo die her kommen...
Eigentlich ist das richtig herum, aber es sieht so aus, als wenn die Pixel genau an die falsche Stelle kommen. Versuch mal [0, i] und [i2, 0]... Obwohl das eigentlich verkehrt herum ist, aber du kannst es ja mal versuchen.

Du wendest das doch auf das Gitterbild an, oder?
coder62
Hält's aus hier
Beiträge: 29



BeitragVerfasst: Sa 23.12.06 04:21 
werde morgen noch mal draufschauen, bin sowas von erledigt.

und nur bezüglich dessen ist das alles an code, hab halt timage komponenten, lade da das gitter rein und führe dann per button die schleife aus, was eigentlich anhand der lösung auch genug sein sollte.

edit: mit dem vertauschen kurz noch probiert bringt aber auch nix.

edit2: ich werde mir auf immer und ewig in den allerwertesten beissen, kein wunder das ich das rätsel nicht knacken konnte, ich habe ne falsche datei die ganze zeit geladen die sieht dem orginal zwar sehr ähnlich aber den unterschied sieht man in der oben angehängten datei das ist zum :cry:
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 23.12.06 10:15 
Meine Prozedur für Halle und Co.:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Get234ButClick(Sender: TObject);
var
  Bitmap: TBitmap;
  X, Y:   Integer;
  aCol:   TColor;
begin
  Bitmap := TBitmap.Create;
  Bitmap.LoadFromFile('C:\Gitter.bmp');

  for Y := 0 to Bitmap.Height - 1 do
    for X := 0 to Bitmap.Width - 1 do
    begin
      aCol := Bitmap.Canvas.Pixels[X, Y];
      aCol := GetGValue(aCol) shl 7;
      aCol := GetRValue(aCol) shl 7;

      Bitmap.Canvas.Pixels[X, Y] := aCol;
    end;

  Bitmap.SaveToFile('C:\Test.bmp');
  Bitmap.Free;
end;

Je nachdem ob an der markieren Stelle R, G oder B stand, kam eine andere Person raus.

Meine Prozedur um die letzten 3 zu finden:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
procedure TForm1.Get678ButClick(Sender: TObject);
var
  Bmp1:    TBitmap;
  Bmp2:    TBitmap;
  Bmp3:    TBitmap;
  Bmp4:    TBitmap;
  X, Y:    Integer;
  nX, nY:  Integer;
  R, G, B: Integer;
begin
  Bmp1 := TBitmap.Create;
  Bmp1.LoadFromFile('C:\Gitter.bmp');

  Bmp2        := TBitmap.Create;
  Bmp2.Width  := Bmp1.Width;
  Bmp2.Height := Bmp1.Height;

  Bmp3        := TBitmap.Create;
  Bmp3.Width  := Bmp1.Width;
  Bmp3.Height := Bmp1.Height;

  Bmp4        := TBitmap.Create;
  Bmp4.Width  := Bmp1.Width;
  Bmp4.Height := Bmp1.Height;

  for Y := 1 to Bmp1.Width do
    for X := 1 to Bmp1.Height do
    begin
      R := GetRValue(Bmp1.Canvas.Pixels[X, Y]);
      G := GetGValue(Bmp1.Canvas.Pixels[X, Y]);
      B := GetBValue(Bmp1.Canvas.Pixels[X, Y]);

      nX := Bmp1.Canvas.Pixels[X, 0];
      nY := Bmp1.Canvas.Pixels[0, Y];

      Bmp2.Canvas.Pixels[nX, nY] := RGB(R, R, R);
      Bmp3.Canvas.Pixels[nX, nY] := RGB(G, G, G);
      Bmp4.Canvas.Pixels[nX, nY] := RGB(B, B, B);
    end;

  Bmp2.SaveToFile('C:\Quark.bmp');
  Bmp3.SaveToFile('C:\Yoda.bmp');
  Bmp4.SaveToFile('C:\Gollum.bmp');

  Bmp1.Free;
  Bmp2.Free;
  Bmp3.Free;
  Bmp4.Free;
end;

Meine Prozedur um die verstecke Nachricht zu finden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.GetBonusClick(Sender: TObject);
var
  FStream: TFileStream;
  Buffer:  TBuffer;
  X:       Integer;
begin
  FStream := TFileStream.Create('C:\Jessica.txt', fmOpenRead);
  SetLength(Buffer, FStream.Size);
  FStream.Read(Buffer[0], Length(Buffer));

  for X := 0 to Length(Buffer) - 1 do
  begin
    if (Ord(Buffer[X]) <> 32AND (Ord(Buffer[X]) <> 64then
      Memo1.Text := Memo1.Text + Chr(Ord(Buffer[X]));
  end;

  FStream.Free;
end;

Dazu muss gesagt werden: Nachdem ich die einzelnen Bilder von Jessica und Co. gespeichert hatte, sind mir außer viele @ im Hexeditor noch Buchstaben aufgefallen. Diese zusammengesetzt ergaben den Bonus-Text ;-)

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 23.12.06 11:49 
@coder62: Bei mir funktioniert dein Code.

@Gausi: Hab's eben selbst gemerkt, dass meine Behauptung falsch war und durch eine andere ersetzt ;)


Zuletzt bearbeitet von delfiphan am Sa 23.12.06 12:00, insgesamt 1-mal bearbeitet
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 23.12.06 11:57 
Nein. Die Koordinaten stecken eigentlich in der Farbinformation als ganzes drin. Eine Farbkomponenente reicht nicht aus, da das Bild größer als 256 ist. Die ersten 256 Zeilen/Spalten haben einen R-Wert von 0-255, G und B sind 0. Danach kommen die restlichen mit einem zusätzlichen Grünanteil von 1.
Im "sortierten" Bild erkennt man daher am Rand einen Balken, der von Schwarz langsam Rot wird, dann wieder zu Schwarz zurückspringt und wieder rötlich wird (mit einem nicht erkennbaren Stich ins Grüne).

Edit: Hier hat irgendwer was vorm Ansenden editiert...

_________________
We are, we were and will not be.


Zuletzt bearbeitet von Gausi am Sa 23.12.06 11:58, insgesamt 1-mal bearbeitet
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 23.12.06 11:58 
Beachte außerdem das Edit von ihm: Er hat das falsche Bild geladen.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
TmpDir
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 3

Win7HP Win8.1 Deb/Ubuntu
C# [Delphi 6 Pro, Delphi 2005 PE, TurboDelphi PE]
BeitragVerfasst: Sa 23.12.06 13:14 
Hier mal ein Ansatz für die Farbkanäle ohne Canvas.Pixel

@Rahmenfrage: Nimmt man nur den einen Farbkanal(Byte) des Rahmens, wo nur noch Nullen und Einsen übrig bleiben, kann man viel Spass haben, aus dem Binärcode eine Sinnvolle Nachricht zu machen. :roll:


mfg



BTW: Kann man eigentlich auf den Datenbereich eines Bitmap direkt Zugreifen? In den meisten Beiträgen die ich da gelesen habe, steht immer was von "sehr umständlich" oder "kompliziert, da durch Windows verwaltet..." und das will ich nicht glauben.
Einloggen, um Attachments anzusehen!
_________________
repeat :autsch: until :think:
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 23.12.06 13:59 
@TmpDir: Scanline der letzten Bildzeile = Anfangsadresse für das ganze Bitmap. Die Zeilen sind einfach jeweils DWord-aligned (bei 24-bit Bitmaps beachten) und auf dem Kopf gespeichert. Nach einer Änderung im Speicher musst du ggf Image1.Invalidate ausführen, damit es nach einer Änderung neu gezeichnet wird.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.12.06 20:43 
Titel: Sooo, hier meine Lösung
Hallo!

Ich hatte alles einzeln, aber jetzt hab ich dadraus ein richtiges Lösungstool gemacht. Es zeigt einem ALLE 8 Lösungen (bis auf das Bonusrätsel eben) an.
Hier ein Screenshot:
user defined image

Sorry, dass das Fenster etwas groß ist, aber bei 1024er Auflösung geht es gerade. Am besten gehts mit 1152er oder mehr...

Und hier der Download (selbstverständlich Exe + Quelltext, keine Komponenten müssen installiert werden, sollte ab Delphi 4 gehen):
www.buchmanager-berl...%20by%20jaenicke.zip
Mirror 1 (Direktlink): www.sj-berlin.de/dow...%20by%20jaenicke.zip
Mirror 2 (Direktlink): [url]http://www.jänicke.at/downloads/df/a7d09a3s19d/Multilevel%20by%20jaenicke.zip[/url]
(Der Mirror 2 geht wegen des Umlauts z.B. im Free Downloadmanager nicht...)
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Sa 23.12.06 20:53 
würdest du uns den vorgang des erstellens dieses genialen rätsels schildern ? wie du es geschafft hast, so viele informationen in einer datei zu verstecken und wie der entwicklungsvorgang von statten gegangen ist. was du mit welchen tools gemacht hast etc ?

mfg
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 23.12.06 21:29 
Zum Teil habe ich das ja schon im Blog getan. Ich kann hier ja mal ein paar Codeschnipsel bringen.

Erster Schritt waren Grauwertbilder. Hab ich zwar auch selbst gemacht, aber das können andere Programme ebenso gut. Die drei Grauwertbilder hab ich pixelweise so zu einem zusammengefügt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Image1.Picture.Bitmap.Canvas.Pixels[x,y] :=
         (Image4.Picture.Bitmap.Canvas.Pixels[x,y] AND $FF0000)
      or (Image5.Picture.Bitmap.Canvas.Pixels[x,y] AND $00FF00)
      or (Image6.Picture.Bitmap.Canvas.Pixels[x,y] AND $0000FF);


Das interessanteste ist wohl das Durcheinanderwürfeln dieses Bildes. Das passiert so:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
var xarr, yarr: Array of Integer;
//..

  // X-Array initialisieren und Markierung im Bild setzen
  setlength(xarr,Image1.Width);
  for x := 0 to Image1.Width - 1 do
  begin
    Image1.Picture.Bitmap.Canvas.Pixels[x,0] := x;
    xarr[x] := x;
  end;
  
  // Y-Array initialisieren und Markierung im Bild setzen
  setlength(yarr,Image1.Height);
  for y := 0 to Image1.Height - 1 do
  begin
    Image1.Picture.Bitmap.Canvas.Pixels[0,y] := y;
    yarr[y] := y;
  end;

  // Das ARRAY permutieren
  // Dabei die erste Spalte/Zeile und die letzten beiden so lassen
  // in der ersten Spalte/Zeile steht ja die Markierung der anderen Dimension drin
  // Und in den letzten beiden Zeilen kommt später das mp3 rein.
  // damit das nicht stört, bleibt das unten
  for i := 1 to Image1.Width - 3 do
  begin
    x := i + random(Image1.Width-2 - i);
    tmp := xarr[i];
    xarr[i] := xarr[x];
    xarr[x] := tmp;
  end;
  // entsprechend für yarr

  // zuletzt: Bild würfeln. Hier alles miteinbeziehen, damit die Markierungen mit gewürfelt werden
  for x := 0 to Image1.Width - 1 do
    for y := 0 to Image1.Height - 1 do
      Image4.Picture.Bitmap.Canvas.Pixels[xarr[x],yarr[y]] :=
        Image1.Picture.Bitmap.Canvas.Pixels[x,y];
Man sieht vielleicht: Alles ein bissel Unsauber programmiert. Aber es läuft ;-)

Damit war das Gitter-Bild fertig. Auf dieses Bild wurden dann die Schwarz-Weißbilder drübergelegt. Das lief im Wesentlichen so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
for y := 1 to Image1.Picture.Bitmap.Height -1 do
  begin
    Source1      := Image1.Picture.Bitmap.Scanline[y]; // Gitter-Bild
    Source2      := Image2.Picture.Bitmap.Scanline[y]; // Schwarz-Weiß-Bild
    Destination  := aBitmap.ScanLine[y]; // Zielbild

    // Hier für einen der drei Kanäle. Bei den anderen entsprechend.
    for x := 1 to Image1.Picture.Bitmap.Width -1 do
    begin
          if Source2[3*x] = 255 then
            Destination[3*x] := Source1[3*x] or 1
          else
            Destination[3*x] := Source1[3*x] AND 254;
          Destination[3*x+1] := Source1[3*x+1];
          Destination[3*x+2] := Source1[3*x+2];
     end;
     // Die Pixel der ersten Zeile/Spalte im Zielbild müssen noch extra gesetzt werden

Dabei wurden die Schwarz-Weißbilder aus Farbbildern gedithert. Gibts bestimmt Programme für, ich habs mit dem Code gemacht, den ich hier schonmal gepostet habe.

Hashsummen und weitere Hinweise kamen dann per HxD (der Hexeditor hier ausm Forum) hinzu. Dann Rot13 drüber, und zuletzt das mp3 per HxD in die ersten beiden Zeilen.

Als Tools habe ich also schnell runterprogrammierte Eigenkreationen genommen, und HxD. Sonst nichts. Wenn man mal von dem WaveEditor/Recorder absieht, sowie VLC (damit hab ich EpisodeV abgespielt, in der das Zitat fällt). Damit hab ich das mp3 erstellt.

_________________
We are, we were and will not be.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.12.06 21:30 
Wie er das gemacht hat hat user profile iconGausi doch schon im Blog geschrieben...

// EDIT: Gerade hab ich mich gewundert, warum noch keiner geantwortet hat... :rofl:
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: So 24.12.06 02:34 
Naja da das Rätsel nun vorbei ist kann ich als "verbrecher" des alternativen Weihnachts-Rätsels ja mal verraten wie ich die S/W-Bilder in den Channels verstekct habe bzw. man sie meiner Meinung nach finden sollte: habe die drei Kanäle R,G,B jeweils (als Integer-zahl) auf die nächstkleinere Zahl abgerundet, z.B. 1 auf 0, 99 auf 98 usw. Schwarze Pixel wurden dann +1 (=ungerade). Ferig der Lack. Braucht man also kein mod/div dafür, auch wenns damit eleganter geht :)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)