foundryzero / binder-trace

Binder Trace is a tool for intercepting and parsing Android Binder messages. Think of it as "Wireshark for Binder".
MIT License
560 stars 54 forks source link

binder-trace 1.2.0 unresponsive #27

Closed kay-22 closed 11 months ago

kay-22 commented 11 months ago

Hello, I ran the following command binder-trace -n Zoom -d emulator-5554 -a 10

and my screen went unresponsive:

image

log:


2023-11-07 10:53:56,458: INFO Starting injector
2023-11-07 10:53:56,458: INFO Injector started
2023-11-07 10:53:56,465: INFO Injector waiting for stop event
2023-11-07 10:54:00,309: DEBUG Field(name=Token Descriptor, type=string, position=Pos(start=8, end=80), content=[
  Field(name=Length, type=uint32, position=Pos(start=8, end=12), content=32)
  Field(name=Value, type=utf_16_le, position=Pos(start=12, end=78), content=android.app.IActivityTaskManager)])
2023-11-07 10:54:00,310: DEBUG Field(name=Token Descriptor, type=string, position=Pos(start=8, end=80), content=[
  Field(name=Length, type=uint32, position=Pos(start=8, end=12), content=32)
  Field(name=Value, type=utf_16_le, position=Pos(start=12, end=78), content=android.app.IActivityTaskManager)])
2023-11-07 10:54:00,312: ERROR Error occurred in UI: 'key' is an invalid keyword argument for insort_left()
2023-11-07 10:54:00,313: ERROR Traceback (most recent call last):
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/__main__.py", line 86, in main
    binder_trace.tui.interface.start_ui(injector.block_queue, injector.pause_unpause, config, args.config)
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/tui/interface.py", line 431, in start_ui
    ui.run()
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/tui/interface.py", line 315, in run
    app.run()
  File "/opt/homebrew/lib/python3.9/site-packages/prompt_toolkit/application/application.py", line 967, in run
    return loop.run_until_complete(coro)
  File "/opt/homebrew/Cellar/python@3.9/3.9.18/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 634, in run_until_complete
    self.run_forever()
  File "/opt/homebrew/Cellar/python@3.9/3.9.18/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 601, in run_forever
    self._run_once()
  File "/opt/homebrew/Cellar/python@3.9/3.9.18/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 1869, in _run_once
    event_list = self._selector.select(timeout)
  File "/opt/homebrew/lib/python3.9/site-packages/prompt_toolkit/eventloop/inputhook.py", line 129, in select
    self.inputhook(InputHookContext(self._r, input_is_ready))
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/tui/interface.py", line 424, in inputhook
    if ui.process_data():
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/tui/interface.py", line 401, in process_data
    self.frequency_counter.add_record((block.interface, block.method))
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/tui/frequency_counter.py", line 114, in add_record
    self.add(interface_record)
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/tui/frequency_counter.py", line 97, in add
    insort_left(
TypeError: 'key' is an invalid keyword argument for insort_left()

2023-11-07 10:54:00,313: INFO Stopping injector
2023-11-07 10:54:00,313: INFO Stop event received
2023-11-07 10:54:00,318: INFO Script unloaded
2023-11-07 10:54:00,318: INFO Injector stopped
2023-11-07 10:54:00,318: INFO Injector stopped.

parse log:


2023-11-07 10:54:00,260: ERROR unpack_from requires a buffer of at least 108 bytes for unpacking 4 bytes at offset 104 (actual buffer size is 104)
2023-11-07 10:54:00,260: ERROR Traceback (most recent call last):
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/parsing.py", line 142, in on_message_in
    read_interface_input(call, parcel, root_field)
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/parsing.py", line 310, in read_interface_input
    parse(invar, parcel, parent)
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/parsing.py", line 269, in parse
    parse_value_from_definition(definition, parcel, parent)
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/parsing.py", line 190, in parse_value_from_definition
    return parcel.parse_field(name, "", reader, parent)
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/parcel.py", line 34, in parse_field
    read_func(field)
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/parcel.py", line 424, in readStrongBinder
    self.parse_field("status", "uint32", self.readUint32, parent)
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/parcel.py", line 34, in parse_field
    read_func(field)
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/parcel.py", line 112, in readUint32
    parent.content = self._read_uint32()
  File "/opt/homebrew/lib/python3.9/site-packages/binder_trace/parcel.py", line 115, in _read_uint32
    b = struct.unpack_from("<I", self.data, self.pos)
struct.error: unpack_from requires a buffer of at least 108 bytes for unpacking 4 bytes at offset 104 (actual buffer size is 104)
sam-f0 commented 11 months ago

Thank you for your bug report - this issue has been addressed in release 1.2.1