35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
"""Block potentially bad things"""
|
|
from hippolyzer.lib.proxy.addon_utils import BaseAddon, show_message
|
|
from hippolyzer.lib.proxy.message import ProxiedMessage
|
|
from hippolyzer.lib.proxy.packets import Direction
|
|
from hippolyzer.lib.proxy.region import ProxiedRegion
|
|
from hippolyzer.lib.proxy.sessions import Session
|
|
from hippolyzer.lib.proxy.templates import IMDialogType
|
|
|
|
SUSPICIOUS_PACKETS = {"RequestXfer", "TransferRequest", "UUIDNameRequest",
|
|
"UUIDGroupNameRequest", "OpenCircuit"}
|
|
REGULAR_IM_DIALOGS = (IMDialogType.TYPING_STOP, IMDialogType.TYPING_STOP, IMDialogType.NOTHING_SPECIAL)
|
|
|
|
|
|
class ShieldAddon(BaseAddon):
|
|
def handle_lludp_message(self, session: Session, region: ProxiedRegion, message: ProxiedMessage):
|
|
if message.direction != Direction.IN:
|
|
return
|
|
if message.name in SUSPICIOUS_PACKETS:
|
|
show_message(f"Blocked suspicious {message.name} packet")
|
|
region.circuit.drop_message(message)
|
|
return True
|
|
if message.name == "ImprovedInstantMessage":
|
|
msg_block = message["MessageBlock"][0]
|
|
if msg_block["Dialog"] not in REGULAR_IM_DIALOGS:
|
|
return
|
|
from_agent = message["AgentData"]["AgentID"]
|
|
if from_agent == session.agent_id:
|
|
expected_id = from_agent
|
|
else:
|
|
expected_id = from_agent ^ session.agent_id
|
|
msg_block["ID"] = expected_id
|
|
|
|
|
|
addons = [ShieldAddon()]
|