Android Full-Stack Device Control Platform: WebRTC/H.264 remote desktop, UI/OCR/image-matching automation, one-click MITM, built-in Frida, proxy/VPN/frp/P2P networking, MCP/Agent, 160+ APIs, designed for multi-device clusters and engineered deployments.
This report summarizes scanner evidence for firerpa/lamda, a Python project with 8,567 GitHub stars. SynthScan examined 7,063 lines of code across 44 source files, recording 98 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 15.3 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 56 finding(s).
Are imports declared and package/API names verified? 34 finding(s).
Are wrappers, guards, and repeated structures necessary? 58 finding(s).
Which changes need focused human review? 98 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 98 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/startmitm.py | 98 | def get_default_interface_ip_imp(target): | CODE |
| LOW | examples/user-home/modules/extension/firerpa.py | 66 | def execute_shell_script_foreground(self, ctx, scrip: Annotated[str, "Shell script content."]): | CODE |
| LOW | examples/user-home/modules/extension/firerpa.py | 121 | def click_by_description_contains(self, ctx, substring: Annotated[str, "The substring to be matched."]): | CODE |
| LOW | examples/user-home/modules/extension/firerpa.py | 125 | def click_by_description_matches(self, ctx, regex: Annotated[str, "The string matching the element's description."]) | CODE |
| LOW | examples/user-home/modules/extension/firerpa.py | 141 | def current_top_application_info(self, ctx): | CODE |
| LOW⚡ | examples/user-home/modules/extension/firerpa.py | 157 | def is_application_running_foreground(self, ctx, package_name: Annotated[str, "The package name, such as com.android | CODE |
| LOW⚡ | examples/user-home/modules/extension/firerpa.py | 161 | def list_application_permissions(self, ctx, package_name: Annotated[str, "The package name, such as com.android.sett | CODE |
| LOW⚡ | examples/user-home/modules/extension/firerpa.py | 165 | def grant_application_permission(self, ctx, package_name: Annotated[str, "The package name, such as com.android.sett | CODE |
| LOW⚡ | examples/user-home/modules/extension/firerpa.py | 169 | def revoke_application_permission(self, ctx, package_name: Annotated[str, "The package name, such as com.android.set | CODE |
| LOW⚡ | lamda/client.py | 794 | def scroll_from_top_to_bottom(self, step): | CODE |
| LOW⚡ | lamda/client.py | 799 | def scroll_from_bottom_to_top(self, step): | CODE |
| LOW⚡ | lamda/client.py | 804 | def scroll_from_left_to_right(self, step): | CODE |
| LOW⚡ | lamda/client.py | 809 | def scroll_from_right_to_left(self, step): | CODE |
| LOW⚡ | lamda/client.py | 1765 | def is_android_debug_bridge_running(self): | CODE |
| LOW⚡ | lamda/client.py | 1771 | def start_android_debug_bridge(self): | CODE |
| LOW⚡ | lamda/client.py | 1777 | def stop_android_debug_bridge(self): | CODE |
| LOW⚡ | lamda/client.py | 2500 | def start_android_debug_bridge(self): | CODE |
| LOW⚡ | lamda/client.py | 2502 | def is_android_debug_bridge_running(self): | CODE |
| LOW⚡ | lamda/client.py | 2504 | def stop_android_debug_bridge(self): | CODE |
| LOW⚡ | lamda/client.py | 2595 | def get_watcher_triggered_count(self, name): | CODE |
| LOW⚡ | lamda/client.py | 2597 | def reset_watcher_triggered_count(self, name): | CODE |
| LOW⚡ | lamda/client.py | 2603 | def register_click_target_selector_watcher(self, name, conditions, | CODE |
| LOW⚡ | lamda/client.py | 2608 | def register_press_key_watcher(self, name, conditions, key): | CODE |
| LOW | lamda/client.py | 841 | def get_watcher_triggered_count(self, name): | CODE |
| LOW | lamda/client.py | 849 | def reset_watcher_triggered_count(self, name): | CODE |
| LOW | lamda/client.py | 873 | def register_click_target_selector_watcher(self, name, conditions, | CODE |
| LOW | lamda/client.py | 883 | def register_press_key_watcher(self, name, conditions, key): | CODE |
| LOW | lamda/client.py | 1122 | def disable_global_method_warning(self): | CODE |
| LOW | lamda/client.py | 1128 | def enumerate_running_processes(self): | CODE |
| LOW | lamda/client.py | 1472 | def enumerate_running_processes(self): | CODE |
| LOW | lamda/client.py | 1636 | def is_ca_certificate_installed(self, certfile): | CODE |
| LOW | lamda/client.py | 1837 | def execute_background_script(self, script, alias=None): | CODE |
| LOW | lamda/client.py | 1844 | def is_background_script_finished(self, tid): | CODE |
| LOW | lamda/client.py | 1898 | def get_userdata_disk_io_info(self): | CODE |
| LOW | lamda/client.py | 2453 | def enumerate_running_processes(self): | CODE |
| LOW | lamda/client.py | 2466 | def is_ca_certificate_installed(self, certdata): | CODE |
| LOW | lamda/client.py | 2520 | def get_virtual_display_by_id(self, display): | CODE |
| LOW | lamda/client.py | 2531 | def execute_background_script(self, script, alias=None): | CODE |
| LOW | lamda/client.py | 2533 | def is_background_script_finished(self, tid): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/paddle_ocr_http_api.py | 6 | CODE | |
| LOW | tools/adb_pubkey.py | 7 | CODE | |
| LOW | tools/ida.py | 10 | CODE | |
| LOW | tools/cert.py | 11 | CODE | |
| LOW | tools/cert.py | 11 | CODE | |
| LOW | tools/cert.py | 11 | CODE | |
| LOW | tools/fridarpc.py | 4 | CODE | |
| LOW | tools/fridarpc.py | 6 | CODE | |
| LOW | tools/debugimage.py | 6 | CODE | |
| LOW | tools/startmitm.py | 8 | CODE | |
| LOW | tools/startmitm.py | 13 | CODE | |
| LOW | tools/startmitm.py | 16 | CODE | |
| LOW | tools/startmitm.py | 18 | CODE | |
| LOW | tools/startmitm.py | 22 | CODE | |
| LOW | tools/startmitm.py | 27 | CODE | |
| LOW | tools/startmitm.py | 29 | CODE | |
| LOW | tools/startmitm.py | 32 | CODE | |
| LOW | examples/activity_jump.py | 3 | CODE | |
| LOW | examples/search_in_taobao.py | 3 | CODE | |
| LOW | …/user-home/modules/extension/example_http_extension.py | 5 | CODE | |
| LOW | examples/user-home/modules/extension/firerpa.py | 13 | CODE | |
| LOW | examples/user-home/modules/extension/firerpa.py | 14 | CODE | |
| LOW | examples/image-detection-and-segmentation/detect.py | 2 | CODE | |
| LOW | examples/image-detection-and-segmentation/detect.py | 4 | CODE | |
| LOW | …mples/image-detection-and-segmentation/segmentation.py | 2 | CODE | |
| LOW | …mples/image-detection-and-segmentation/segmentation.py | 4 | CODE | |
| LOW | lamda/client.py | 10 | CODE | |
| LOW | lamda/client.py | 17 | CODE | |
| LOW | lamda/client.py | 32 | CODE | |
| LOW | lamda/client.py | 34 | CODE | |
| LOW | lamda/client.py | 47 | CODE | |
| LOW | lamda/client.py | 48 | CODE | |
| LOW | lamda/client.py | 48 | CODE | |
| LOW | lamda/client.py | 2674 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/user-home/modules/extension/mcp_sms_reader.py | 6 | # =================================================================== | COMMENT |
| MEDIUM | examples/user-home/modules/extension/mcp_sms_reader.py | 8 | # =================================================================== | COMMENT |
| MEDIUM | examples/user-home/modules/extension/firerpa.py | 6 | # =================================================================== | COMMENT |
| MEDIUM | examples/user-home/modules/extension/firerpa.py | 8 | # =================================================================== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | lamda/client.py | 2383 | except: | CODE |
| HIGH | lamda/client.py | 2392 | except frida.InvalidArgumentError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/paddle_ocr_http_api.py | 20 | CODE | |
| LOW | examples/user-home/modules/extension/firerpa.py | 88 | CODE | |
| LOW | lamda/client.py | 445 | CODE | |
| LOW | lamda/client.py | 1222 | CODE | |
| LOW | lamda/client.py | 1503 | CODE | |
| LOW | lamda/client.py | 1564 | CODE | |
| LOW | lamda/client.py | 2301 | CODE | |
| LOW | lamda/client.py | 2307 | CODE | |
| LOW | lamda/client.py | 2310 | CODE | |
| LOW | lamda/client.py | 2315 | CODE | |
| LOW | lamda/client.py | 2433 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/globalmitm/DNS2SOCKS.c | 1 | // "stdafx.h" | COMMENT |
| LOW | tools/globalmitm/DNS2SOCKS.c | 21 | #include <sys/socket.h> | COMMENT |
| LOW | tools/globalmitm/DNS2SOCKS.c | 41 | COMMENT | |
| LOW | tools/globalmitm/DNS2SOCKS.c | 61 | //date/time format string for ISO 8601 format, but leave away the T delimiter as it's bad to read | COMMENT |
| LOW | …/user-home/modules/extension/example_http_extension.py | 1 | # Copyright 2025 rev1si0n (lamda.devel@gmail.com). All rights reserved. | COMMENT |
| LOW | lamda/__init__.py | 1 | # Copyright 2022 rev1si0n (lamda.devel@gmail.com). All rights reserved. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lamda/client.py | 65 | __all__ = [ | CODE |
| LOW | lamda/types.py | 8 | __all__ = ["AttributeDict", "BytesIO"] | CODE |