mirror of
https://github.com/Aryma-f4/Ares-mythic.git
synced 2026-06-12 10:24:13 +00:00
refactor(payload): rename apollo to ares and update documentation
This commit renames the Apollo payload type to Ares, moving all associated files and updating documentation accordingly. The change includes: - Renaming directories from `apollo` to `ares` - Updating documentation image references - Maintaining the same code functionality while changing the payload name - Adding new Ares-specific documentation files - Removing old Apollo documentation files The rename is done to reflect the new payload name while preserving all existing functionality.
This commit is contained in:
93
documentation-payload/ares/contributing/C2 Profiles.md
Normal file
93
documentation-payload/ares/contributing/C2 Profiles.md
Normal file
@@ -0,0 +1,93 @@
|
||||
+++
|
||||
title = "Creating C2 Profiles"
|
||||
chapter = false
|
||||
weight = 25
|
||||
+++
|
||||
|
||||
## Creating a New Profile
|
||||
|
||||
New command-and-control profiles for Apollo should be new projects under the Apollo solution. Your new project should be named `C2ChannelProfile`, where `C2Channel` is the means through which the profile will talk to Mythic. For example, if this profile communicates over HTTP, the project name will be `HttpProfile`. If it would communicate over web sockets, the name should be `WebSocketProfile`. This project should be a .NET Framework 4.0 Class library.
|
||||
|
||||
In your new project, create a class that has the same name as your project (e.g., `public class C2ChannelProfile`). This class should inherit from the `C2Profile` abstract class and the `IC2Profile` interface. The constructor of your new C2 profile will take the following parameters:
|
||||
|
||||
- Dictionary<string, string> parameters - C2 Profile specific parameters. For example, things like jitter, urls, host headers, etc. would all be passed via key-value pairs in this dictionary.
|
||||
- ISerializer serializer - This object is used to prepare C# structures into a serialized format that Mythic will receive, and allow the profile to deserialize JSON messages from Mythic into Apollo structures. Currently this variable should not be modified in the agent core.
|
||||
- IAgent agent - Core Apollo agent interface that grants the C2 profile access to other parts of the agent, such as the task manager.
|
||||
|
||||
The new C2 profile should implement the IC2Profile interface, which is as follows:
|
||||
|
||||
```
|
||||
public interface IC2Profile
|
||||
{
|
||||
// Used to connect to Mythic. This function will send the checkinMessage and perform any EKE, if required.
|
||||
// On successful connect, this function will return the value of the onResp function.
|
||||
bool Connect(CheckinMessage checkinMessage, OnResponse<MessageResponse> onResp);
|
||||
|
||||
// The main working loop of the agent. This should perform the periodic checkin of the agent,
|
||||
// dispatch new taskings, and return results.
|
||||
void Start();
|
||||
|
||||
// If the profile, on submission of data, will not receive Mythic's response as a reply,
|
||||
// this function should be used. Example: The data is submitted to a separate url than
|
||||
// where Apollo will receive the response. Used if a one way profile.
|
||||
bool Send<IMythicMessage>(IMythicMessage message);
|
||||
|
||||
// Send the data specified by Message to the server and pass the response of
|
||||
// Mythic ot the onResponse function.
|
||||
bool SendRecv<T, TResult>(T message, OnResponse<TResult> onResponse);
|
||||
|
||||
// Fetch data from Mythic. Used if the profile is a one-way profile.
|
||||
bool Recv(MessageType mt, OnResponse<IMythicMessage> onResp);
|
||||
|
||||
// Tells the caller that this C2 profile is stateful,
|
||||
// and as such it supports only the SendRecv operation.
|
||||
bool IsOneWay();
|
||||
|
||||
// Return whether or not the C2 profile is currently talking to Mythic
|
||||
bool IsConnected();
|
||||
}
|
||||
```
|
||||
|
||||
## Adding Your Profile to Apollo Core
|
||||
|
||||
Once you've created your new C2 profile, you'll need to add it to Apollo as a build option for C2 profiles.
|
||||
|
||||
In the Apollo project under the Apollo solution, add your new C2 profile as a project reference. Then, at the top of the `Apollo/Config.cs` file, add the following lines:
|
||||
|
||||
```
|
||||
using System;
|
||||
...
|
||||
#if C2CHANNEL
|
||||
using C2ChannelProfile;
|
||||
#endif
|
||||
```
|
||||
|
||||
Lastly, in the `EgressProfiles` dictionary, add a new entry for your C2 profile. It shoudl be of the format:
|
||||
```
|
||||
#if C2CHANNEL
|
||||
{ "c2channel", new C2ProfileData()
|
||||
{
|
||||
TC2Profile = typeof(C2ChannelProfile),
|
||||
TCryptography = typeof(PSKCryptography), // do not change
|
||||
TSerializer = typeof(EncryptedJsonSerializer), // do not change
|
||||
Parameters = new Dictionary<string, string>()
|
||||
{
|
||||
#if DEBUG
|
||||
"param1": "debug_val_1",
|
||||
"param2": "debug_val_2",
|
||||
...
|
||||
#else
|
||||
"param1": "param_boilerplate_to_be_filled_in_by_builder.py",
|
||||
"param2": "param_boilerplate_to_be_filled_in_by_builder.py",
|
||||
...
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
To debug your C2 Profile, simply fill in the parameter values in the DEBUG block of your parameters, and add at the top of the file `#define C2CHANNEL` in the `#if DEBUG` block.
|
||||
|
||||
|
||||
### Add to Builder.py
|
||||
|
||||
Lastly, you'll need to modify the builder.py file under `Payload_Type/apollo/mythic/agent_functions`. In that file, add your new profile to the `c2profiles` attribute under Apollo.
|
||||
Reference in New Issue
Block a user