It's been a while (#14)

May 15, 2022

Hey everyone, I know it's been a while since I've given an update about the project. I've also seen that in the discord there have been some rumors about what's happening and complaints about it being so quiet. First of all, hackero is still a project I'm passionate about, and I spend a lot of my free time on it. But to be honest I've been struggling with my general workload in the last few months. I've had a huge project at work for a big customer that ate all my resources and I did not really find time and energy to work on hackero. That's why I did as much as I wanted and could but I did not really find the time I did before the project. I think this was the best decision even though I should have communicated it more transparently. But anyway I'm back, working on hackero, and I'm really looking forward to it.

Changes under the hood

Since I did not make content progress in the last few months I've done a lot of cleanup in the backend and frontend code.

First of all, I've made some cleanup and necessary updates in the front. Changes in the code and new features were quite complex, had a lot of overhead and often I could not implement a feature the way I wanted because it was just not properly implementable. The mixins the apps were using turned into monsters because of huge amounts of computed properties which were evaluated even though they are not used. Sometimes I had to import 18 properties just to access the current filesystem, which lead to a huge overhead. That are a few of the reasons why I've upgraded the codebase of the frontend to Vue 3 which leads to better build times and enables me to use the composition API. First of all, this simplifies many challenges I'm encountering when developing new features. Second, this slims down every app instance in the UI and lowers the overhead which makes the UI snappier and more responsive. But all of this comes at a cost: Not every dependency is compatible with Vue 3, therefore I had to fork many open source components and migrate them to be compatible with Vue 3.

On the backend side I've refactored the majority of the code. To be honest after migrating the backend from Node.JS to Go about a year ago I've been very fast, but apparently it lead to every day things to be pretty difficult to implement.


In general all of these things where already overdue to be done and I'm happy I was able to make some progress there. Especially in the frontend not all apps are yet refactored however the improvement I can see in already migrated apps makes me feel confident that this will drastically improve the experience.

New features planned for 0.25.x

Before we can dive into the new features I'd like to talk a little bit about communication. To make it short: in the future, I'd like to change how I'm communicating features and changes I'm planning for updates.

About a year ago I've switched all my documentation for the game from Trello cards to Notion. Since then all new features I'm working on I drafted in Notion and I'm really happy with how I can organize my ideas and documentation there. Additionally, Notion offers a board functionality that made Trello redundant. Working with two boards simultaneously (one as a roadmap and another one internally) is quite an overhead I think is not necessary anymore. Because of that, I've decided to stitch the Trello Roadmap altogether and instead share a link to the next releases board on Trello in the future. That might contain some spoilers but will be more transparent regarding progress.

The current board for 0.25.x you can find here: https://adaptive-celestite-32b.notion.site/8b29fbc1860f419c917e07c288f17c0f?v=ce51f3b1cd0546a99734a45f4ea46eb5

Additionally, I've added a new button to the navigation bar leading directly to the current board and I'll update that in the future as well, so it always points to the current board.

A lot of general stuff but next chapture I talk about hackero, I promise ;)

Virus Types, Binary Features and Research

Two things that in my eyes need to be improved are viruses and researching software beneath the point of version 2.0.


In the next release I'd like to work on both aspects and that way connect multiple dangling ends together which I hope will provide new interesting aspects.

Binary Features and changes to Research

The first new feature will address software research beneath version 2.0. Right now there's not much reason to research all software and it's quite enough to research viruses, firewalls, and crackers. At one point this just turns into a huge money sink without any other gameplay aspects other than bumping up a version number. In the future, you can not just find binaries on other systems but also so-called "Static Libraries". In the actual Linux world, static libraries serve the purpose of providing logic that is copied into a binary at compile time. They work pretty similarly in hackero by providing some kind of functionality to a binary. When you research you can select a Static Library file and embedded its functionality into a binary. That way binaries are customizable not just by their version but also by their functionality. This change will also lead to some merging of binaries. for example, the virus control binary and the virus packer will merge and virus packing will be a "feature" that can be added to the virus control binary.

To be able to inject a static library into a binary they sometimes require it to be a specific version or of a specific type. (e.g. Project Cleanland Binary can now be extended with a Static Library analyzer, that requires the binary to be of at least version 2.0).


Once a library is successfully injected its functionality will stay inside the binary.


I'm planning more of these static libraries, some of them might extend functionality to a binary, and others might provide completely different functionality.

One Virus to rule them all... or not?

For a hacking game, the whole Virus feature is quite boring in hackero. I've had many ideas on how to change that, and I've settled on one that I'd like to implement now:

  1. Viruses will have one of the multiple types
  2. Depending on their type they provide different functionalities for different use cases

The following virus types I plan on implementing, however, if anyone has other ideas please let me know! I guess there's endless possibilities.

Virus Types

Mining Virus (Current behaviour)

Uses system resources of a system its running on to mine coins (generates money)

Browser Hijacker

Contains a list of redirects for URLs that will then be redirected once a user tries to open them in the browser (e.g. fake a banking website)

Ransomware

Encrypts a directory and sends an encryption key to a mail address

Macro Virus

Can execute a set of commands (macro) that can nearly do anything. Can be used to create custom attack patterns or especially attack a specific player.

Supported commands:

  • move/rename/delete a file or directory.
  • copy a file carried inside their payload.
  • zip/unzip a directory
  • uploadTo <ip>
  • downloadTo <ip>
  • start process
  • append to file

A simple example for a payload could be:

copyPayload /.unpack/payload.zip
unzip /.unpack/payload.zip
start /.unpack/payload/virus.bin
rm /.unpack/

Resident Virus

Not an actual virus type more like a virus feature. these viruses are really small in their filesize by not containing any code to persist over reboots. Therefore rebooting a system removes them. This leads to some interesting decisions. They can be used on themselves on inactive players' systems, or they can be combined with an unpacker virus that is placed in autostart. A single high-level virus binary might be very large in its filesize, but an unpacker that e.g. loads a zip unpacks it, and installs all files from an URL might be much more flexible and suitable.

More minor features

Autostart directory

Files placed in this directory will be automatically run (can be used to automatically open a browser page etc.)

Reboot system

There's a new small filesize virus variant that is memory only (once the system reboots it is removed). Rebooting a system can also interfere with a macro virus that is executing right now. Reboots are throttled.

The last alpha-keys

I've had some thought about how to send out the last invites, however, I have the feeling that the best option right now is to send them out once 0.25.x is released. I guess there's a lot of interesting things in there and I think it is reasonable to send out the missing keys. Thank you for your patience.

A few last words about Patreon

On my Patreon, I'd like to give more insights in the future about how some aspects of the game are working and dive into some technical aspects. people were asking for information about that sometimes and I'd love to give a few insights there. The first post about how feature flags and binaries are working will be coming up in the next few days.


I'd also like to keep gameplay updates public therefore I've decided to keep these here for everyone to read for free in these blog posts.


This is also the point where I'd like to say thank you to all the people who stayed even though there were not that many updates. I really thank you for your loyalty and trust in me.


If there's anything you'd like to share, you have any feedback or constructive criticism on this blog post, feel free to join the conversation on discord or send me a message there

Tags