friTap 2.2.1__tar.gz → 2.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. {fritap-2.2.1/friTap.egg-info → fritap-2.2.2}/PKG-INFO +2 -2
  2. {fritap-2.2.1 → fritap-2.2.2}/README.md +1 -1
  3. {fritap-2.2.1 → fritap-2.2.2}/friTap/about.py +1 -1
  4. {fritap-2.2.1 → fritap-2.2.2}/friTap/config.py +28 -0
  5. {fritap-2.2.1 → fritap-2.2.2}/friTap/constants.py +1 -0
  6. {fritap-2.2.1 → fritap-2.2.2}/friTap/events.py +13 -0
  7. {fritap-2.2.1 → fritap-2.2.2}/friTap/friTap.py +34 -0
  8. {fritap-2.2.1 → fritap-2.2.2}/friTap/fritap_agent.js +998 -240
  9. {fritap-2.2.1 → fritap-2.2.2}/friTap/fritap_utility.py +30 -0
  10. {fritap-2.2.1 → fritap-2.2.2}/friTap/legacy/ssl_logger_core.py +56 -1
  11. {fritap-2.2.1 → fritap-2.2.2}/friTap/message_router.py +28 -1
  12. {fritap-2.2.1 → fritap-2.2.2/friTap.egg-info}/PKG-INFO +2 -2
  13. {fritap-2.2.1 → fritap-2.2.2}/friTap.egg-info/SOURCES.txt +2 -0
  14. fritap-2.2.2/tests/unit/test_anti_tamper_loader_hook.py +118 -0
  15. fritap-2.2.2/tests/unit/test_find_ssl_log_secret_offset.py +94 -0
  16. {fritap-2.2.1 → fritap-2.2.2}/LICENSE +0 -0
  17. {fritap-2.2.1 → fritap-2.2.2}/MANIFEST.in +0 -0
  18. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/__init__.py +0 -0
  19. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/adapters/__init__.py +0 -0
  20. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/adapters/gdb_adapter.py +0 -0
  21. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/adapters/lldb_adapter.py +0 -0
  22. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/definitions/__init__.py +0 -0
  23. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/definitions/base.py +0 -0
  24. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/definitions/ipsec_strongswan.py +0 -0
  25. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/definitions/ssh_openssh.py +0 -0
  26. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/memory.py +0 -0
  27. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/output.py +0 -0
  28. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/registry.py +0 -0
  29. {fritap-2.2.1 → fritap-2.2.2}/agent_debugger/runner.py +0 -0
  30. {fritap-2.2.1 → fritap-2.2.2}/friTap/__init__.py +0 -0
  31. {fritap-2.2.1 → fritap-2.2.2}/friTap/analysis/__init__.py +0 -0
  32. {fritap-2.2.1 → fritap-2.2.2}/friTap/analysis/credentials.py +0 -0
  33. {fritap-2.2.1 → fritap-2.2.2}/friTap/analysis/discovery.py +0 -0
  34. {fritap-2.2.1 → fritap-2.2.2}/friTap/analysis/filtering.py +0 -0
  35. {fritap-2.2.1 → fritap-2.2.2}/friTap/analysis/ioc.py +0 -0
  36. {fritap-2.2.1 → fritap-2.2.2}/friTap/analysis/privacy.py +0 -0
  37. {fritap-2.2.1 → fritap-2.2.2}/friTap/analysis/protobuf_analyzer.py +0 -0
  38. {fritap-2.2.1 → fritap-2.2.2}/friTap/analysis/registry.py +0 -0
  39. {fritap-2.2.1 → fritap-2.2.2}/friTap/analysis/reporters.py +0 -0
  40. {fritap-2.2.1 → fritap-2.2.2}/friTap/android.py +0 -0
  41. {fritap-2.2.1 → fritap-2.2.2}/friTap/api.py +0 -0
  42. {fritap-2.2.1 → fritap-2.2.2}/friTap/assets/__init__.py +0 -0
  43. {fritap-2.2.1 → fritap-2.2.2}/friTap/assets/tcpdump_binaries/README.md +0 -0
  44. {fritap-2.2.1 → fritap-2.2.2}/friTap/assets/tcpdump_binaries/tcpdump_arm32_android +0 -0
  45. {fritap-2.2.1 → fritap-2.2.2}/friTap/assets/tcpdump_binaries/tcpdump_arm64_android +0 -0
  46. {fritap-2.2.1 → fritap-2.2.2}/friTap/assets/tcpdump_binaries/tcpdump_x86_64_android +0 -0
  47. {fritap-2.2.1 → fritap-2.2.2}/friTap/assets/tcpdump_binaries/tcpdump_x86_android +0 -0
  48. {fritap-2.2.1 → fritap-2.2.2}/friTap/backends/__init__.py +0 -0
  49. {fritap-2.2.1 → fritap-2.2.2}/friTap/backends/base.py +0 -0
  50. {fritap-2.2.1 → fritap-2.2.2}/friTap/backends/debugger_script.py +0 -0
  51. {fritap-2.2.1 → fritap-2.2.2}/friTap/backends/ebpf_backend.py +0 -0
  52. {fritap-2.2.1 → fritap-2.2.2}/friTap/backends/frida_backend.py +0 -0
  53. {fritap-2.2.1 → fritap-2.2.2}/friTap/backends/gdb_backend.py +0 -0
  54. {fritap-2.2.1 → fritap-2.2.2}/friTap/backends/lldb_backend.py +0 -0
  55. {fritap-2.2.1 → fritap-2.2.2}/friTap/commands/__init__.py +0 -0
  56. {fritap-2.2.1 → fritap-2.2.2}/friTap/commands/analyze.py +0 -0
  57. {fritap-2.2.1 → fritap-2.2.2}/friTap/commands/install_backend.py +0 -0
  58. {fritap-2.2.1 → fritap-2.2.2}/friTap/connection_index.py +0 -0
  59. {fritap-2.2.1 → fritap-2.2.2}/friTap/core.py +0 -0
  60. {fritap-2.2.1 → fritap-2.2.2}/friTap/discovery_base.py +0 -0
  61. {fritap-2.2.1 → fritap-2.2.2}/friTap/error_handler.py +0 -0
  62. {fritap-2.2.1 → fritap-2.2.2}/friTap/filter/__init__.py +0 -0
  63. {fritap-2.2.1 → fritap-2.2.2}/friTap/filter/ast_nodes.py +0 -0
  64. {fritap-2.2.1 → fritap-2.2.2}/friTap/filter/errors.py +0 -0
  65. {fritap-2.2.1 → fritap-2.2.2}/friTap/filter/evaluator.py +0 -0
  66. {fritap-2.2.1 → fritap-2.2.2}/friTap/filter/fields.py +0 -0
  67. {fritap-2.2.1 → fritap-2.2.2}/friTap/filter/lexer.py +0 -0
  68. {fritap-2.2.1 → fritap-2.2.2}/friTap/filter/parser.py +0 -0
  69. {fritap-2.2.1 → fritap-2.2.2}/friTap/filter/pipeline_filter.py +0 -0
  70. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/__init__.py +0 -0
  71. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/collector.py +0 -0
  72. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/decryptors/__init__.py +0 -0
  73. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/decryptors/base.py +0 -0
  74. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/decryptors/registry.py +0 -0
  75. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/display.py +0 -0
  76. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/http_utils.py +0 -0
  77. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/layer_pipeline.py +0 -0
  78. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/layer_registry.py +0 -0
  79. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/layers.py +0 -0
  80. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/models.py +0 -0
  81. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/reparse.py +0 -0
  82. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/replay.py +0 -0
  83. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/stream_buffer.py +0 -0
  84. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/tap_format.py +0 -0
  85. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/tap_reader.py +0 -0
  86. {fritap-2.2.1 → fritap-2.2.2}/friTap/flow/tap_writer.py +0 -0
  87. {fritap-2.2.1 → fritap-2.2.2}/friTap/inspector.py +0 -0
  88. {fritap-2.2.1 → fritap-2.2.2}/friTap/legacy/__init__.py +0 -0
  89. {fritap-2.2.1 → fritap-2.2.2}/friTap/legacy/cleanup_compat.py +0 -0
  90. {fritap-2.2.1 → fritap-2.2.2}/friTap/legacy/init_compat.py +0 -0
  91. {fritap-2.2.1 → fritap-2.2.2}/friTap/legacy/message_handler.py +0 -0
  92. {fritap-2.2.1 → fritap-2.2.2}/friTap/legacy/session_manager.py +0 -0
  93. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/__init__.py +0 -0
  94. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/cli.py +0 -0
  95. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/discovery.py +0 -0
  96. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/__init__.py +0 -0
  97. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/content.py +0 -0
  98. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/crypto.py +0 -0
  99. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/decrypt.py +0 -0
  100. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/e2e/__init__.py +0 -0
  101. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/e2e/decrypt.py +0 -0
  102. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/e2e/keylog.py +0 -0
  103. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/e2e/records.py +0 -0
  104. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/keylog.py +0 -0
  105. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/reassembly.py +0 -0
  106. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/records.py +0 -0
  107. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/mtproto/transport.py +0 -0
  108. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/pcap_to_tap.py +0 -0
  109. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/registry.py +0 -0
  110. {fritap-2.2.1 → fritap-2.2.2}/friTap/offline/tshark.py +0 -0
  111. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/__init__.py +0 -0
  112. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/base.py +0 -0
  113. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/console_handler.py +0 -0
  114. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/dedup.py +0 -0
  115. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/factory.py +0 -0
  116. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/formatters.py +0 -0
  117. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/json_handler.py +0 -0
  118. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/jsonl_handler.py +0 -0
  119. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/key_collector_handler.py +0 -0
  120. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/keylog_format.py +0 -0
  121. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/keylog_handler.py +0 -0
  122. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/keylog_paths.py +0 -0
  123. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/live_autodecrypt_handler.py +0 -0
  124. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/live_pcapng_handler.py +0 -0
  125. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/live_wireshark_handler.py +0 -0
  126. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/pcap_handler.py +0 -0
  127. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/pcapng_blocks.py +0 -0
  128. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/pcapng_handler.py +0 -0
  129. {fritap-2.2.1 → fritap-2.2.2}/friTap/output/scan_candidate_formatter.py +0 -0
  130. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/__init__.py +0 -0
  131. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/base.py +0 -0
  132. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/bhttp.py +0 -0
  133. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/body_processors.py +0 -0
  134. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/boundary_scan.py +0 -0
  135. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/decompress.py +0 -0
  136. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/hexdump.py +0 -0
  137. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/http1.py +0 -0
  138. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/http2.py +0 -0
  139. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/http2_dataframe.py +0 -0
  140. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/http3.py +0 -0
  141. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/protobuf/__init__.py +0 -0
  142. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/protobuf/grpc.py +0 -0
  143. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/protobuf/processor.py +0 -0
  144. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/protobuf/schema.py +0 -0
  145. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/protobuf/wire.py +0 -0
  146. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/registry.py +0 -0
  147. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/trailing.py +0 -0
  148. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/varint.py +0 -0
  149. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/websocket.py +0 -0
  150. {fritap-2.2.1 → fritap-2.2.2}/friTap/parsers/websocket_defray.py +0 -0
  151. {fritap-2.2.1 → fritap-2.2.2}/friTap/patterns/__init__.py +0 -0
  152. {fritap-2.2.1 → fritap-2.2.2}/friTap/patterns/default_patterns.json +0 -0
  153. {fritap-2.2.1 → fritap-2.2.2}/friTap/patterns/loader.py +0 -0
  154. {fritap-2.2.1 → fritap-2.2.2}/friTap/pcap.py +0 -0
  155. {fritap-2.2.1 → fritap-2.2.2}/friTap/pcap_utility.py +0 -0
  156. {fritap-2.2.1 → fritap-2.2.2}/friTap/pipeline.py +0 -0
  157. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/__init__.py +0 -0
  158. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/base.py +0 -0
  159. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/custom_protocol.py +0 -0
  160. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/examples/README.md +0 -0
  161. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/examples/__init__.py +0 -0
  162. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/examples/custom_aes.py +0 -0
  163. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/examples/module_logger_plugin.py +0 -0
  164. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/examples/protobuf_plugin.py +0 -0
  165. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/examples/srtp.py +0 -0
  166. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/examples/stats_plugin.py +0 -0
  167. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/examples/wireguard.py +0 -0
  168. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/js_codegen.py +0 -0
  169. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/legacy_custom_script.py +0 -0
  170. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/loader.py +0 -0
  171. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/script_context.py +0 -0
  172. {fritap-2.2.1 → fritap-2.2.2}/friTap/plugins/script_plugin.py +0 -0
  173. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/__init__.py +0 -0
  174. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/_ext/__init__.py +0 -0
  175. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/base.py +0 -0
  176. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/mtproto_handler.py +0 -0
  177. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/mtproto_keylog_spec.py +0 -0
  178. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/registry.py +0 -0
  179. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/ssh_extractor.py +0 -0
  180. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/ssh_handler.py +0 -0
  181. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/telegram_handler.py +0 -0
  182. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/tls_extractor.py +0 -0
  183. {fritap-2.2.1 → fritap-2.2.2}/friTap/protocols/tls_handler.py +0 -0
  184. {fritap-2.2.1 → fritap-2.2.2}/friTap/schemas/__init__.py +0 -0
  185. {fritap-2.2.1 → fritap-2.2.2}/friTap/schemas/agent_messages.py +0 -0
  186. {fritap-2.2.1 → fritap-2.2.2}/friTap/schemas/canonical.py +0 -0
  187. {fritap-2.2.1 → fritap-2.2.2}/friTap/schemas/host_messages.py +0 -0
  188. {fritap-2.2.1 → fritap-2.2.2}/friTap/server_manager/__init__.py +0 -0
  189. {fritap-2.2.1 → fritap-2.2.2}/friTap/server_manager/android.py +0 -0
  190. {fritap-2.2.1 → fritap-2.2.2}/friTap/server_manager/base.py +0 -0
  191. {fritap-2.2.1 → fritap-2.2.2}/friTap/server_manager/factory.py +0 -0
  192. {fritap-2.2.1 → fritap-2.2.2}/friTap/server_manager/ios.py +0 -0
  193. {fritap-2.2.1 → fritap-2.2.2}/friTap/server_manager/linux.py +0 -0
  194. {fritap-2.2.1 → fritap-2.2.2}/friTap/server_manager/macos.py +0 -0
  195. {fritap-2.2.1 → fritap-2.2.2}/friTap/server_manager/windows.py +0 -0
  196. {fritap-2.2.1 → fritap-2.2.2}/friTap/session.py +0 -0
  197. {fritap-2.2.1 → fritap-2.2.2}/friTap/sinks/__init__.py +0 -0
  198. {fritap-2.2.1 → fritap-2.2.2}/friTap/sinks/base.py +0 -0
  199. {fritap-2.2.1 → fritap-2.2.2}/friTap/sinks/console.py +0 -0
  200. {fritap-2.2.1 → fritap-2.2.2}/friTap/sinks/json_sink.py +0 -0
  201. {fritap-2.2.1 → fritap-2.2.2}/friTap/sinks/keylog.py +0 -0
  202. {fritap-2.2.1 → fritap-2.2.2}/friTap/sinks/live_pcapng.py +0 -0
  203. {fritap-2.2.1 → fritap-2.2.2}/friTap/sinks/live_wireshark.py +0 -0
  204. {fritap-2.2.1 → fritap-2.2.2}/friTap/sinks/pcap.py +0 -0
  205. {fritap-2.2.1 → fritap-2.2.2}/friTap/sinks/pcapng.py +0 -0
  206. {fritap-2.2.1 → fritap-2.2.2}/friTap/sinks/tcp_state.py +0 -0
  207. {fritap-2.2.1 → fritap-2.2.2}/friTap/ssl_logger.py +0 -0
  208. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/__init__.py +0 -0
  209. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/app.py +0 -0
  210. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/capture_controller.py +0 -0
  211. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/css/fritap.tcss +0 -0
  212. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/handlers.py +0 -0
  213. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/__init__.py +0 -0
  214. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/alert_modal.py +0 -0
  215. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/backend_modal.py +0 -0
  216. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/base.py +0 -0
  217. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/body_processing_modal.py +0 -0
  218. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/capture_mode_modal.py +0 -0
  219. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/capture_select_modal.py +0 -0
  220. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/decrypt_confirm_modal.py +0 -0
  221. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/device_modal.py +0 -0
  222. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/encapsulated_protocol_modal.py +0 -0
  223. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/explorer_modal.py +0 -0
  224. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/filter_help_modal.py +0 -0
  225. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/filter_modal.py +0 -0
  226. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/findings_filter_modal.py +0 -0
  227. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/help_modal.py +0 -0
  228. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/open_pcap_modal.py +0 -0
  229. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/pcap_to_tap_modals.py +0 -0
  230. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/process_modal.py +0 -0
  231. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/protocol_modal.py +0 -0
  232. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/quic_capture_mode_modal.py +0 -0
  233. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/quit_modal.py +0 -0
  234. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/save_tap_modal.py +0 -0
  235. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/server_check_modal.py +0 -0
  236. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/spawn_modal.py +0 -0
  237. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/start_confirm_modal.py +0 -0
  238. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/target_mode_modal.py +0 -0
  239. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/modals/view_mode_modal.py +0 -0
  240. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/mode_controller.py +0 -0
  241. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/replay_controller.py +0 -0
  242. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/screens/__init__.py +0 -0
  243. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/screens/_parked_main_screen.py +0 -0
  244. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/screens/main_screen.py +0 -0
  245. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/themes.py +0 -0
  246. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/__init__.py +0 -0
  247. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/_parked_transcript.py +0 -0
  248. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/activity_log.py +0 -0
  249. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/analyzer_finding_detail.py +0 -0
  250. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/analyzer_panel.py +0 -0
  251. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/filter_bar.py +0 -0
  252. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/findings_filter_bar.py +0 -0
  253. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/findings_list.py +0 -0
  254. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/flow_detail.py +0 -0
  255. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/flow_list.py +0 -0
  256. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/menu_panel.py +0 -0
  257. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/ohttp_tab.py +0 -0
  258. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/widgets/status_bar.py +0 -0
  259. {fritap-2.2.1 → fritap-2.2.2}/friTap/tui/wizard.py +0 -0
  260. {fritap-2.2.1 → fritap-2.2.2}/friTap.egg-info/dependency_links.txt +0 -0
  261. {fritap-2.2.1 → fritap-2.2.2}/friTap.egg-info/entry_points.txt +0 -0
  262. {fritap-2.2.1 → fritap-2.2.2}/friTap.egg-info/requires.txt +0 -0
  263. {fritap-2.2.1 → fritap-2.2.2}/friTap.egg-info/top_level.txt +0 -0
  264. {fritap-2.2.1 → fritap-2.2.2}/integrations/wireshark/fritap-extcap +0 -0
  265. {fritap-2.2.1 → fritap-2.2.2}/integrations/wireshark/install.sh +0 -0
  266. {fritap-2.2.1 → fritap-2.2.2}/pyproject.toml +0 -0
  267. {fritap-2.2.1 → fritap-2.2.2}/requirements-minimal.txt +0 -0
  268. {fritap-2.2.1 → fritap-2.2.2}/requirements.txt +0 -0
  269. {fritap-2.2.1 → fritap-2.2.2}/setup.cfg +0 -0
  270. {fritap-2.2.1 → fritap-2.2.2}/setup.py +0 -0
  271. {fritap-2.2.1 → fritap-2.2.2}/tests/__init__.py +0 -0
  272. {fritap-2.2.1 → fritap-2.2.2}/tests/agent/__init__.py +0 -0
  273. {fritap-2.2.1 → fritap-2.2.2}/tests/agent/test_compilation.py +0 -0
  274. {fritap-2.2.1 → fritap-2.2.2}/tests/conftest.py +0 -0
  275. {fritap-2.2.1 → fritap-2.2.2}/tests/fixtures/__init__.py +0 -0
  276. {fritap-2.2.1 → fritap-2.2.2}/tests/fixtures/mock_objects.py +0 -0
  277. {fritap-2.2.1 → fritap-2.2.2}/tests/integration/__init__.py +0 -0
  278. {fritap-2.2.1 → fritap-2.2.2}/tests/integration/_mtproto_helpers.py +0 -0
  279. {fritap-2.2.1 → fritap-2.2.2}/tests/integration/test_mock_ssl_analysis.py +0 -0
  280. {fritap-2.2.1 → fritap-2.2.2}/tests/integration/test_offline_mtproto_e2e.py +0 -0
  281. {fritap-2.2.1 → fritap-2.2.2}/tests/integration/test_offline_telegram_e2e.py +0 -0
  282. {fritap-2.2.1 → fritap-2.2.2}/tests/integration/test_ssh_plaintext.py +0 -0
  283. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/__init__.py +0 -0
  284. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/_render_helpers.py +0 -0
  285. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/output/__init__.py +0 -0
  286. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/output/test_factory_keylog_routing.py +0 -0
  287. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/output/test_keylog_formatters.py +0 -0
  288. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/output/test_keylog_paths.py +0 -0
  289. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/output/test_scan_candidate_routing.py +0 -0
  290. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_activity_log_dedup.py +0 -0
  291. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_analysis_exposure.py +0 -0
  292. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_analyze_public_function.py +0 -0
  293. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_analyzer_discovery.py +0 -0
  294. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_android.py +0 -0
  295. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_api_flow_wiring.py +0 -0
  296. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_capture_controller_severity.py +0 -0
  297. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_codereview_fixes.py +0 -0
  298. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_collector_parser_containment.py +0 -0
  299. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_collector_tls_and_flush.py +0 -0
  300. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_credentials_improved.py +0 -0
  301. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_cronet_split_topology.py +0 -0
  302. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_discovery_base.py +0 -0
  303. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_finding_filter.py +0 -0
  304. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_finding_from_dict.py +0 -0
  305. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_flow_completion_lifecycle.py +0 -0
  306. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_flow_layers.py +0 -0
  307. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_flow_overview_api.py +0 -0
  308. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_frida_backend_spawn.py +0 -0
  309. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_fritap_dispatch.py +0 -0
  310. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_hook_breadcrumb.py +0 -0
  311. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_http2_dataframe.py +0 -0
  312. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_http2_hpack.py +0 -0
  313. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_http3_qpack.py +0 -0
  314. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_keylog_active_paths.py +0 -0
  315. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_layer_pipeline.py +0 -0
  316. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_layer_routing_and_synthetic.py +0 -0
  317. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_layers_model.py +0 -0
  318. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_layers_serialization.py +0 -0
  319. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_layers_view.py +0 -0
  320. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_lldb_dispatch.py +0 -0
  321. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_logging_setup.py +0 -0
  322. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_mtproto_content.py +0 -0
  323. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_mtproto_crypto.py +0 -0
  324. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_mtproto_decrypt.py +0 -0
  325. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_mtproto_dependency_message.py +0 -0
  326. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_mtproto_keylog.py +0 -0
  327. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_mtproto_layer.py +0 -0
  328. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_mtproto_message_tab.py +0 -0
  329. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_mtproto_parser_discovery.py +0 -0
  330. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_mtproto_reassembly.py +0 -0
  331. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_mtproto_transport.py +0 -0
  332. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_offline_decryptor_discovery.py +0 -0
  333. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_offline_metadata.py +0 -0
  334. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_offline_pcap_to_tap.py +0 -0
  335. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_offline_quic_metadata.py +0 -0
  336. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_offline_tshark_calibration.py +0 -0
  337. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_parser_safe_adapter.py +0 -0
  338. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_pattern_fallback_gate.py +0 -0
  339. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_pattern_loader_schemas.py +0 -0
  340. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_patterns_handshake.py +0 -0
  341. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_pcap_dsb_defensive.py +0 -0
  342. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_pcap_server_port.py +0 -0
  343. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_pcap_to_tap_wizard.py +0 -0
  344. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_privacy_analyzer.py +0 -0
  345. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_protocol_visibility.py +0 -0
  346. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_public_api_exports.py +0 -0
  347. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_reporter_redaction.py +0 -0
  348. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_scrub_doc_markers.py +0 -0
  349. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_secret_chat_crypto.py +0 -0
  350. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_secret_chat_decrypt.py +0 -0
  351. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_secret_chat_keylog.py +0 -0
  352. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_session_metadata_stamping.py +0 -0
  353. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_ssl_logger.py +0 -0
  354. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_tap_enrichment.py +0 -0
  355. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_tap_findings_scan_gate.py +0 -0
  356. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_tap_writer_rewrite.py +0 -0
  357. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_telegram_handler.py +0 -0
  358. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_tui_analyzer_panel.py +0 -0
  359. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_tui_decrypt_to_flow.py +0 -0
  360. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_tui_finding_detail.py +0 -0
  361. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_tui_findings_view.py +0 -0
  362. {fritap-2.2.1 → fritap-2.2.2}/tests/unit/test_webviewchromium_support.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: friTap
3
- Version: 2.2.1
3
+ Version: 2.2.2
4
4
  Summary: Simplifies (SSL/TLS) traffic analysis and key extraction using Frida across major platforms.
5
5
  Home-page: https://github.com/fkie-cad/friTap
6
6
  Author: Daniel Baier, Julian Lengersdorff, Francois Egner, Max Ufer
@@ -66,7 +66,7 @@ Dynamic: summary
66
66
  </div>
67
67
 
68
68
  # friTap
69
- ![version](https://img.shields.io/badge/version-2.2.1-blue) [![PyPI version](https://d25lcipzij17d.cloudfront.net/badge.svg?id=py&r=r&ts=1683906897&type=6e&v=2.2.1&x2=0)](https://badge.fury.io/py/friTap) [![CI](https://github.com/fkie-cad/friTap/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/fkie-cad/friTap/actions/workflows/ci.yml)
69
+ ![version](https://img.shields.io/badge/version-2.2.2-blue) [![PyPI version](https://d25lcipzij17d.cloudfront.net/badge.svg?id=py&r=r&ts=1683906897&type=6e&v=2.2.2&x2=0)](https://badge.fury.io/py/friTap) [![CI](https://github.com/fkie-cad/friTap/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/fkie-cad/friTap/actions/workflows/ci.yml)
70
70
  [![Ruff](https://github.com/fkie-cad/friTap/actions/workflows/lint.yml/badge.svg?branch=main)](https://github.com/fkie-cad/friTap/actions/workflows/lint.yml)
71
71
  [![Publish status](https://github.com/fkie-cad/friTap/actions/workflows/publish.yml/badge.svg?branch=main)](https://github.com/fkie-cad/friTap/actions/workflows/publish.yml)
72
72
 
@@ -4,7 +4,7 @@
4
4
  </div>
5
5
 
6
6
  # friTap
7
- ![version](https://img.shields.io/badge/version-2.2.1-blue) [![PyPI version](https://d25lcipzij17d.cloudfront.net/badge.svg?id=py&r=r&ts=1683906897&type=6e&v=2.2.1&x2=0)](https://badge.fury.io/py/friTap) [![CI](https://github.com/fkie-cad/friTap/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/fkie-cad/friTap/actions/workflows/ci.yml)
7
+ ![version](https://img.shields.io/badge/version-2.2.2-blue) [![PyPI version](https://d25lcipzij17d.cloudfront.net/badge.svg?id=py&r=r&ts=1683906897&type=6e&v=2.2.2&x2=0)](https://badge.fury.io/py/friTap) [![CI](https://github.com/fkie-cad/friTap/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/fkie-cad/friTap/actions/workflows/ci.yml)
8
8
  [![Ruff](https://github.com/fkie-cad/friTap/actions/workflows/lint.yml/badge.svg?branch=main)](https://github.com/fkie-cad/friTap/actions/workflows/lint.yml)
9
9
  [![Publish status](https://github.com/fkie-cad/friTap/actions/workflows/publish.yml/badge.svg?branch=main)](https://github.com/fkie-cad/friTap/actions/workflows/publish.yml)
10
10
 
@@ -2,5 +2,5 @@
2
2
  # -*- coding: utf-8 -*-
3
3
 
4
4
  __author__ = "Daniel Baier, Julian Lengersdorff, Francois Egner, Max Ufer"
5
- __version__ = "2.2.1"
5
+ __version__ = "2.2.2"
6
6
  debug = False # are we running in debug mode?
@@ -87,6 +87,28 @@ class HookingConfig:
87
87
  # passes, no Java VM safepoint sync), which also helps fritap attach to a
88
88
  # target that is already in the middle of active QUIC traffic.
89
89
  quic_only: bool = False
90
+ # When True, the agent skips the inline android_dlopen_ext loader hook. This
91
+ # is the hook PairIP / anti-tamper runtimes detect and SIGSEGV on during a
92
+ # spawn-time integrity scan (fkie-cad/friTap#64). Only already-loaded /
93
+ # explicitly-selected TLS libraries are then hooked. The agent also auto-
94
+ # skips it in spawn mode when an anti-tamper library is detected.
95
+ no_loader_hook: bool = False
96
+ # EXPERIMENTAL (Android). Watch android_dlopen_ext via a hardware breakpoint
97
+ # (ARM64 debug registers, no linker code patch) instead of the inline
98
+ # trampoline, so late-loaded TLS libs can be hooked on PairIP-protected apps
99
+ # without tripping the anti-tamper scan. Unvalidated on-device; default OFF.
100
+ stealth_loader: bool = False
101
+ # --pairip-safe (Android; attach and spawn). Minimal, scan-free capture mode
102
+ # for PairIP-protected apps: hook only a curated TLS-library allowlist
103
+ # (libssl.so, libhttpengine.so, libjavacrypto.so, libconscrypt*,
104
+ # libcommerce_http_client.so, offset-based libwebviewchromium.so; libunity.so
105
+ # is opt-in via --offsets), resolved WITHOUT any Memory.scan (exports ->
106
+ # symbols -> offsets). Skips the loader hook, WebView/Cronet pattern scan,
107
+ # Java hooks, OHTTP and the library-scan pass — the broad footprint that trips
108
+ # PairIP's periodic integrity check (an in-process SIGSEGV). Keys persist via
109
+ # "blink" (hooks toggled so .text stays pristine between scans).
110
+ # (fkie-cad/friTap#64). Default OFF.
111
+ pairip_safe: bool = False
90
112
  # Override which layer of the HTTP/3 egress-headers fallback chain the
91
113
  # agent actually attaches to. "auto" (default) keeps the winner-takes-all
92
114
  # logic: quiche-internal QuicSpdyStream::WriteHeaders preferred, then
@@ -221,6 +243,9 @@ class FriTapConfig:
221
243
  force_scan_modules: Optional[List[str]] = None,
222
244
  quic_capture_mode: str = "stream",
223
245
  quic_only: bool = False,
246
+ no_loader_hook: bool = False,
247
+ stealth_loader: bool = False,
248
+ pairip_safe: bool = False,
224
249
  quic_egress_headers_layer: str = "auto",
225
250
  scan_keys_region: Optional[str] = None,
226
251
  scan: Optional[str] = None,
@@ -280,6 +305,9 @@ class FriTapConfig:
280
305
  force_scan_modules=list(force_scan_modules or []),
281
306
  quic_capture_mode=quic_capture_mode,
282
307
  quic_only=quic_only,
308
+ no_loader_hook=no_loader_hook,
309
+ stealth_loader=stealth_loader,
310
+ pairip_safe=pairip_safe,
283
311
  quic_egress_headers_layer=quic_egress_headers_layer,
284
312
  scan_keys_region=scan_keys_region,
285
313
  ),
@@ -87,6 +87,7 @@ class ContentType:
87
87
  CONSOLE_WARN = "console_warn"
88
88
  CONSOLE_ERROR = "console_error"
89
89
  LIBRARY_DETECTED = "library_detected"
90
+ ANTI_TAMPER_DETECTED = "anti_tamper_detected"
90
91
  SOCKET_TRACE = "socket_trace"
91
92
  SSH_KEY = "ssh_key"
92
93
  SSH_KEYLOG = "ssh_keylog"
@@ -97,6 +97,19 @@ class LibraryDetectedEvent(FriTapEvent):
97
97
  path: str = ""
98
98
 
99
99
 
100
+ @dataclass
101
+ class AntiTamperDetectedEvent(FriTapEvent):
102
+ """Emitted when a known anti-tamper / integrity-protection runtime (e.g.
103
+ Google PairIP, libpairipcore.so) is detected in the target process.
104
+
105
+ ``skipped_loader_hook`` is True when friTap responded by skipping the inline
106
+ android_dlopen_ext loader hook to avoid a SIGSEGV (fkie-cad/friTap#64).
107
+ """
108
+ library: str = ""
109
+ name: str = ""
110
+ skipped_loader_hook: bool = False
111
+
112
+
100
113
  # Session lifecycle event type constants
101
114
  SESSION_STARTED = "started"
102
115
  SESSION_RESUMED = "resumed"
@@ -421,6 +421,37 @@ Offline (read / analyze .tap):
421
421
  "Filter scope: Android = Google QUICHE (Cronet) only; "
422
422
  "Linux = Cloudflare quiche, Google QUICHE (Cronet), Mozilla "
423
423
  "Neqo (Firefox).")
424
+ args.add_argument("--no-loader-hook", "-nlh", required=False, action="store_const",
425
+ const=True, default=False, dest="no_loader_hook",
426
+ help="Android: do not install the android_dlopen_ext loader hook. "
427
+ "Avoids PairIP / anti-tamper SIGSEGV crashes (fkie-cad/friTap#64); "
428
+ "only already-loaded / explicitly-selected (--offsets) TLS libraries "
429
+ "are hooked. Recommended together with attach mode (no -s). friTap "
430
+ "also auto-skips this hook in spawn mode when it detects a known "
431
+ "anti-tamper library such as Google PairIP (libpairipcore.so).")
432
+ args.add_argument("--experimental-stealth-loader", required=False, action="store_const",
433
+ const=True, default=False, dest="stealth_loader",
434
+ help="EXPERIMENTAL (Android, arm64). Watch android_dlopen_ext via a "
435
+ "hardware breakpoint (CPU debug registers — no linker code patch) "
436
+ "instead of the inline trampoline, so late-loaded TLS libraries can "
437
+ "be hooked on PairIP-protected apps without tripping the anti-tamper "
438
+ "scan (fkie-cad/friTap#64). UNVALIDATED on-device; needs root "
439
+ "frida-server and may not catch loads on threads created after attach.")
440
+ args.add_argument("--pairip-safe", required=False, action="store_const",
441
+ const=True, default=False, dest="pairip_safe",
442
+ help="Android: minimal capture mode for Google PairIP-protected apps "
443
+ "(fkie-cad/friTap#64). Hooks ONLY a curated, scan-free TLS-library "
444
+ "allowlist (libssl.so, libhttpengine.so, libcommerce_http_client.so, "
445
+ "libjavacrypto.so, libconscrypt*, and offset-based libwebviewchromium.so; "
446
+ "libunity.so is opt-in via --offsets), resolved without any Memory.scan "
447
+ "(exports -> symbols -> offsets); skips the loader hook, the WebView/Cronet "
448
+ "pattern scan, Java hooks, OHTTP and library-scan — the broad footprint "
449
+ "that trips PairIP's periodic integrity check and SIGSEGVs the app. Keys "
450
+ "persist via 'blink' (hooks toggled so .text stays pristine between scans). "
451
+ "Works with BOTH attach and spawn (-s); spawn is best-effort (hooks are "
452
+ "deferred past PairIP's startup window, so the earliest handshakes may be "
453
+ "missed — attach is the proven path). Trigger fresh TLS handshakes after "
454
+ "attach (e.g. toggle wifi). See docs/advanced/pairip-safe.md.")
424
455
  args.add_argument("--library-scan", "-ls", required=False, action="store_const",
425
456
  const=True, default=False,
426
457
  help="Pre-scan for TLS libraries using tlsLibHunter before hooking. "
@@ -712,6 +743,9 @@ Offline (read / analyze .tap):
712
743
  force_scan_modules=getattr(parsed, 'force_scan_modules', None),
713
744
  quic_capture_mode=getattr(parsed, 'quic_capture_mode', 'stream'),
714
745
  quic_only=getattr(parsed, 'quic_only', False),
746
+ no_loader_hook=getattr(parsed, 'no_loader_hook', False),
747
+ stealth_loader=getattr(parsed, 'stealth_loader', False),
748
+ pairip_safe=getattr(parsed, 'pairip_safe', False),
715
749
  quic_egress_headers_layer=getattr(parsed, 'quic_egress_headers_layer', 'auto'),
716
750
  scan_keys_region=getattr(parsed, 'scan_keys_region', None),
717
751
  scan=getattr(parsed, 'scan', None),