如何使用 Frid 显示 Android 应用程序的函数调用?

问题描述 投票:0回答:1

我有一个安卓应用程序。如何使用fried打印该应用程序的函数调用堆栈?我需要对调用哪个函数以及从哪个类调用的可读引用。该应用程序是用 Java + Kotlin 编写的。 我使用了 frida-trace,但是当我在过滤器中写入我需要的函数(该函数肯定存在)时,它向我显示了这个。

frida-trace -U -f org.mozilla.firefox -i "checkRequest*"
Started tracing 0 functions. Press Ctrl+C to stop. 

如果我使用他们在示例中编写的内容,例如 send 方法,那么它会显示非 Java 函数并且不明白什么

frida-trace -U -f org.mozilla.firefox -i "*send*"
Instrumenting...                                                        
_ZN4aidl7android5media24BpResourceManagerService17sendCapacityErrorEiilRKNSt3__110shared_ptrINS1_22IResourceManagerClientEEERKNS3_6vectorINS_3com7samsung7android5media15MediaInfoParcelENS3_9allocatorISE_EEEE: Loaded handler at "/home/teammrpa/__handlers__/libmedia.so/_ZN4aidl7android5media24BpResour_a5adc3e0.js"
_ZN4aidl7android5media30IResourceManagerServiceDefault17sendCapacityErrorEiilRKNSt3__110shared_ptrINS1_22IResourceManagerClientEEERKNS3_6vectorINS_3com7samsung7android5media15MediaInfoParcelENS3_9allocatorISE_EEEE: Loaded handler at "/home/teammrpa/__handlers__/libmedia.so/_ZN4aidl7android5media30IResourc_d783483c.js"
_ZN7android13MediaRecorder11sendCommandEiii: Loaded handler at "/home/teammrpa/__handlers__/libmedia.so/_ZN7android13MediaRecorder11send_54e1e7bb.js"
_ZN7android14MtpEventPacket11sendRequestEP11usb_request: Loaded handler at "/home/teammrpa/__handlers__/libmtp.so/_ZN7android14MtpEventPacket11sen_93bad13a.js"
_ZN7android9MtpServer14sendStoreAddedEj: Loaded handler at "/home/teammrpa/__handlers__/libmtp.so/_ZN7android9MtpServer14sendStoreAddedEj.js"
_ZN7android9MtpDevice8sendDataEv: Loaded handler at "/home/teammrpa/__handlers__/libmtp.so/_ZN7android9MtpDevice8sendDataEv.js"
_ZN7android18MtpFfsCompatHandle8sendFileE14mtp_file_range: Loaded handler at "/home/teammrpa/__handlers__/libmtp.so/_ZN7android18MtpFfsCompatHandle8_37263f12.js"
_ZN7android9MtpServer21sendObjectInfoChangedEj: Loaded handler at "/home/teammrpa/__handlers__/libmtp.so/_ZN7android9MtpServer21sendObjec_f93a69c2.js"
_ZN7android12MtpDevHandle8sendFileE14mtp_file_range: Loaded handler at "/home/teammrpa/__handlers__/libmtp.so/_ZN7android12MtpDevHandle8sendFi_e48bebb3.js"
_ZN7android9MtpServer17sendObjectRemovedEj: Loaded handler at "/home/teammrpa/__handlers__/libmtp.so/_ZN7android9MtpServer17sendObjec_4c09ad98.js"
_ZN7android9MtpDevice14sendObjectInfoEPNS_13MtpObjectInfoE: Loaded handler at "/home/teammrpa/__handlers__/libmtp.so/_ZN7android9MtpDevice14sendObjec_714e59c5.js"
_ZN7android9MtpServer15sendObjectAddedEj: Loaded handler at "/home/teammrpa/__handlers__/libmtp.so/_ZN7android9MtpServer15sendObjectAddedEj.js"
...
Started tracing 176 functions. Press Ctrl+C to stop.                    
           /* TID 0x723b */
   297 ms  _ZN7android11GraphicsEnv18sendGpuStatsLockedENS_12GpuStatsInfo3ApiEbl()
           /* TID 0x7239 */
   302 ms  _ZN7android3gui7BitTube11sendObjectsEPS1_PKvmm()
   302 ms     | sendto(sockfd=0x6d, len=0x7959f5d550, flags=0xd8, dest_addr=0x4040, addrlen=0x0)
           /* TID 0x7202 */
   404 ms  _ZN7android13InputConsumer18sendFinishedSignalEjb()
   404 ms     | _ZN7android13InputConsumer27sendUnchainedFinishedSignalEjb()
   404 ms     |    | _ZN7android12InputChannel11sendMessageEPKNS_12InputMessageE()
   404 ms     |    |    | __sendto_chk()
   404 ms     |    |    |    | sendto(sockfd=0x8f, len=0x7ff84226d0, flags=0x18, dest_addr=0x4040, addrlen=0x0)
           /* TID 0x724d */
   436 ms  sendmsg(sockfd=0xa7, msg=0x79e7d5e3e0, flags=0x40)
           /* TID 0x7250 */
   535 ms  _ZN12FwmarkClient4sendEP13FwmarkCommandiP17FwmarkConnectInfo()
   535 ms     | sendmsg(sockfd=0xc6, msg=0x79e65fa750, flags=0x0)
   536 ms  _ZN12FwmarkClient4sendEP13FwmarkCommandiP17FwmarkConnectInfo()
   536 ms     | sendmsg(sockfd=0xc6, msg=0x79e65fa750, flags=0x0)
   537 ms  _ZN12FwmarkClient4sendEP13FwmarkCommandiP17FwmarkConnectInfo()
   537 ms     | sendmsg(sockfd=0xcd, msg=0x79e65fa750, flags=0x0)
   538 ms  _ZN12FwmarkClient4sendEP13FwmarkCommandiP17FwmarkConnectInfo()
   538 ms     | sendmsg(sockfd=0xcd, msg=0x79e65fa750, flags=0x0)

。 ChatGPT 也尝试为我编写一个脚本,但它根本没有输出任何内容。

android security reverse-engineering frida
1个回答
0
投票

如果您想跟踪 Java/Kotlin 方法,那么您使用了错误的参数。

-i "checkRequest*"
仅捕获 C/本机方法。

要捕获以 checkRequest 开头的任何类的 Java 方法,您需要使用

-j "*!checkRequest*"

!
前面的星号是类名过滤方法名过滤后面的部分。

另请参阅 Frida 网页上的 frida-trace 示例

为了获取 Java 堆栈跟踪 AFIR,Frida 不提供直接方法(在 Frida 跟踪中,如果挂钩方法,您只能看到调用堆栈)。但您可以编辑生成的处理程序 js 文件。

您应该能够通过使用 Frida 引发 Java 异常来获取 Java 堆栈跟踪,然后直接捕获它以获取包含堆栈跟踪的异常。

https://frida.re/docs/frida-trace/

© www.soinside.com 2019 - 2024. All rights reserved.