Collections

IAMABananaAMAA's GIF puzzle

Posted on r/bitcoinpuzzles 17 minutes after its welcome post. A GIF with a ZIP after its last byte, a note called MEGAN.txt and two Base64 alphabets between it and 1 mBTC. Taken two and a half hours in.

December 22, 2013. IAMABananaAMAA opened r/bitcoinpuzzles, and 17 minutes after the welcome post came the GIF puzzle. A title, 1 mBTC, a link to an animated GIF. Nothing else. The title said easy. Thirteen minutes later the author wrote "I maybe should've put this as medium."

IDiamabananaamaa12 / 231 puzzle · 2013-12-22
Collection

IAMABananaAMAA's GIF puzzle

bitcoin

Posted 17 minutes after the r/bitcoinpuzzles welcome post. A ZIP after the last byte of a GIF, then two Base64 alphabets. Solved in two and a half hours.

Prize recorded
0.001 BTC
Still unsolved
none
closed 1 / 1

Census

solved
1100%
public keys
1100%
private keys
1100%

Access

LoadgetCollection("iamabananaamaa")
Showiamabananaamaa/gif in the playground

How the GIF puzzle works

A ZIP after the last byte

The GIF is 212 frames of an animated Bitcoin logo. Everyone stared at the pixels first. Someone found an artifact in the bottom right corner and called it steganography. The author killed that fast: "the thing in the bottom right is an error on the gif's part."

The real hint was about software: you don't need anything special, just "a program that basically anybody on the planet has". An unzipper. A GIF ends at its 0x3b trailer byte, and a ZIP reads its directory from the end of the file. So glue a ZIP after the GIF and both still open. Rename it to .zip and you get MEGAN.txt, 96 bytes:

jZXbm2zukIKdShNxcJnrkuXPm2XRSZGY=M1Gku=9gKGJc/9uju1eoJ=ynhfSjuXPddfvc2n4cJyqlMf2dLD4k2Nvi2refuSI

A commenter posted it in the thread an hour in. That's where most people got stuck.

Megan is 35

The next hint: "Megan may not be a person, but if she was, she'd be 35 years old." MEGAN-35. Sounds like a hash. It isn't. It's Base64 with a shuffled alphabet, the kind of thing online "encrypter" pages still offer. Decoding gives another Base64 string. That one is ATOM-128, same trick, different alphabet. And out comes a compressed WIF.

Where was ATOM hinted? The author said it after the solve: "The zip file name was ATOM :)." Nobody had noticed.

Order matters here. ATOM first and MEGAN second gives garbage, not a key.

Solved, then noticed an hour later

Wickex posted the address 1DprL7pbKGwjMKoJ4c6BEKrTmtbPB4AiNJ at 01:01:07 UTC, 2 hours 25 minutes after the post. Called it "Public key of the decrypted address", but it's an address. The prize left three and a half minutes later, 0.0009 BTC after a 0.0001 BTC fee. The author was posting from a phone and missed the comment for almost an hour and a half. Then: "Wow, I completely missed your post.. Feel free to explain it!" The method came right after.

What the IAMABananaAMAA record carries

src/collections/iamabananaamaa/gif.ts
export const iAmABananaAmaaGif = bitcoinPuzzle({
  id: "iamabananaamaa/gif",
  address: p2pkh("1DprL7pbKGwjMKoJ4c6BEKrTmtbPB4AiNJ", "8cae3ce6…2c6e0f81"),
  sourceUrl: THREAD,
  startedAt: "2013-12-22 22:35:39",
  status: Status.Solved,
  pubkey: compressed("03987951b3fa4a6f68ba76bd509a8ac4945b3cb1e14be1eadd5d3210f590313024"),
  key: wif("L21s1A2LjTL5WLEfWPJtuKxHKF3PcfJnyiEtjNtPUxwnSdqWBD66"),
  prize: 0.001,
  hints: [/* the program, Megan, the corner, the ZIP name, MEGAN.txt */],
  solvedAt: "2013-12-23 01:04:43",
  solveTime: 8944,
  transactions: [funding(/* … */), claim(/* … */)],
  solver: party("Wickex", { profiles: [/* reddit */] }),
  assets: assets({ puzzle: "gif/puzzle.gif", sourceUrl: GIF }),
});

A key nobody printed

The thread never shows the WIF. Wickex gave the address and the recipe, the author confirmed both. The key in the record is that recipe run on the GIF itself, and verify derives the address from it. The public key comes from the spend's own input script, so it doesn't depend on the recipe at all.

Hints with their answers

Four hints are the author's, each from its own comment. The program and Megan carry Wickex's answers from the method comment, word for word. The corner hint has no answer, because the corner has none. MEGAN.txt is a community hint: someone else extracted it, and the record keeps who.

The GIF in the repo

assets/iamabananaamaa/gif/puzzle.gif is the Imgur file, byte for byte. Same SHA-256 as the Wayback copy from 2020. Imgur still serves it, but a 2013 upload is one cleanup away from gone. So the ZIP is right there if you want to unzip it yourself.

Keyed by the author

iamabananaamaa/gif resolves as gif or iamabananaamaa/gif. The collection is named after the author, not after the GIF. The next puzzle came the next day, a Caesar riddle, and it has room right next to this one.

The IAMABananaAMAA puzzle records

Listiamabananaamaa.all()1 puzzles · 1 solved
  1. gif solved0.001 BTC1DprL7pbKGwjMK…bPB4AiNJ
every name is a page · the key marks a published private keylocal dataset / no network

@agntn/puzzles·MIT license· Public data about public puzzles. Balances come from the chains' explorers through the worker, cached for five minutes. Every key here was public before it landed in a record.