This repository has been archived on 2024-09-30. You can view files and clone it, but cannot push or open issues/pull-requests.
hook-frida/venv/Lib/site-packages/frida_tools/join.py

82 lines
2.8 KiB
Python

import argparse
from typing import Any, List, MutableMapping
def main() -> None:
from frida_tools.application import ConsoleApplication, await_ctrl_c
class JoinApplication(ConsoleApplication):
def __init__(self) -> None:
ConsoleApplication.__init__(self, await_ctrl_c)
self._parsed_options: MutableMapping[str, Any] = {}
def _usage(self) -> str:
return "%(prog)s [options] target portal-location [portal-certificate] [portal-token]"
def _add_options(self, parser: argparse.ArgumentParser) -> None:
parser.add_argument(
"--portal-location", help="join portal at LOCATION", metavar="LOCATION", dest="portal_location"
)
parser.add_argument(
"--portal-certificate",
help="speak TLS with portal, expecting CERTIFICATE",
metavar="CERTIFICATE",
dest="portal_certificate",
)
parser.add_argument(
"--portal-token", help="authenticate with portal using TOKEN", metavar="TOKEN", dest="portal_token"
)
parser.add_argument(
"--portal-acl-allow",
help="limit portal access to control channels with TAG",
metavar="TAG",
action="append",
dest="portal_acl",
)
def _initialize(self, parser: argparse.ArgumentParser, options: argparse.Namespace, args: List[str]) -> None:
location = args[0] if len(args) >= 1 else options.portal_location
certificate = args[1] if len(args) >= 2 else options.portal_certificate
token = args[2] if len(args) >= 3 else options.portal_token
acl = options.portal_acl
if location is None:
parser.error("portal location must be specified")
if certificate is not None:
self._parsed_options["certificate"] = certificate
if token is not None:
self._parsed_options["token"] = token
if acl is not None:
self._parsed_options["acl"] = acl
self._location = location
def _needs_target(self) -> bool:
return True
def _start(self) -> None:
self._update_status("Joining portal...")
try:
assert self._session is not None
self._session.join_portal(self._location, **self._parsed_options)
except Exception as e:
self._update_status("Unable to join: " + str(e))
self._exit(1)
return
self._update_status("Joined!")
self._exit(0)
def _stop(self) -> None:
pass
app = JoinApplication()
app.run()
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
pass