Code Monkey home page Code Monkey logo

challenges-2020's Introduction

Decompetition 2020 Challenges

This is the full set of challenges used for Decompetition 2020 - the very first one!

Challenges are grouped by language. Inside each challenge folder you'll find:

  • binary.out is the binary itself. Debug symbols are removed.
  • bnil.yml contains Binary Ninja Intermediate Language for the functions we care about.
  • deco.py is a symlink to the test helper. The real file is in the root of the repo.
  • disasm.yml contains disassembly for all the functions we care about.
  • source.xxx is the original source code for the binary.
  • starter.xxx is the starting source code that was provided to the players.
  • test.py contains the secret test cases that were used to check functionality.

The C Challenges

baby-c

The foo() function implements a very inefficient version of the Euclidean Algorithm for finding the greatest common divisor of two numbers, using subtraction instead of modulo. If you give it any negative numbers it'll go into a near-infinite loop.

bitesize

This one is exploitable! The sum() function uses an unsigned char to store the input length, so you can trick it into overflowing the input buffer by giving it a size greater than 255. Note that this one has a custom build script that disables security measures - one of the tests makes sure that it is really exploitable.

prime

This is a simple but efficient primality check. It special-cases a few low primes, and then loops in steps of six, checking possible factors. It stops when it reaches the square root of the number being tested.

rootkit

This one reads in a "process list" and stores it in a linked list. It then iterates over the list looking for evil process 1337. The heart of the challenge is reversing the data structure that's being used.

The C++ Challenges

baby-cpp

This one takes two strings as arguments: a "hand" and a "word", like in the game Scrabble. If you can make word using only the letters in hand then it calculates your score (word doesn't have to be a real word).

lambic

A brewery simulator! Also a vast patchwork of C++ lambda functions.

pedigree

This one reads a family tree from standard input, one person at a time. It then finds the person named in the command line arguments and prints their ancestors and descendants. The Person::ALL map needs a seed entry for this one to work properly - this initialization code wasn't diffed, and caught a lot of people off guard.

streamy

An equation converter. It reads standard input (or a file) as a series of reverse Polish notation expressions and prints (or writes) their infix equivalents - and it uses a whole bunch of C++ stream types to do it. There's also a bit of inheritance and some virtual functions.

unfair

This one encrypts its input with a Playfair cipher. Any non-alphabetical characters are discarded. Note that it doesn't add separators between repeated characters as in the original cipher.

The Go Challenges

baby-go

It's FizzBuzz! Except the output has been changed to make it slightly less obvious that it's FizzBuzz!

batsounds

This one starts a TCP echo server listening on port 20080. If no one connects within 100 milliseconds it gives up and exits.

carshop

This one reads in a list of cars, and then sees if a car like the one requested on the command line is available. It's another type recovery challenge, with some enums thrown in for good measure.

fabulous

Originally named fibl, this one got renamed to make it a little less clear what it was implementing: a linked list storing the first N Fibonacci numbers.

julie

This one uses a syscall to find the dimensions of the current console, and then uses complex128s to create a Julia set in ASCII art. This is the only challenge that was never fully solved.

switcher

Sort-of-ROT-13-ish encryption! It uses a switch to treat capital letters, lowercase letters, and non-letters all differently.

wolfgang

An elementary cellular automaton simulator. You provide the rule number on the command line and it'll output the first twentyish steps, starting from a single centered seed.

The Rust Challenges

baby-rust

Is that string a number? This one uses string parsing and match-based result unwrapping to help you find out.

habidasher

This one computes a few simple but lesser-known hashes of its command line argument and prints the results.

s2ring

This one takes a random seed, a starting string, and a list of possible string substitutions. It then performs up to N random substitutions. This is essentially evaluating an unrestricted grammar, which is equivalent to a Turing machine - hence the name.

toobz

A series of tubes - like the internet! This one pipes its standard input to its standard output through an arbitrarily complex series of TCP connections. Port numbers are read from the command line.

The Swift Challenges

baby-swift

What is that thing you have there? Is it HOTDOG or is it NOT HOTDOG? This disruptive cloud service uses blockchain and artificial intelligence to help you find out.

bandate

This one does date parsing. It also knows the birthdays of all the Beatles.

cardigan

This one expects a credit card number to pay for your many, many sweaters. If you give it one, it'll run a Luhn check to validate it, and if the check is successful it'll print the card's issuer. The IIN database is "encrypted" to make it a little less obvious what's happening.

challenges-2020's People

Contributors

xavierholt avatar

Stargazers

 avatar Ataf Fazledin Ahamed avatar Brian avatar  avatar ZiJian avatar Yu-Fu Fu avatar  avatar  avatar BBge avatar  avatar cold21 avatar Qin Ruizhe avatar Xiang Chen avatar EthanShen avatar Or Shalom Alon  avatar  avatar ;) avatar B3NNY avatar Vishesh Gupta avatar 434b avatar dtm avatar Sunny Mishra avatar Mark Lim avatar Michael DeMarco avatar  avatar Hustcw avatar 蒻蒻蒻蒻蒻蒻 avatar midas avatar Johan avatar Gourav Singh Bajeli avatar dotsu avatar Nguyễn Anh Khoa avatar evandrix avatar Robin avatar  avatar fyezool avatar navneet avatar Suraj Malhotra avatar fangxlmr avatar  avatar panda bear avatar Dania Rifki avatar Xusheng Li avatar Angelin BOOZ avatar Simon Aarons avatar Micheal Drane avatar Mary Guillemard avatar

Watchers

evandrix avatar James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.