Meet tobi: a CLI tool designed to ease your CTF life
But what is tobi?
Tobi is a CLI
tool designed to help you organize and optimize your CTF workflow. No more creating directories by hand and cd
-ing back and forth. All your challenges, solve scripts and CTFs will be organized in a neatly structured way so that you don’t have to worry about it.
As you can see below, tobi
can also:
- switch your
pwd
by just runningtobi
- track your progress on individual CTFs
- store flags for each challenge
- archive a CTF to save space
- [SOON] manage a remote environment(for pwning for example)
- [SOON] upload your archived CTFs to a cloud service
Installation
Note: Make sure you have cargo
installed on your system. You can use rustup
.
Installation is as easy as running the install script that comes with the repo. Just run the following:
git clone https://github.com/Mcsky23/tobi.git
./install.sh --install-dir=<path_to_install>
Keep in mind that your install-dir
should be in your PATH
env variable.
First time setup
When running tobi
for the first time, it will ask you to run tobi settings
in order to setup the necessary directories for: tobi.db
, .tobicntxt
and ctfs dir. Usually, I recommend storing them all in the same directory.
tobi settings
is implemented using ratatui, a terminal UI library for Rust.
How do I use it?
The way I designed tobi
is around the concept of contexts
. A context
essentially means what you are currently working on. This way, no matter where you are in your filesystem run tobi
and it will take you back to your workspace.
A context
can either be a CTF
or a challenge
from a CTF.
Making your way around tobi
To create a new CTF workspace, just run the command below. It will also switch your context to the newly created CTF.
tobi new ctf <ctf_name>
Want to create a new challenge?(and also switch context to it)
tobi new <category> <chall_name>
Pwned a challenge? It’s time to run:
tobi solve <flag>
- this will solve the challenge that you are currently working on.
But where are all my CTFs?
tobi list
will list your current CTF(from your context).
If you want to see all of your CTFs, run tobi list all
.
Wait… What’s my context?
tobi context
will show you your current context.
But if you want to switch to another context:
Cool features:
- You can omit typing out the CTF name each time. Just specify the challenge title and
tobi
will search for that challenge in your current CTF. tobi
supports tab auto-completion
If you want to find out more about what commands tobi supports, run tobi help
or check out the documentaion on the repo
Crack it open!
tobi
is written in Rust and uses sqlite
as a database to store data about your CTFs and challenges. It’s functionality rely on the following files that are created on your file system:
<custom_path>/tobi.db
- the database file<custom_path>/.tobicntxt
- the file that stores your current context<custom_path>/
- the directory where all your CTFs are stored~/.tobi
- settings file/tmp/tobi
- temporary file for undo operation
<custom_path>
is the path you specified when running tobi settings
.
As you may know, it’s not possible to change the pwd of the shell from a child process. That’s why tobi
uses a bash wrapper function that is sourced in your shell’s rc file
at installation.
The autocomplete feature tries to complete as much as possible based on the current context or predefined commands, but it’s not perfect.
Care trying it out?
If you want to give it a go, feel free to share your experience you had/have with tobi
by shooting me a message on Discord @mcsky23. May you encounter any issues, please open an issue on the repo. I will try to address it as soon as possible.