HackyEaster2018 Summary
HackyEaster2018 Summary
Summary
PS, www.hacking-lab.com
Table of Contents
Intro .............................................................................................................................. 5
Outro .................................................................................................................................................................... 5
Volunteers ........................................................................................................................................................... 5
Credits.................................................................................................................................................................. 5
Awards.......................................................................................................................... 6
Perfect Solvers ................................................................................................................................................... 6
Hacking-Lab Awards ......................................................................................................................................... 7
Statistics ...................................................................................................................... 8
General ................................................................................................................................................................ 8
Event Activity ...................................................................................................................................................... 8
Solutions per Egg .............................................................................................................................................. 9
Score Distribution ............................................................................................................................................. 9
Fun ..............................................................................................................................10
Images ............................................................................................................................................................... 10
Chuck Norris ..................................................................................................................................................... 10
Solutions ....................................................................................................................11
Teaser Challenge ............................................................................................................................................. 11
Challenge...................................................................................................................................................................................................................... 11
Solution by HaRdLoCk .............................................................................................................................................................................................. 11
Solution by Eydis ........................................................................................................................................................................................................ 12
Solution by Seppel ..................................................................................................................................................................................................... 13
Egg 01 – Prison Break ..................................................................................................................................... 14
Challenge...................................................................................................................................................................................................................... 14
Solution by opasieben .............................................................................................................................................................................................. 14
Solution by IVlike ........................................................................................................................................................................................................ 15
Solution by darkstar .................................................................................................................................................................................................. 15
Egg 02 – Babylon ............................................................................................................................................. 16
Challenge...................................................................................................................................................................................................................... 16
Solution by Spitzbua ................................................................................................................................................................................................. 16
Solution by pjslf .......................................................................................................................................................................................................... 17
Solution by Seppel ..................................................................................................................................................................................................... 17
Egg 03 – Pony Coder ....................................................................................................................................... 18
Challenge...................................................................................................................................................................................................................... 18
Solution by beewasp ................................................................................................................................................................................................. 18
Solution by eash ......................................................................................................................................................................................................... 19
Solution by muzido.................................................................................................................................................................................................... 19
Egg 04 – Memeory ........................................................................................................................................... 20
Challenge...................................................................................................................................................................................................................... 20
Solution by enigma69 ............................................................................................................................................................................................... 20
Solution by evandrix .................................................................................................................................................................................................. 21
Solution by jcel ........................................................................................................................................................................................................... 21
Egg 05 – Sloppy & Paste ................................................................................................................................. 22
Challenge...................................................................................................................................................................................................................... 22
Solution by veganjay ................................................................................................................................................................................................. 22
Thank you and stay tuned for HACKvent 2018 and Hacky Easter 2019!
Volunteers
A big thank you to the volunteers who provided challenges (in alphabetical order):
3553x explo1t
AppleStuff inik
brp64 jcel
CoderKiwi Kiwi.wolf
darkstar opasieben
Dingo otaku
Dykcik trolli101
Credits
Credits for the solutions go to (in alphabetical order):
Event Activity
Number of hackers and solutions, growing with time.
Score Distribution
Number of users, for each score.
Chuck Norris
No worries, we weren't hacked. It was just a little joke by us.
Challenge
Play the teaser game, and beat the boss to get an Easter egg. But we warned - the boss is very powerful!
You'll need some trickery to be victorious!
Beat the boss and get the Easter egg! Submit the solution code of the egg.
Solution by HaRdLoCk
we are given a game and the challenge description states: "Beat the boss and get the Easter egg! Submit the
solution code of the egg" - but we are hackers and will beat the boss in a different way!
i simply started the game, saved it once and exited again. then i used a savegame editor (RpgMakerSaveEdit)
to give myself the egg item.
Password: 47ru3h3r0
Solution by Eydis
First I extracted game data with RPG Maker XP / VX VX Ace Decrypter and generated the Game.rvproj2 file.
I opened the game file with RPGVXAce RPG Maker and looked through items and locations.
I found an item called 'Easter Egg':
In the description there was a following number sequence: 34 37 72 75 33 68 33 72 30. Converted to ASCII:
47ru3h3r0.
Challenge
Solution by opasieben
Reference
This refers to the encryption used in prison break to send Sara a secret message. The Numbers refer to the
keys of a T9 numpad, where the dots means the character on the button. e.g. Number 7, 3 dots = R
Encryption
Number: 555-7747663 Link
. ... ... .... ... .. ..
7 7 4 7 6 6 3
P R I S O N E
Password
prisonerisking
Solution by darkstar
Solved by hand using an old mobile phone.
Challenge
Solution by Spitzbua
Visit the library of babel online:
https://libraryofbabel.info/browse.cgi
I selected browse option from the menu, inserted the ciphertext content of the provided file into the hex name
textarea and submitted the form.
Then I simply applied the addressing from description:
Wall: 4
Shelf: 4
Volume: 28
Page: 355
Solution by Seppel
Challenge
Solution by beewasp
This is punycoder
https://www.motobit.com/util/punycode-decoder-encoder.asp
Solution by muzido
A google search for "pony coder decode". Then I found some pages about punycode or idn (Internationalized
Domain Names). Then I installed an idn converter tool as below;
Solution:
gin tonic
Challenge
Solution by enigma69
I know, my solution maybe is not the fastest way - but it is simple!
When I opened the game, I saw a card set with 100 concealed cards. If I hovered with the mouse over a card, I
could see the card_number at the bottom of the screen:
I found out, that cards which belong together, have adjacent card numbers (card number 0 and 1 have the
same picture, card number 2 and 3 have the same picture and so on).
So I hovered with my mouse over all concealed cards, until I found 2 adjacent card numbers - after I found
these 2 cards, I revealed these cards.
When I revealed the last card, I got my easter egg:
Solution by jcel
The task was to successfully play memory with meme pictures in a 100x100 grid. Inspecting the source code
of the page revealed that the tiles were initiallay arranged in the correct order, i.e. two matching tiles
(identified by the image file) were next to each other:
<figure id="legespiel_card_0">
<a href="#card_0">
<img class="boxFront" src="./lib/1.jpg" />
<img class="boxWhite" src="./lib/shadow_card.png" />
<img class="boxBack" src="./lib/back.jpg" />
</a>
<img class="boxStretch" src="./lib/shim.gif" />
</figure>
<figure id="legespiel_card_1">
<a href="#card_1">
<img class="boxFront" src="./lib/1.jpg" />
<img class="boxWhite" src="./lib/shadow_card.png" />
<img class="boxBack" src="./lib/back.jpg" />
</a>
<img class="boxStretch" src="./lib/shim.gif" />
</figure>
In the Firefox's Inspector tool, the tiles were rearranged randomly. A simple manual (but somewhat tedious)
method to solve this was thus to simply use the Inspector's drag-and-drop function to restore the initial
order. Then, simply clicking pairs of neighboring tiles revealed the egg.
A much more elegant solution would have been to sort and click the tiles using JavaScript on the console,
but the simple task of manually sorting an array was kind of relaxing ;-)
Challenge
Solution by veganjay
This is a mobile challenge. Get the Android APK from the device:
$ adb shell pm list packages -f | grep hacky
package:/data/app/ps.hacking.hackyeaster.android-
1/base.apk=ps.hacking.hackyeaster.android
$ adb pull /data/app/ps.hacking.hackyeaster.android-1/base.apk
[100%] /data/app/ps.hacking.hackyeaster.android-1/base.apk
Inside the file base/assets/www/challenge05.html is the base64 encoded image for the egg.
$ cp challenge05.html egg05.txt
<Edit the file and retain only the base64 code>
$ base64 -d egg05.txt > egg05.png
So I unpacked the APK and found the HTML-Files in the www dir.
I checked the source of challenge05.html. As I expected, I could see the Base64 string which was different than
the previous one from the clip board.
Copy text into a Base64 decoder, remove one equals symbol (=), decode and the easter egg shows up.
Challenge
Solution by L3O
Looking at the encoded text seems like base 64 which gives:
salt
oil
t7w2g
ntdo.
onion
3rd and 4th didn’t make any sense so I tried to keep decoding into Hex, base32 so on. After a while when I was
just staring the decoded ingredients onion catch my eye and I thought it might be related to TOR then I started
googling with the challenge title and tor then I bumped into this website: https://thehiddenwiki.org/ Finally I
was able to solve the challenge. It was an onion URL.
Solution by eash
I decoded the receipt from base64 that pointed me to a .onion site.
Challenge
Solution by markie
So the scrambled jigsaw is 32 tiles x 18. The file is 1280 x 720 so each square is 40 x 40 pixels.
Use image magic to chop jigsaw.png into its component parts.
magick convert jigsaw.png -crop 40x40 C:\Users\mark\Desktop\hacky\parts-%02d.png
goodsheepdontalwayswearwhite
Solution by evandrix
@ https://github.com/alexey-tsvetkov/jigsaw-puzzle
src/run.py --generate -i jigsaw.png -o jigsaw-pieces --piece_size 40
...or...
convert -crop 40x40+0+0 jigsaw.png piece-0-0.png
[py]
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys
import operator
from PIL import Image
def go(root,direction,niter):
ns = []
for i in xrange(niter):
# print>>sys.stderr, "#%d: %d"%(i,root)
vals = {}
ima = Image.open("jigsaw-pieces/%d.png"%root)
da = ima.load()
sa = ima.size
for j in xrange(576):
if j == root: continue
imb = Image.open("jigsaw-pieces/%d.png"%j)
sb = imb.size
db = imb.load()
z = 0
for x in xrange(sa[1]):
if direction == "l":
a = da[0,x]
b = db[sa[0]-1,x]
elif direction == "t":
a = da[x,0]
b = db[x,sa[1]-1]
elif direction == "r":
a = da[sa[0]-1,x]
b = db[0,x]
else: # [b]ottom
a = da[x,sa[1]-1]
b = db[x,0]
y = abs(a[0]-b[0])+abs(a[1]-b[1])+abs(a[2]-b[2])
z += y
vals[j] = z
sorted_vals = sorted(vals.iteritems(), key=operator.itemgetter(1))
# print>>sys.stderr, root,direction,niter, sorted_vals[:8]
root, _ = sorted_vals[0]
if direction == "l": ns.insert(0,root)
else: ns.append(root)
if __name__ == "__main__":
for root in
[4,8,15,19,25,28,30,33,34,39,40,57,59,66,71,99,126,133,145,157,198,199,201,205,2
11,240,252,259,260,285,292,298,305,367,372,376,377,389,432,441,461,466,476,478,5
16,517,524,536,550,561,562]:
print>>sys.stderr, root
img_out = Image.new("RGBA", (40*32+1,40*18+1), (255,255,255,255))
idxss = [
go(go(root,"t",1)[0],"l",8)+[go(root,"t",1)[0]]+go(go(root,"t",1)[0],"r",8),
go(root,"l",8)+[root]+go(root,"r",8),
go(go(root,"b",1)[0],"l",8)+[go(root,"b",1)[0]]+go(go(root,"b",1)[0],"r",8)
]
for i,idxs in enumerate(idxss):
for j,x in enumerate(idxs):
img = Image.open("jigsaw-pieces/%d.png"%x, "r")
img_w, img_h = img.size
img_out.paste(img, (j*40,40*(1+i)))
img_out.save("output-%d.png"%root)
password: goodsheepdontalwayswearwhite
(ref: Bon Jovi - Good Guys Don't Always Wear White)
Challenge
Solution by explo1t
First I stored the html site locally. After some analysis I found out, that every QR-code pixel has multiple classes.
It randomly changes color out of its available colors (derived from classes). So I insert following js code, before
the pixel change animation:
if (classes.indexOf("black") >= 0) {
color = cellcolors["black"]
}
else {
color = cellcolors["white"]
}
After some short waiting time, the egg was revealed.
Solution by eash
I have replaced the Javascript code that loads initially with the following code:
$(document).ready(function() {
$("td").each(function() {
var classList = $(this).attr("class");
if (classList.indexOf("black") !== -1) {
$(this).css("background-color", "black");
} else if (classList.indexOf("white") !== -1) {
$(this).css("background-color", "white");
}
});
});
...
<td class="cyan red brown blue black green darkgrey" style="background-
color:#FBF305;"></td>
<td class="cyan black blue red lightgrey" style="background-
color:#FBF305;"></td>
<td class="darkgreen black tan cyan green blue" style="background-
color:#FBF305;"></td>
..
I used the following shell code to remove all the other colors from the class except for "black" or "white" from
disco.html
GetEgg.sh
#!/bin/bash
# to insert newline before "<td " and after "</td>" from html source code.
sed "s/<td /\n<td /g;s|</td>|</td>\n|g" disco.html |
while read -r line # to read line by line
do
# to change only contain "td class " in the line
if [[ $line = *"td class"* ]]; then
# if the line contains white then delete other colors
if [[ $line = *"white"* ]]; then
echo '<td class="white" style="background-color:#ffffff;"></td>';
else
# if the line contains black then delete other colors
if [[ $line = *"black"* ]]; then
echo '<td class="black" style="background-color:#000000;"></td>';
fi
fi
else
# if the line not contains "white" or "black then just print the line
echo $line;
fi
done
Challenge
Solution by veganjay
Having extracted the Android program in a previous challenge, find an mp3 file in base/res/raw/dial.mp3
Copy and paste the results to a file. The results contain the tone offset, end offset and length, which we do not
care about, so remove it with:
$ grep "^.$" decoded.txt > numbers.txt
Separate the numbers by pairs, delimited by the "#" sign. For example:
4 * 7 #
2 * 6 #
At this point, the puzzle is very similar to challenge 1. The second number in each pair representing the number
on a telephone keypad, and the first number corresponds to the index of the letter on the key. For example, "4
Solution by muzido
I found apk file from https://apkpure.com/hacky-easter/ps.hacking.hackyeaster.android. Then decompile this
apk file by using http://www.javadecompilers.com/apk
I found dial.mp3 file in <apk_source>res/raw. Then run the following code to convert mp3 to wav file.
ffmpeg -i dial.mp3 dial.wav
I found these;
4 * 7 #
2 * 6 #
1 * 2 #
2 * 5 #
2 * 3 #
3 * 6 #
2 * 6 #
2 * 6 #
3 * 6 #
2 * 5 #
3 * 4 #
1 * 2
Phone Numbers : 7 6 2 5 3 6 6 6 6 5 4 2
Letter position on the Keypad : 4 2 1 2 2 3 2 2 3 2 3 1
S N A K E O N N O K I A
Solution:
snakeonnokia
So it just plays a music file. A look up into “res/raw” shows a dial.mp3. It plays some DTMF Tones. I
used the following site to make my first try: http://dialabc.com/sound/detect/
For this I converted the mp3 with audacity to a wav file. I got the following Input:
“4 * 7 # 2 * 6 # 5 # 2 * 3 # 3 * 6 # 2 * 6 # 2 * 6 # 3 * 6 # 2 * 5 # 3 * 4 #”
It looks like the prison break cipher. Which results into SNJEONNOKI and that’s wrong. After another research
I found a tool called “DTMFChecker” and this give me the output:
The looks really close, but it looks like that the last char is missing “snake on nokia” should be the solution
(without spaces):
Challenge
Solution by Mitsch
use "RGSSAD - RGSS2A - RGSS3A Decrypter.exe" the extract the game definitions from Game.rgss3a
convert it into the a readable YAML format with
./rvpacker -a unpack -d ../../HackyEaster\ RPG/ -t ace
the parts of the flag can be found in
Map014.yaml: Prison 7034353577307264355f052d066b15035433
Map015.yaml: Garden 70343535773072105d6c6b05032d0f546f4c
Map024.yaml: Dimension Rift 7034353577307264355f3406033b5749114c
Items.yaml
description: "7034353577307264355f3472335f6330306c\r\n"
name: Egg
XOR each flag from the Maps with the Egg Item
00 00 00 00 00 00 00 00 00 00 31 5F 35 34 76 33 64 5F
00 00 00 00 00 00 00 74 68 33 5F 77 30 72 6C 64 5F 20
00 00 00 00 00 00 00 00 00 00 00 74 30 64 34 79 21 20
ignoring resulting 0x00 and 0x20 and you get
1_54v3d_th3_w0rld_t0d4y!
Then I opened the Game file with RPGVXAce RPG Maker and looked through maps and items. I found the
following pieces:
1. 7034353577307264355f052d066b15035433 (p455w0rd5_-k T3) –
event in the Prison location:
5. An important hint:
When I xored first three pieces with the last one I got these pieces of the password:
1. 7034353577307264355f052d066b15035433 ^ 7034353577307264355f3472335f6330306c =
315f35347633645f (1_54v3d_)
2. 70343535773072105d6c6b05032d0f546f4c ^ 7034353577307264355f3472335f6330306c =
7468335f7730726c645f20 (th3_w0rld_ )
3. 7034353577307264355f3406033b5749114c ^7034353577307264355f3472335f6330306c =
74306434792120 (t0d4y! )
After relaunching the game, we see that there is a code in the Egg
Decoding it gives: p455w0rd5_4r3_c00l, but this is not the correct password yet, as the description of the
challenge says, there are several parts that needs to be combined. To find other parts we would need to
explore maps of the game, unfortunately, the Bunny is trapped in a prison and cannot move freely. To change
Bunny's location, I used Cheat Engine http://www.cheatengine.org/. In the Cheat Engine I found addresses in
the game's memory that store X and Y coordinates of the Bunny and simply changed the X coordinate to move
Bunny out of the prison
Immediately after escaping the prison, I encountered another code in the similar format as the one in the Egg.
All data of the game are stored in Game.rgss3a file. The file is not readable, but its content can be extracted
using an RPG Maker Decrypter found at
https://www.reddit.com/r/FNaFBFangames/comments/3o0a7j/if_you_want_to_decrypt_any_
rpg_maker_games_heres
Now using PowerShell command findstr /sic:"703435" *.* in the directory where the rgss3a file was extracted
we can find all codes:
Xoring the first code with the remaining three gives: "1_54v3d_", "th3_w0rld_ ", "t0d4y! ".
Joining these three words together and removing spaces gives the correct password:
1_54v3d_th3_w0rld_t0d4y!
Challenge
Solution by pjslf
The zip archive was protected by a password so the first step was to crack it using a suitable dictionary.
$ fcrackzip -D -u -p ./dictionary/top_10000.txt basket.zip
PASSWORD FOUND!!!!: pw == thumper
$ unzip basket.zip
Archive: basket.zip
[basket.zip] egg1 password: thumper
inflating: egg1
inflating: egg2
inflating: egg3
inflating: egg4
inflating: egg5
inflating: egg6
I must admit that this challenge was a disappointment to me. It had much higher potential.
After some investigation on the steps from each character to the next, you get the hunch that it is inversed.
Just XOR with FF and get the PNG.
Oh, nice! The password is thumper. When we unpack the archive with the eggs we notice that all
files but the last one are of equal size only the last one is smaller. This is usually an indication of
having a split archive. When we look at the header
When we watch the video we see a cat playing a keyboard, but no indication of how to proceed.
binwalk, stegoveritas and all the other tools of the trade show no indication of hidden data. When we google
for “deegger” we can find a tool called “Deegger Embedder” from Z.A. Software which automatically extracts
the egg for us. The software can be downloaded from
http://download.cnet.com/DeEgger-Embedder/3000-2144_4-75710065.html
D:\>AtomicParsley.exe r:\tmp\basket\bigegg.m4v -T
[…]
The last one looks weird… We extract the contents starting at byte 7537658 to a new file called “parsley”. Then
we use xorbrute.py to look for the string “PNG” – and we are lucky! It is found with xor byte 0xff.
fname = "parsley"
fh = open(fname, "rb")
b = bytearray(fh.read())
fh.close()
xorData = xor(b, 0xff)
fname = "egg11.png"
fh = open(fname, "wb")
fh.write(xorData)
fh.close()
Challenge
Solution by blaknyte0
I created an Android Virtual Machine, installed the HackyEaster App and let it run for a few days.
(Turn on „always active“ in developer options.).
it calculates a hash on every timer event. of course i tried to trick the counter, but this didnt work. lowering the
timeout also didnt really make it faster.
from the javascript we can see that it sends a hash and the counter to the app.
and in the app it does calculate sha1hex based on the input from the javascript. so we have genesis+100000
hashed and then this hash+99999 hashed and so on.
with a simple python script we can find the correct path to the egg:
To sum up, it concatenates the hash and the count, calculates the sha1 value, and returns this as a new hash.
This can be emulated in python:
Challenge
Solution by LlinksRechts
When examining the pattern closely, one can notice that it is a QR code distorted to an elliptical shape.
Solution by opasieben
Opening the kmz file with Google Maps, some custom Waypoint were visible. These looked like a circular QR
code. I made a very simple PoC with photoshop.
I tried to figure out a fitting algorithm to do this, but finally went with the manual way. Creating elipses, the
missing points and some help lines to transfer the circle into a 25x25 excel matrix.
The coordinates are arranged in a circle, but a closer look already shows the characteristics of a QR code. So,
we only need to map the coordinates of the circle to those of a square to get a real QR code. This can be done
using some trigonometric functions.
Since only values between -1 and 1 can be used for the calculation, the coordinates must be normalized
beforehand. This can easily be done by subtracting an offset from both the x and y coordinates, because the
distance between the outer coordinates is 2.
We can use a python script to calculate the coordinates for the square and save the result as an image.
Challenge
Solution by horst3000
Needs: Two QR Codes which are “Hackvent” and “Hacky Easter”. However the equality function of the hashes
of these images should return true.
First try
Magic Hashes -> Need to begin with “0e”
Create QR Code. Modify ending of image until hash is reached.
Same same?
Well done. You brute-forced the PHP == collision. Nevertheless, to get the flag
you need to come up with the === collision. Keep trying.
Hint: The uploaded QR code does not have to be in an image file. You can also
put it into a PDF...
Second try
pdf int -> shatterd (pdf with the same hash but different pictures in it)
use this service: https://alf.nu/SHA1
receive qr.
Hackvent Hackyeaster
The website generated two PDF files with the same SHA-1 hash:
I uploaded those PDF files to a challenge website and received the egg.
My starting point was here: https://shattered.io/ where they demonstrate the weakness in SHA1 and how you
can have two PDF files with the same SHA1 hash.
So I used the sha1collider script (source: https://github.com/nneonneo/sha1collider) to create two new files
with the same hashes and upload them in the webpage to get the egg. In order to do this I ran the following
command on the following QR codes (in pdf format):
When running a sha1sum on the output file I get the following, same sha1 hashes:
Challenge
Solution by Floxy
The keywords “Deck of cards” and “cipher” leads me to well-known Solitaire-Cipher, so I started coding a little
C#-Tool because I found a library on following site
https://www.schneier.com/academic/solitaire/
With the parsing part of the deck following website helped me:
http://jnicholl.org/Cryptanalysis/Ciphers/Solitaire.php
THEPASSWORDISCRYPTONOMICON
Entering “CRYPTONOMICON “ in Egg-o-Matic leads to egg:
Solution by Darkice
For this challenge we were given a ciphertext and a card deck. One cipher using cards as encryption keys is the
solitaire cipher. To decrypt the message, we can use an online tool.
https://ermarian.net/services/encryption/solitaire
Since the tool uses a different notation for the cards, we had to convert it beforehand.
Key:
8d 3s 7d 3d 2c 5s Ad 6c 7s 6d A Kd Qh Js Jc 7h 3h 9h 9s 8s 9c As 4h 8c
3c Kh Ah 6s 6h Ts Ks Ac Td Qd Qc B Qs 4s 9d 2s 5c Jh Th 4c Tc 5d 8h 2h
2d Jd 7c Kc 5h 4d
Now I only needed to convert the provided playing cards to numbers as described in the script and run it:
Challenge
Solution by 0x90v1
This challenge is interesting. I just found out at least two possible solutions how to solve this challenge.
The first one I did was just checking the repository and search for PNG with notepad++. On this way, I quickly
found something interesting under the following path:
.git\objects\db\ab6618f6dc00a18b4195fb1bec5353c51b256f
That looks like it could be a PNG image. Checked it with the HEX editor and removed everything in front of the
PNG tag. QR code revealed in that way after I opened it with an image viewer.
I was thinking after words, that this cannot be the only one solution so I google it for some special git
commands and found out how to restoring not yet versioned changes. With the following command, I found
a blob and a commit:
It turns out that it was a PNG so I just had to pipe the output directly into a PNG file and got the final egg for
this challenge.
Solution by markie
In Continuous Integration version control - “cloak” means to exclude specific folders/files from a repo. So a file
exists in this git repo, but cannot be seen in the commits.
All the images (png and jpg) in this repo are saves a blob files in git (binary large objects). All blogs and tree
information is store in .git/objects. This folder contains some 26 images and trees. All these objects are sha1
of the objects in the repo.
All that is needed now is some git-fu to work out which SHA1 does not appear in the commits, and you should
have the SHA1 of the egg.
Decompressing this with zlib (see below python), shows the file as bytes output. In this we see it is a .png file,
so could be the missing egg!
Decompress the sha1, convert the bytes to hex, convert hex to png and save the file:
import zlib
import binascii
from PIL import Image
from PIL import ImageDraw
import io
Solution by jcel
The challenge consisted in a zip file containing a git repository. It contained some images, none of which
contained the desired QR code.
However, since git stores all versions of all files in the .git/objects directory, the following shell commands can
be used to extract all of them (only the ones that start with "blob" are relevant here):
Removing the "blob [09-a-f]*" prefix from the files resulted in viewable JPG and PNG files. Of these, it can be
easily seen that the file
.git/objects/db/ab6618f6dc00a18b4195fb1bec5353c51b256f
contains the correct egg.
Challenge
Solution by Buge
The site codemoji.org didn't seen to have an easy way to enter text to decode.
I managed to get it to decrypt by going to:
https://codemoji.org/#/encrypt
Then entering some arbitrary text in the message box, then clicking on the space invader emoji (👾 which can
also be determined by googling space invader emoji). Then clicking share this message. Then I copied the link
and visited it. Then I clicked on decipher it. Then I used chrome's inspect element on the message on the left,
and changed the text attribute on the div from the existing emoji to the emoji from the challenge
⚾⭐📯💵🎨📢📘💪☀🌆💪🐸🎨🐦📢
Then I clicked on the space invader emoji and it gave me the message
invad3rsmustd13
I entered that into the box and got the egg.
Very strangely if I don't select the space invader for the initial useless encryption step, it doesn't work. But that
should have no effect, because I'm deleting that ciphertext. My only conclusion is that codemoji is bad and is
sending the key or something similar to it through a side channel.
Also, there is a hint that the message encoded in the text-file has been created using codemoji.org.
On the website a message can be entered, which is encrypted by selecting one of a few hundred smileys. The
ciphertext is a series of smileys just like the provided invaders_msg.txt.
I was a little bit lucky solving this challenge, because before actually starting to understand the encryption-
mechanism I decided to test a few smileys with the text
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 looking for smileys of the
provided ciphertext.
As there are a few pixel-invaders on the image of the challenge, I also tried the following smiley and noticed
the smileys from the encrypted message on the right side:
Since the mapping from characters to smileys is one-to-one, the only thing left doing was to see which
smiley equals which character:
As you see it is a base64-json message with the key and the message. I used https://gchq.github.io/CyberChef/
to generate my own base64-json message. I used the space invader icon, just for fun. I mean it is at least the
hint of the message:
https://codemoji.org/?data=eyJtZXNzYWdlIjoi4pq%2B4q2Q8J%2BTr%2FCfkrXwn46o8J%2BTovCfk5jwn5Kq
4piA8J%2BMhvCfkqrwn5C48J%2BOqPCfkKbwn5OiIiwia2V5Ijoi8J%2BRviJ9#/landing
Notice, that I added a “#/landing” after the base64-json data, so that I got to the landing page. Otherwise the
script will break :)
Challenge
Solution by scryh
The provided file A.8xp is a program for the TI-83+ Graphing Calculator:
root@kali:~/Documents/he18/egg18# file A.8xp
A.8xp: TI-83+ Graphing Calculator (program)
I used a TI-83+ program (.8xp) Interpreter to disassemble the file:
The program seems to ask for a username and a password. But the interesting part is at the end of the output:
ClrDraw:AxesOff:expr(Str5)*0.01->A:Line(-
1.7067137809187278*A,1.1201413427561837*A,-1.6042402826855124*A,0.76
67844522968198*A):Line(-4.54,2.17,-4.08,2.57):Line(-
[…]
After running the script, it became obvious what should the value of parameter A:
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=3.87671232877
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
same spot: A=2.83
Drawing all the lines (and one circle, the position of which was not dependent on user input) with A=2.83
returned the following image:
Solution by MaZeWindu
The attachment was a .8xp file, which is a program for the Texas-Instruments 83+ Graphing Calculator. The
code was written with SourceCoder 3 (https://www.cemetech.net/sc/) and can be viewed with it. The site has
an TI-emulator too, but the program didn’t run on it properly. I own an TI84+ and used it for this challenge. At
the start, there are three possibilities:
1 Enter Username, 2 Enter Password and 3 Seeeeecret.
Option 3 prints a graph, but for the calculation the correct password is needed (the username can be left out).
I looked up the commands I didn’t know on http://tibasicdev.wikidot.com/ and made a little python script
that simulates the calculation of the correct password:
This way I get the correct code: 283. Now I have to adjust the window in which the graph is shown, and I get t
he flag:
WOW_NICE_HAX
Challenge
Solution by 0x90v1
First of all i just analysed the ELF executable with IDA for quite a while. Was checking all string, functions and
was doing some reverse engeneering stuff to figure out, if the password is somehow stored in the file itself. But
pretty quick it was obvious that it wasn’t.
So next, I was looking if I could figure out, which algo was used for the decryption part. I was able to reverse
this part and figured out that it is the TEA encryption. The algo was used in the d function part.
So part was solved. Now I wanted to write a little brute force program. I figured out that the encrypted data
was right after enter the password string part:
Also there are some other stuff which I could figure out during the reversing stuff:
We can set 6 bits per byte and 8 bytes. So it seems to be a high possibility that ther are no high ascii characters
used for the password. So it has to be 5 bit per byte. Also it looks like that only Uppercase letters are used.
So I have to use the first block (8 bytes) from the encrypted data only, because its ECB mode and with that I
should be able to get the right password already.
So I can crack the first block I’m able to decrypt also the rest. I also was guessing, that the decrypted data
would be a PNG picture and with that I knew, for what I have to look for.
So I only have to keep in mind, that I have to check all buffers from the “wrong” direction, means if I have to
look for first buffer it's not 50CBB5D5 rather d5b5cb50. If I would knew that a little bit earlier it would have
saved a lot of time: P
With the EGG hint from the challenge description, I was able to bruteforce the password in a matter of seconds:
Solution by Darkice
After some reverse engineering of the given binary we know that the Tiny Encryption Algorithm (TEA) was used
to encrypt the egg. The algorithm uses a 128-bit key and should therefore be difficult to crack, but in this case
a 64-bit key was duplicated to generate final key. Furthermore, the key space has been limited to characters
from 0x40 to 0x5f, which is equivalent to a 40-bit key. Brute-forcing a 40-bit key only takes several hours if we
use multiple CPU cores and can be done using a C program. Since the eggs for other challenges were PNG files
we can assume the same for this one and use the header to check if we have found the right key.
Password: H@CKYEGG
After checking the password length, the program iterates on the first 8 characters and makes some logic
operations on each character as the following:
Based on the previous logical operation and with the help of ASCII character encoding map the result will be
converting each character to its upper case or modifying non alphabets to binary value starting with 010xxxxx
as the middle column shown in the below table:
The last part of the program is the decryption of the encrypted data saved before. By analyzing the decryption
function d, I found that it is using 2 constants 0x0c6ef3720 and 0x61c88647. Which means it is a decryption
function of the TEA (Tiny Encryption Algorithm).
Now, we have an encrypted egg and we need to know the password that will decrypt it to a PNG image file. We
need to get the key (16 bytes) that will decrypt the 1st 8 bytes of the encrypted egg to the PNG image file header
(1st 8 bytes). We have only 8 characters from the pool-> @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
I wrote a script to iterate all available 5+3 words with substituting A with @. It tries to decrypt the 1st 8
encrypted bytes and checks the result if it is a PNG file header.
#!/usr/bin/env python
import tea
fh = open('3words.txt','r')
twords = fh.readlines()
fh.close()
Challenge
Solution by inik
I don't know midi, installed rosegarden and found nothing useful. I also looked at the pdf, there are too many
meaningless b's and #'s. So this is Stego either. After poking around I found, that the PDF has hidden text. With
OpenOffice Draw I could visualize it:
Now looking into the MIDI events with rosegarden. Found out, that the velocity could be ascii values.
For this I exported all tracks into a Csound score file (because it's the easiest to read programmatically) and
output the text trackwise (variable last is to eliminate doubled events, most likely an error in the midi file
importer of rosegarden):
Results in
RES Section: i1
RES Val: QQNNQRNSNSMEGMNNPNNKNQORPQOMKLJNLOMKI...
RES Section: i2
RES Val: `d_UWUW_S_SWSZZVZV^QWWQWW`adN[Y]cZ]cZZ_Za`]^V[NZ
RES Section: i3
RES Val: -.-. --- -- .--. --- ... . -.. -.. -.-- -.. .--- ... .--. ----- ----- -
. -.-
RES Section: i4
RES Val: ((-2:><==>C@C;;;;;;>;<;<@><<><6<=:>@>@>@9;@<<Eaa__]]\...
RES Section: i5
RES Val: QRRRPTQPOO65O65OO65O;4O;4ON?<N?<N@;KN4949NN@=N@=NN@=N=9>=9>=..
RES Section: i6
RES Val: u>YZfttq}~}
RES Section: i7
RES Val: .8@<DBDB;$$74>S@DN;BF6F>9<>FBKDB33/7KQ\QNSF9@>>29<I89B;7DD8...
RES Section: i8
RES Val: falfeecd```aa`bad`fcecig^`ccabb`fh`a__`_a`cbij`cabdfdddehgdeeeefde...
RES Section: i10
RES: 2Q(Y_;!BDPD@M:<Oj'DIRFVVbBF\9UF+Zd*ZZZDQH@QL=QTZJc]hZrmYbZ`i...
That's all garbage, except for track i3, which is morsecode. Decoding it online with https://gc.de/gc/morse/ I
got the password COMPOSEDBYDJSP00NY.
ok - so we know it's about hiding information in midi files. this is steganography. the hint about 0-127 tells us
its about the volume midi parameter (good i did produce a lot of electronic music in my life).
we most likely need to extract midi events - but what's the best way to do that? i was too lazy to learn about
all the details of the midi format and just used https://www.anvilstudio.com/ to save the midi events as txt and
then regex the volume out of it.
i coded a python script that gets all midi events from the different tracks (that i saved manually to txt) and
converted them to ascii.
i ran this for all files and got one interesting hit:
nice challenge!
Since the character set is apparently 0-127, it became obvious pretty fast that the data is hidden in the velocity
values of the MIDI events. Therefore, I converted the MIDI file to text using a python tool from
https://github.com/vishnubob/python-midi and extracted a list of velocities using
cat nonameyet.dump|grep Off|grep -o '\d*]\)'|tr -d '])' > offVelocities
-.-. --- -- .--. --- ... . -.. -... -.-- -.. .--- ... .--. ----- ----- -. -.--
which when decoded yields COMPOSEDBYDJSP00NY. This is the password for the Egg-o-Matic.
Challenge
Solution by Kiwi.wolf
Stage 1: Extract the ciphertext
When using the file command you’ll see that it’s actually a tiff. Tiff images can be layered.
Since layered tiff normally can’t be shown by gimp, you can use the ImageMagick Library.
$ Convert flag.jpg'[1]' layer.tiff
To extract the ciphertext from the qr code you can use zbarimg and base64 -d
Solution by 0x90v1
First step for me it was, that I had a few on the picture with a hex viewer. There I saw that there is a Public Key
inside and I saw as well some hint about Photoshop.
So the extracted public-key was:
-----BEGIN PUBLIC KEY-----
MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKBgQTMleqB9nvRKhTnR4/2BDDU
g5hkjbRQygvrZWDATbC9rXxCAqaegim2XUlD8yVxYkyzJZxmAYba7qLTe3bctocM
L7GXdMf3kQiVLPigN2auEiPFreWZvZ/b4FzcvOhh+SprypAkYn9SapTyGzLdpYdD
TyoWFRT7QgEhIsDGcncsXQKBgQCVbdUZa5uQ7O9bgu2WPvUwwvuI+ZK5gOZCF299
1QRa/rdDHKyYiUxxZXjemxGICxvoC698wVvmVqzG/sCT+iLArIh4OmSHgyd1yjcA
CWmsffHYLvsl3tnN9Jiu5qzN6aGthHjK/424NK0RkfjUdmnQydYN/MqfS7c+AkfJ
QWV/9w==
-----END PUBLIC KEY-----
After that, I opened the picture in Photoshop and saw the different layers. One of them seems to be the Egg,
so quickly QR scan showed me it was not ;-)
It seems to be an encrypted message and the type of if remembered me about like RSA.
So I went one step ahead and used google one more time to figure out if it’s possible to get the private key out
of the public key. Then I found the following python script:
https://github.com/Ganapati/RsaCtfTool
So now the only thing I had todo was, decrypting the message. I found a Webpage, which did the stuff for me,
called http://travistidwell.com/jsencrypt/demo/
I was able to insert the private key and it seems that this was all that we needed. Of course I had to enter the
encrypted message which I got from the QR code in the Photoshop.
Looks like we have a PNG image at offset 0x2172AD4. By extracting the PNG image
# binwalk -D "png image:png" hotdog.jpg
Looks like a base64 encrypted data. By opening the hotdog.jpg file using GIMP and getting the Image
properties, I found a public key!!
The public key has a weak RSA encryption, then tryig to decrypt it using RsaCtfTool.py..
#./RsaCtfTool.py --publickey key.pub --uncipher Cipher.enc
Great job haxxor, here's your flag: {b3w4r3_0f_c0n71nu3d_fr4c710n5}
Challenge
Solution by Floxy
AES decryption with a given message and a service which returns “error” and “ok” leads me to Padding-Oracle
Attack. The most available scripts that are available only support “HTTP”-Attacks so I decided to use
https://github.com/mpgn/Padding-oracle-attack and adjust it to use sockets.
Challenge
Solution by daubsi
This was a very nice challenge, especially because I had just finished attending Cousera’s free Machine
Learning lecture by Andrew Ng… 😊
In this challenge we have to train a classifier, apply it to a test data set, and send back our results. If our results
are accurate to at least 99%, we are given a cookie which lets us access the reward page which probably gives
us the flag/egg.
Using the scikit-learn ML libraries of Python the whole challenge can be solved in a couple of dozen LoC :-D
Next we will need to access the assignment page which has a list of objects in JSON format. So the idea is to
go through the whole list and sort out goodtails and luckyspoon using 1 and 0 respectively. The output should
be in this format [1,0,0,1,..]. Hence I wrote this script to sort them quickly:
Using the output of the script and burp proxy I constructed a request towards http://whale.hacking-
lab.com:2222/predict in the following way:
I changed the http request from GET to POST, added content type: application/json, added cookie of the
session which I grabbed through packet sniffing, and of course used the results of the above script in the
request.
Next to get the reward, it’s important to use the same cookie so I submitted a simple request toward /reward
page with the same cookie and got the egg as a result.
Challenge
Solution by darkstar
If we call the program without parameters it informs us that it would like to be started with a pin.
$ ./lock
./lock <pin to unlock>
The same QR-Code (—— locked ——) is displayed for different pins.
We can therefore assume that the code we are looking for is only displayed with the correct PIN. Now we could
try to find the right pin by reversing, but a simple bruteforce attack might be enough.
Solution
Pin: 1098505442
Solution by Floxy
After loading the file in gdb and stepping through the code, I first land on the “checkpin” function, but this
leads me nowhere. So I decided to step through the code from the beginning.
My test-PIN was “1111” in HEX “457”.
I stepped through the code and found an interesting “cmp eax, ebx” statement, where EAX was my entered
pin.
So I tried to convert EBX (0x4179dce2) to decimal “1098505442” and entered this as PIN. Therefore the ELF-
binary revealed the egg.
Disassemble
./lock 1098505442
Challenge
Solution by inik
First I thought it has to do with the html header, which was wrong. Then I had a look at the http header (using
web developer) and found a base64 string:
Solution by pjslf
The heads word written in italics was obviously a hint so I took a look at the response headers. I found one
particularly interesting: Content-Eggcoding.
$ wget https://hackyeaster.hacking-lab.com/hackyeaster/challenge.html?id=25
-O /dev/null -q -d 2>&1
| grep Content-Eggcoding
| cut -d' ' -f2
| base64 –d
https://hackyeaster.hacking-
lab.com/hackyeaster/images/eggs/ba0c74ed439ab4795fc36999f542ba50b326e109.png
Challenge
Solution by enigma69
In order to solve this challenge, first I opened the Hacky-Easter webpage. After the page was loaded, I clicked
„Diese Seite an ‚Start‘ anheften“ in the settings menu:
The HackyEaster page was now available as tile in the Windows 10 start menu. Here I did a rightclick on the
HackyEaster tile and changed the icon size from Middle to Large:
After then I got the easter egg and the challenge was solved:
By searching tiles with Microsoft Edge, I found that all the tiles information are stored in browserconfig.xml file.
By visiting https://hackyeaster.hacking-lab.com/browserconfig.xml URL, I got:
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="https://hackyeaster.hacking-
lab.com/hackyeaster/images/tiles/mstile70x70.png"/>
<square150x150logo
src="https://hackyeaster.hackinglab.com/hackyeaster/images/tiles/mstile-
270x270.png"/>
<square310x310logo src="https://hackyeaster.hacking-
lab.com/hackyeaster/images/tiles/mstile310x310.png"/>
<wide310x150logo
src="https://hackyeaster.hackinglab.com/hackyeaster/images/tiles/mstile310x150.p
ng"/>
<TileColor>#4923a0</TileColor>
</tile>
</msapplication>
</browserconfig>
https://hackyeaster.hacking-lab.com/hackyeaster/images/tiles/mstile-310x310.png
Bingo!!
Solution by beewasp
This egg is hidden in a very subtile manner. Perhaps you need to browse on the edge.
Opened URL in Edge.
Pinned to start menu (tile).
Changed tile size and egg was there!
VERY nice challenge
Challenge
Solution by enigma69
In the challenge description there was a hint, that the easter egg could be found in an app (Got appetite). Of
course that should be the Hacky Easter app, hopefully for Android. In order to examine this I downloaded the
appropriate apk-file from https://www.apk4fun.com/apk/247768/ .
After downloading the file I unpacked it (because an apk-file is a packed archive like a zip-file). After the
unpacking process I opened the new directory:
Ok, now it was time to search for the easter egg in the directory structure! After a short research I found the
png-file in the directory /res/drawable/jc_launcher.png :
Solution by darkstar
After unpacking the apk file and listing all PNGs a hidden egg was found.
find . −iname \∗. png −print 0 | xargs −I {} −0 cp −v {} ../pictures/